Kontakty

Odosielanie príkazov do inej konzolovej aplikácie powershell. Techniky práce so vzdialenými systémami prostredníctvom PowerShell. WinRM - Vzdialená správa systému Windows

Často pracujem s príkazmi na vzdialených systémoch cez PowerShell, a to ako pri penetračných testoch, tak pri bežných úlohách. Diaľkové príkazy sa spúšťajú prostredníctvom protokolu WinRM (Windows Remote Management), ktorý, pokiaľ viem, je podporovaný v systémoch Windows Vista SP 1, Windows 7, Windows Server 2008 a Windows Server 2012.

Úvod

Často pracujem s príkazmi na vzdialených systémoch cez PowerShell, a to ako pri penetračných testoch, tak pri bežných úlohách. Diaľkové príkazy sa spúšťajú pomocou protokolu WinRM (Windows Remote Management), ktorý, pokiaľ viem, je podporovaný v systémoch Windows Vista SP 1, Windows 7, Windows Server 2008 a Windows Server 2012.

Počiatočné nastavenia

Predtým, ako začnete pracovať so vzdialeným systémom, musíte dokončiť nastavenie.

1. Spustite konzolu PowerShell ako správca a spustite nasledujúci príkaz:

Povoliť -PSRemoting -force

Vyššie uvedený príkaz umožňuje spustenie príkazov na vzdialených systémoch. Ak máte nejaké problémy, použite nižšie uvedené príkazy:

2. Uistite sa, že sa služba WinRM spustí automaticky.

# Nastavte požadovaný režim

Služba set -service WinRM -StartMode je automatická

# Skontrolujte, či je služba spustená

Get -WmiObject -Class win32_service | Kde -objekt ($ _. Názov podobný „WinRM“)

3. Nastavte stav všetkých hostiteľov na „platný“ (môžete to urobiť neskôr).

# Veríme všetkým hostiteľom

Položka sady WSMan: localhost \ client \ trustedhosts -hodnota *

# Skontrolujte konfiguráciu dôveryhodných hostiteľov

Získať položku WSMan: \ localhost \ Client \ TrustedHosts

Príklady práce s vzdialené systémy

Spustenie jedného príkazu na vzdialenom systéme

Príkaz „Vyvolať príkaz“ sa používa na spustenie príkazov na vzdialených systémoch. Môžete pracovať ako aktuálny používateľ alebo použiť účet tretej strany, ak pracujete na systéme, ktorý nie je súčasťou domény:

Vyvolať príkaz -názov_počítača MyServer1 -ScriptBlock (názov hostiteľa)
Vyvolať príkaz -Názov_počítača MyServer1 -Demo poverení \ serveradmin -ScriptBlock (názov hostiteľa)

Ak je nainštalovaný modul na prácu so službou Active Directory, je možné spúšťať príkazy na viacerých systémoch pomocou kanála:

Get -ADComputer -Filter * -vlastnosti názov | vyberte @ (Meno = "meno_počítača"; Výraz = ($ _. "meno")) |
Vyvolať príkaz -ScriptBlock (názov hostiteľa)

Na vzdialenom systéme je niekedy potrebné spustiť skript uložený lokálne:

Vyvolať príkaz -Názov_počítača MyServer1 -FilePath C: \ pentest \ Invoke -Mimikatz.ps1
Vyvolať príkaz -Názov_počítača MyServer1 -FilePath C: \ pentest \ Invoke -Mimikatz.ps1 -Credentials demo \ serveradmin

Ak dynamicky generujete príkazy alebo funkcie, ktoré sú potom odoslané do vzdialeného systému, môžete použiť veľa príkazov invoke-expression a invoke-command:

$ MyCommand = "názov hostiteľa"
$ MyFunction = "funkcia zla (napíšte hostiteľovi" "Získanie zla ..." "; iex -príkaz $ MyCommand); zlo"
vyvolať príkaz -počítačové meno MyServer1 -dôveryhodné údaje \ serveradmin -ScriptBlock
(Vyvolať -Výraz -Príkaz „$ args“) -ArgumentList $ MyFunction

Organizácia interaktívnej konzoly na vzdialenom systéme

Interaktívnu konzolu PowerShell môžete nastaviť na vzdialenom systéme pomocou príkazu „Enter-PsSession“ (niečo ako SSH). Príkaz „Enter-PsSession“ sa tiež spúšťa buď ako aktuálny používateľ, alebo pomocou alternatívneho účtu:

Enter-PsSession –ComputerName server1.domain.com
Enter-PsSession – názov počítača server1.doména.com –doména poverení \ serveradmin

Relácia je ukončená príkazom „Exit-PsSession“:

Vytváranie relácií na pozadí

Ďalšou užitočnou funkciou je možnosť vytvárať relácie na pozadí (príkaz „New-PsSession“). Relácie na pozadí môžu byť užitočné pri spustení viacerých príkazov na viacerých systémoch. Rovnako ako predchádzajúce príkazy, príkaz „New-PsSession“ sa spúšťa v mene aktuálneho používateľa alebo pomocou alternatívneho účtu:

Nový -PSSession -Názov počítača server1.doména.com
New-PSSession –ComputerName server1.domain.com –doména poverení \ serveradmin

Ak je nainštalovaný modul na prácu s ActiveDirectory, je možné súčasne vytvárať relácie na pozadí pre viac systémov (tento trik je možné vykonať rôzne cesty). Nasleduje príklad vytvárania relácií na pozadí pre všetky systémy v doméne. V tomto prípade sú relácie vytvorené v systéme, ktorý nie je doménou, pomocou účtu alternatívnej domény.

Nový -PSDrive -PSProvider ActiveDirectory -Name RemoteADS -Root "
"-Server a.b.c.d -dôveryhodná doména \ užívateľ
cd RemoteADS:
Get -ADComputer -Filter * -Vlastnosti názov | vyberte @ (Name = "ComputerName"; Výraz = ($ _. "name"))
| Nová relácia PSSession

Zoznam relácií na pozadí

Po vytvorení niekoľkých relácií na pozadí si ich zoznam môžete prezrieť pomocou príkazu „Get-PsSession“.

Interakcia s reláciami na pozadí

Spočiatku som mal podobný pocit, ako som pracoval s reláciami v MetaSploit. Relácie na pozadí v PowerShell sú však o niečo stabilnejšie. Príklad interakcie pomocou ID relácie je uvedený nižšie:

Enter-PsSession –id 3

Ak chcete reláciu ukončiť, použite príkaz „Exit-PsSession“. Relácia sa vráti na pozadie.

Spúšťanie príkazov prostredníctvom relácií na pozadí

Ak chcete vykonať príkaz vo všetkých aktívnych reláciách, použite skupinu príkazov „Invoke-Command“ a „Get-PsSession“.

Vyvolať príkaz -relácia (Get -PSSession) -ScriptBlock (názov hostiteľa)

Odstraňujú sa relácie na pozadí

Ak chcete odstrániť všetky aktívne relácie, použite príkaz "Disconnect-PsSession"

Get-PSSession | Odpojiť-PSSession

Záver

Diaľkové príkazy v PowerShell otvárajú obrovské možnosti pre správcov aj penetračných testerov. Bez ohľadu na situáciu, ako budete pracovať so vzdialenými systémami, všetko sa líši od nasledujúceho:

  • Na spustenie jedného príkazu na vzdialenom systéme použite príkaz Invoke-Command.
  • Na interakciu s jediným systémom použite Enter-PSSession.
  • Ak chcete spustiť viac príkazov na viacerých systémoch, použite relácie na pozadí.

Dúfam, že vám tento článok pomohol.

04.03.2011 Bill Stewart

V. Verzie systému Windows PowerShell 2.0 implementuje alternatívny mechanizmus na pripojenie k vzdialeným počítačom, ktorý sa nazýva vzdialená vzdialenosť. Tento mechanizmus využíva vybavenie služby diaľkové ovládanie Windows (Windows Remote Management, WinRM). Poskytuje pripojenie k vzdialenému počítaču a tiež spúšťanie príkazov vykonaných na tomto vzdialenom počítači

Vývoj PowerShell 1.0 bol skutočným prelomom v nástrojoch na správu a automatizáciu systému Windows XP a novších verzií platformy Windows OS. Na platforme. Internetová sieť Technológia PowerShell 1.0 obsahuje konzistentnú štruktúru príkazov (rutiny), má výkonné vstavané nástroje na formátovanie výstupu a poskytuje výrazné zvýšenie dostupnosti ďalších technológií, predovšetkým Windows Management Instrumentation (WMI). Avšak, aj keď niektoré kompozitné Príkazy PowerShell 1.0 a objekty. NET sa môže pripojiť k vzdialeným počítačom, táto funkcia je implementovaná odlišne, v závislosti od konkrétneho prípadu. Príkazy, ktoré podporujú vzdialené pripojenia, majú parameter -ComputerName; na nadviazanie spojení tiež používajú buď vzdialené volanie procedúr (RPC) alebo DCOM.

V mnohých situáciách RPC a DCOM odvádzajú dobrú prácu v oblasti riadenia, ale niekedy sa vyskytnú problémy pri diagnostike a identifikácii základnej príčiny problémov. Príkaz Get -Service môže napríklad čítať servisné údaje zo vzdialeného počítača pomocou parametra -ComputerName, ale tento príkaz nemá parameter -Credential, a preto musí byť prihlásený pomocou účtu, ktorý má povolenie na prístup k vzdialenému systému vykonať to.

Windows PowerShell 2.0 však predstavuje alternatívny mechanizmus na pripojenie k vzdialeným počítačom, ktorý sa nazýva vzdialená vzdialenosť. Tento mechanizmus používa nástroje služby Windows Remote Management (WinRM). Poskytuje pripojenie k vzdialenému počítaču a tiež spúšťanie príkazov, ktoré sú na tomto vzdialenom počítači vykonávané. Vysvetlím to na príklade. Remote Desktop Connectors odkazuje na grafické používateľské rozhranie rovnakým spôsobom, akým je vzdialená vzdialenosť príkazovému riadku PowerShell. Keď spustíte zložený príkaz pomocou diaľkového ovládania, príkaz sa skutočne vykoná na vzdialenom počítači, ale výsledky môžete vidieť na lokálnom počítači.

Kde získať Windows PowerShell 2.0

PowerShell 2.0 a WinRM sú súčasťou systému Windows 7 a Windows Server 2008 R2, takže ak používate tieto operačné systémy, tieto súčasti nemusíte inštalovať. Ak pracujete s Systémy Windows Vista SP2, Windows XP SP3, Windows Server 2008 SP2 alebo Windows Server 2003 SP2, budete si musieť stiahnuť a nainštalovať Balík Windows Management Framework Core (support.microsoft.com/kb/968930).

Povolenie funkcie diaľkového ovládania

Aby sa počítač mohol pripojiť k vzdialeným systémom, v ktorých je nainštalovaný PowerShell, musia byť splnené nasledujúce podmienky.

  1. Služba WinRM musí byť aktivovaná.
  2. Musí byť nainštalovaný poslucháč WinRM, ktorý prijíma pripojenia z jednej alebo viacerých adries IP.
  3. POŽARNE dvere Aby bolo možné vytvárať pripojenia prostredníctvom WinRM, musí byť nakonfigurovaný systém Windows.
  4. Relácia PowerShell musí byť povolená a správne nakonfigurovaná.

Ak počítač neprijíma pripojenia z prostredia PowerShell nainštalovaného na vzdialených počítačoch, spustite ho špecifikované podmienky nie je nutné.

S cieľom pomôcť používateľom začať čo najskôr, vývojári Microsoft PowerShell vytvorili príkaz Enable-PSRemoting na automatickú konfiguráciu týchto komponentov. Toto nastavenie nie je potrebné vykonať na zariadení, s ktorým budete vzdialene komunikovať, ale na počítači, ku ktorému budete vzdialene pristupovať. Príkaz Enable-PSRemoting môžete spustiť iba vtedy, ak používate PowerShell ako správca. Ak pracujete s Stroje Windows Vista, Server 2008 a novšie verzie, kliknite pravým tlačidlom myši na ikonu PowerShell a v rozbaľovacej ponuke vyberte položku Spustiť ako správca. Ak spustíte príkaz Enable -PSRemoting s parametrom -Force, systém vás po spustení nepožiada o povolenie dokončiť každý krok konfigurácie. Ak chcete získať ďalšie informácie o zloženom príkaze Enable-PSRemoting, spustite príkaz

Get-Help Enable-PSRemoting

Vykonanie jedného príkazu na vzdialenom počítači

Najľahší spôsob pripojenia k PowerShell na vzdialenom počítači je príkaz Enter-PSSession. Tento príkaz je predvolene spustený s parametrom -ComputerName, takže pri zadávaní z klávesnice tento parameter nemusíte zadávať. Ak chcete napríklad vytvoriť spojenie so vzdialeným počítačom s názvom rigel, zadajte pomocou klávesnice

PS C: \> Enter-PSSession rigel

Všimnite si toho, že pre úplnosť uvádzam v texte pozvánku. Ako súčasť príkazu nemusíte zadávať výzvu.

Po zadaní vzdialenej relácie sa zmení syntax výzvy PowerShell. Teraz bude obsahovať názov vzdialeného počítača uzavretý v hranatých zátvorkách; to bude znamenať, že ste nadviazali spojenie so vzdialeným počítačom. V takom prípade bude pozvánka vyzerať takto:

: PS C: \>

Po zriadení vzdialené pripojenie všetky príkazy, ktoré zadáte do príkazového riadka, sa vykonajú na vzdialenom počítači. Ak teda zadáte príkaz

: PS C: \> Get-ChildItem C: \

príkaz Get-ChildItem sa vykoná na vzdialenom počítači. Jeho výstup bude obsahovať názvy súborov a priečinkov uložených na jednotke C vzdialeného počítača. Reláciu vzdialenej vzdialenosti ukončíte príkazom Exit-PSSession

: PS C: \> Ukončiť-PSSession

Spustenie skriptu Scriptblock na vzdialenom počítači

Vzdialená vzdialenosť PowerShell vám umožní spustiť blok skriptov alebo blockblock (tj. Blok kódu PowerShell uzavretý do zložených zátvoriek) na vzdialenom počítači. Na to musíte použiť príkaz Invoke -Command s parametrom -ComputerName. Napríklad v príkaze uvedenom na obrázku 1 som použil príkaz Invoke na spustenie programu Get-ChildItem na vzdialenom počítači. Pri prezeraní obrázku 1 si všimnite, že som pred spustením bloku skriptov nepoužil príkaz Enter-PSSession na vytvorenie pripojenia k vzdialenému počítaču. Enter-PSSession a Invoke-Command sú dve rôzne metódy diaľkovej komunikácie.

Prvým parametrom príkazu Invoke je -ScriptBlock; ukazuje na kód, ktorý sa chystáte vykonať. Na obrázku 1 som vynechal názov parametra -ScriptBlock, pretože je voliteľný. Parameter -ComputerName obsahuje názov vzdialeného počítača. Ako vidíte na výstupe z príkazu Get-ChildItem, PowerShell dokonca pre pohodlie operátora uvádza názov vzdialeného počítača v stĺpci PSComputerName výstupu.

Vykonanie bloku skriptu na viacerých vzdialených počítačoch

Blok skriptu je možné vykonať aj na viacerých vzdialených počítačoch. Hovorí sa tomu konfigurácia jedna k mnohým alebo postupné nasadenie. Na obrázku 1 obsahuje parameter -ComputerName pre príkaz Invoke -Command jeden názov, ale môžete zahrnúť aj viacero názvov počítačov. Takže príkaz

PS C: \> Vyvolať príkaz (Get-ChildItem env: co *)-počítačový titan, rigel

umožňuje spustenie príkazu Get-ChildItem na dvoch vzdialených počítačoch. V texte článku je tento príkaz rozdelený na niekoľko riadkov, ale v Konzola PowerShell malo by byť zadané na jednom riadku. To isté platí pre ostatné príkazy, ktoré sú rozdelené do viacerých riadkov. Rovnako ako na obrázku 1, stĺpec PSComputerName vo výstupe bude obsahovať názvy počítačov.

Vykonávanie bloku skriptu na pozadí

PowerShell 2.0 poskytuje úlohy na pozadí, čo znamená, že operátor môže spustiť príkaz na pozadí. Táto funkcia je užitočná pri spúšťaní príkazov, ktorých dokončenie trvá dlho.

Na spustenie úlohy na pozadí na lokálnom počítači môžete použiť príkaz Start-Job. Musím však povedať, že tento príkaz nemá parameter -ComputerName, čo znamená, že ho nemožno použiť na spustenie úlohy na pozadí na vzdialenom počítači. Namiesto toho budete musieť spustiť príkaz Invoke -Command s parametrom -AsJob. Vrchný príkaz na obrázku 2 napríklad spustí blok skriptu ako úlohu na pozadí vzdialeného počítača titan. Po zadaní tohto príkazu sa na obrazovke okamžite zobrazila výzva: PowerShell odoslal blok skriptov na spustenie do vzdialeného počítača a potom mi vrátil kontrolu. Varovanie uvádza, že vykonaný príkaz sa nezmestil do okna konzoly, a preto nebol zahrnutý do výstupu. Ak by som mal širšie okno konzoly, formátovač PowerShell by príkaz zahrnoval do výstupu. Stĺpce Id a Názov označujú úlohu (jej identifikátor, respektíve popisný názov) a stĺpec State uvádza, či úloha prebieha, je pozastavená alebo dokončená. Stĺpec HasMoreData obsahuje informácie naznačujúce, že boli načítané všetky údaje pre danú úlohu alebo že úloha obsahuje ďalšie informácie, ktoré je potrebné načítať.

Môžete spustiť príkaz Get-Job a zistiť, či sa úloha na pozadí dokončila, ako ukazuje druhý príkaz na obrázku 2. Ak nepoužívate žiadne parametre, Get-Job skontroluje stav všetkých úloh, ktoré sú spustené v aktuálnej relácii . Ak máte spustených viac úloh súčasne, môžete pomocou volieb ako -Id alebo -Name určiť, ktorú úlohu chcete skontrolovať. Po dokončení úlohy na pozadí bude stĺpec Stav výstupu dokončený.

Na prečítanie výsledkov úlohy na pozadí môžete použiť príkaz Prijať úlohu. Tento príkaz, podobne ako príkaz Get-Job, vráti výstup všetkých úloh spustených v aktuálnej relácii, pokiaľ ste na zadanie úlohy, o ktorú máte záujem, nepoužili parameter. Napríklad posledný príkaz na obrázku 2 obsahuje parameter -Id, ktorý naznačuje, že chcete výstup pre ID úlohy 9. Názov parametra -Id som vynechal, pretože je voliteľný. Obrázok 3 zobrazuje posledné riadky výstupu súvisiace s vykonaním príslušnej vzdialenej úlohy na pozadí.

Vytváranie relácií PowerShell

Vyššie uvedené príklady ukazujú, ako získať prístup k výzve PowerShell na vzdialenom počítači a ako vykonávať príkazy na vzdialených počítačoch. Ale ešte som nespomenul, že diaľkové ovládanie sa vždy vykonáva v kontexte relácie. Relácia je, povedzme, domovom PowerShell. Keď otvoríte okno konzoly PowerShell alebo okno ISE (PowerShell Integrated Scripting Environment), vytvoríte reláciu. Všetky relácie bez diaľkového ovládania prebiehajú na lokálnom počítači a sú na sebe nezávislé. Všetky vyššie uvedené príklady diaľkového ovládania vytvárajú dočasné relácie, ktoré sa automaticky ukončia, keď sa diaľkové ovládanie skončí. Okrem toho je možné inicializovať relácie diaľkovej komunikácie a znova ich použiť. Tento prístup je oveľa efektívnejší, keď potrebujete pristupovať k vzdialeným počítačom viackrát.

Na vytvorenie nových relácií použite príkaz New -PSSession s parametrom -ComputerName. Názov tohto parametra je možné v príkazoch vynechať. Takže príkaz

C: \> $ sessions = New-PSSession phineas, ferb, perry

vytvorí tri relácie na troch počítačoch s názvom phineas, ferb a perry. Tieto relácie môžete zobraziť vytvorením premennej $ sessions. Ak to chcete urobiť, zadajte meno do príkazového riadka

$ relácie

a stlačte Enter. Parameter -Session na Invoke-Command podporuje objekty relácií vytvorené príkazom New-PSSession, takže potom môžete použiť príkaz ako nasledujúci:

C: \> Vyvolajte príkaz-relácie (Get-ChildItem) -session $ relácií

Tento príkaz spustí príkaz Get-ChildItem na strojoch phineas, ferb a perry, ale neodpojí sa. Môžete pridať parameter -AsJob a vykonať príkaz na pozadí:

C: \> Vyvolať príkaz (Get -ChildItem) -session $ sessions -asjob

Nový prístup k práci

Vzdialená vzdialenosť PowerShell je nový účinný mechanizmus na vykonávanie príkazov na vzdialených počítačoch. Dúfam, že vás tento článok bude motivovať k objavovaniu nových možností. Podrobnejšie informácie o diaľkovej ovládaní vrátane diagnostických problémov nájdete v referenčných témach prostredia PowerShell about_Remote na adrese technet.microsoft.com/en-us/library/dd347616.aspx.

Bill Stewart ( [chránené e -mailom]) - Správca systému a siete pre French Mortuary, New Mexico



Vzdialená správa pomocou PowerShell

Existuje niekoľko spôsobov práce so vzdialenými počítačmi. Existuje Správa systému Windows Prístrojové vybavenie (WMI), široko používané vo VBScript. Existujú rôzne pomôcky, ktoré umožňujú diaľkové ovládanie, napríklad tie od Sysinternals. Dokonca aj mnohé rutiny PowerShell majú parameter ComputerName, ktorý je možné spustiť na vzdialených počítačoch.

Vo všeobecnosti existuje veľa spôsobov, ale každá z nich má svoje nevýhody. Po prvé, syntax je odlišná, s čím sa dá ľahko zameniť. Za druhé, niektoré príkazy sa správajú odlišne v závislosti od toho, či sú vykonávané lokálne alebo vzdialene. Nakoniec komunikácia môže vyžadovať otvorenie ďalších portov na bráne firewall, čo nie je dobré z hľadiska zabezpečenia.

Vzdialená komunikácia PowerShell rieši väčšinu popísaných problémov. Je založený na implementácii protokolu Web Services for Management (WS-Management) spoločnosťou Microsoft a na komunikáciu používa službu (WinRM). Komunikácia medzi počítačmi prebieha prostredníctvom protokolu HTTP (predvolené) alebo HTTPS. Všetka prevádzka medzi dvoma počítačmi je šifrovaná na úrovni protokolu (okrem prípadov, keď sa používa SSL). Podporovaných je niekoľko spôsobov autentifikácie, vrátane NTLM a Kerberos.

Na rozdiel od nástrojov, ktoré používajú rôzne programovacie rozhrania, PS Remoting funguje nasledovne: príkazy zadané na lokálnom počítači sa prenesú na vzdialený počítač a vykonajú sa tam, potom sa výsledok odošle späť. Pretože sú všetky príkazy vykonávané lokálne, nie je potrebné sa obávať kompatibility. PS Remoting navyše potrebuje iba jeden otvorený port na bráne firewall.

Existuje niekoľko spôsobov, ako ho spravovať pomocou diaľkového ovládania PowerShell.

Ovládanie jeden na jedného

Najľahšie na diaľkové ovládanie je interaktívne otváranie vzdialená relácia a vykonávať v ňom potrebné úkony. Otvorme napríklad reláciu na počítači SRV4 a reštartujme na nej tlačovú službu:

Enter -PSSession -ComputerName SRV4
Reštart -služba -zaraďovač mien

Pozrime sa na stav služby a ukončíme vzdialenú reláciu:

Získať službu -zaraďovač mien
Ukončiť reláciu PS

Interaktívna práca je vhodná na riešenie jednoduché úlohy vzdialená správa. Ak potrebujete proces zautomatizovať, je lepšie použiť rutinu Invoke-Command. Takto s ním môžete vykonať rovnakú akciu:

Vyvolajte príkaz -ScriptBlock (zaraďovač reštartu a služby) -názov počítača SRV4

Tento príkaz otvorí vzdialenú reláciu na serveri SRV4, spustí príkazový blok uvedený v parametri -ScriptBlock a zavrie reláciu. Voliteľne môžete zadať parameter -AsJob na spustenie úlohy na pozadí.

Majte na pamäti, že keď beží na pozadí, PowerShell nevracia výsledok. Na jeho získanie budete musieť použiť rutinu Receive-Job.

Aby nebolo možné vykonať niekoľko príkazov, ale skript, má Invoke-Command parameter –FilePath, ktorý je možné použiť namiesto –ScriptBlock na definovanie súboru skriptu. Ako príklad som vytvoril skript, ktorý uvádza zoznam zastavených služieb, a spustil ho na vzdialenom počítači SRV4:

Vyvolajte príkaz -súborová cesta. \ Script.ps1 -názov počítača SRV4

Správa jeden na veľa

Pomerne často je potrebné vykonávať jednu úlohu súbežne na niekoľkých počítačoch. To sa dá urobiť celkom jednoducho pomocou rovnakého príkazu Invoke-Command. Názvy počítačov je možné napríklad jednoducho uviesť a oddeliť čiarkami:

Vyvolať príkaz --ScriptBlock (zaraďovač reštartu -služby) -Názov počítača SRV4, SRV5

Miesto v premennej:

$ servery = @ („SRV1“, „SRV2“, „SRV3“)
Vyvolajte príkaz --ScriptBlock (zaraďovač reštartu -služby) -Názov počítača $ servery

Alebo vyberte zo súboru:

Vyvolajte príkaz -ScriptBlock (zaraďovač reštartu a služby) -názov počítača`
(Získať obsah. \ Servers.txt)

Poznámka: Invoke-Command má obmedzenie parametra ThrottleLimit maximálna čiastka počítače, ktoré je možné ovládať súčasne. Štandardne je tento parameter 32. V prípade potreby ho môžete zmeniť, ale uvedomte si, že zvýšenie tohto parametra zvýši zaťaženie procesora a pamäte vášho počítača, takže túto operáciu je potrebné vykonať veľmi opatrne.

Relácie

Zakaždým, keď spustíte príkaz Invoke-Command, vytvorí sa nová relácia, ktorej vytvorenie vyžaduje čas a prostriedky. Aby sme tomu zabránili, môžeme otvoriť jednu reláciu, v ktorej sa budú vykonávať všetky príkazy. Otvorme napríklad reláciu s názvom SRV4 na počítači SRV4 a vložíme ju do premennej $ session a potom táto relácia vykoná našu úlohu (zastaví dlhočizný zaraďovač):

$ session = New -PSSession -ComputerName SRV4 -Name SRV4
Vyvolajte príkaz -ScriptBlock (zaraďovač servisných služieb | Stop-servis) `
-Relácia $ relácie

Relácia bude aktívna, kým neukončíme konzolu PowerShell. Môžete tiež zavrieť reláciu - Disconnect -PSSession alebo odstrániť - Remove -PSSession.

Teraz uvádzame niekoľko zaujímavých funkcií uvedených v programe PowerShell 3.0. Ak skôr, keď ukončíte reláciu alebo zatvoríte konzolu, bola relácia odstránená, potom v PS 3.0, keď reláciu zatvoríte, prejde do stavu odpojený... Môžeme otvoriť novú reláciu na tom istom (alebo inom) počítači a vykonať príkaz priamo v tejto odpojenej relácii. Ako príklad spustíme tlačovú službu na počítači SRV4, ktorý bol naposledy zastavený:

Vyvolať príkaz -ScriptBlock (zaraďovač štart-služba) `
-Názov počítača SRV4 -Odpojené

Ďalšou možnosťou použitia odpojených relácií je spustenie časovo náročných úloh. Otvorme napríklad reláciu s názvom LongJob na SRV4 a spustíme v nej úlohu na pozadí, ktorá zobrazí zoznam služieb s intervalom 1 minúta:

$ session = New -PSSession -ComputerName SRV4 -Name LongJob
Vyvolajte príkaz -relácia $ session -ScriptBlock`
(Get -Service | foreach ($ _; sleep 60)) -AsJob

Pozrime sa, ako sa úloha vykonáva, a zatvorte reláciu:

Prijať -Úlohu -Meno Úloha2
Disconnect-PSSession $ relácia

Prejdeme k inému počítaču a otvoríme konzolu, pripojíme sa k relácii LongJob a pomocou rutiny cmdlet Receive-PSSession získame výsledok úlohy:

Connect -PSSession -Name LongJob -ComputerName SRV4
Receive -PSSession -Name LongJob

Alebo iná možnosť bez explicitného pripojenia sa k relácii pomocou Connect-PSSession:

$ session = Get -PSSession -Name LongJob -ComputerName SRV4
$ job = Prijať -PSSession $ session -OutTarget úlohu
Prijať-zamestnanie $ práca

Poznámka: aby výsledok zostal v systéme, je potrebné použiť parameter Receive -Job s parametrom -Keep.

Implicitné diaľkové ovládanie

Ďalšou, dosť nekonvenčnou metódou diaľkového ovládania je Implicitný diaľkový ovládač. Pomocou neho môžete lokálne spúšťať rutiny cmdlet umiestnené na vzdialenom počítači bez vytvárania vzdialenej relácie.

Zoberme si napríklad bežnú pracovnú stanicu bez nainštalovaných nástrojov na vzdialenú správu. Vytvorte vzdialenú reláciu s radičom domény SRV4 a importujte modul do tejto relácie Aktívny adresár:

$ session = New -PSSession -ComputerName SRV4
Vyvolať príkaz (relácia modulu ActiveDirectory)-relácia $ relácie

Potom exportujeme rutiny Active Directory zo vzdialenej relácie a umiestnime ich do lokálneho modulu RemoteAD:

Export -PSSession -Session $ session -CommandName * -AD * -OutputModule RemoteAD`
-AllowClobber

Tento príkaz vytvorí nový modul PowerShell v priečinku WindowsPowerShell \ Modules \ RemoteAD. Načítajú sa iba rutiny s názvami zodpovedajúcimi vzoru * -AD *. Samotné rutiny cmdlet sa však nekopírujú miestny počítač... Miestny modul slúži ako druh skratky a samotné príkazy sa budú vykonávať na vzdialenom radiči domény.

Po vytvorení modulu je možné vzdialenú reláciu zatvoriť, už nie je potrebná.

Nový modul importujeme do aktuálnej relácie (v PS 3.0 tento krok môžete preskočiť):

Import-modul RemoteAD

Teraz pozor - neotvárame vzdialenú reláciu s radičom domény, kde sú umiestnené rutiny cmdlet. Túto reláciu nie je potrebné vyslovene začínať - dá sa to zvládnuť implicitne pokusom o spustenie vzdialených rutín:

Nový -ADUser -Názov BillGates -Spoločnosť Microsoft
Get-ADUser BillGates

Tým sa obnoví vzdialené pripojenie k radiču domény, potom sa príkaz odošle do radiča domény a tam sa vykoná. Výsledok spustenia bude serializovaný do XML a prenesený cez sieť na lokálny počítač, kde bude deserializovaný do objektov, s ktorými môže PowerShell pracovať.

Vzdialená relácia zostane aktívna, kým nezavriete konzolu alebo neodinštalujete modul RemoteAD.

Implicitné diaľkové ovládanie vám umožňuje pracovať s rutinami cmdlet na vzdialenom počítači rovnakým spôsobom, ako keby boli nainštalované na miestnom počítači. Súčasne sú všetky potrebné rutiny vždy po ruke, čo je celkom výhodné.

Na záver poviem, že v súčasnosti je PowerShell Remoting hlavným nástrojom pre vzdialenú správu operačných systémov Windows. Každý správca systému Windows preto musí vedieť o svojich schopnostiach a byť schopný ich používať.

Tento článok podrobne vysvetľuje tému vzdialenej komunikácie pomocou prostredia PowerShell 2.0. V prvom rade musíme spustiť službu, s ktorou sa bude vykonávať vzdialená komunikácia.

Spustíme službu WinRm
Na diaľku PowerShell 2.0 používa službu WinRM, ktorá je predvolene predinštalovaná v systéme Windows 7 a Windows 2008 R2. Pre viac skoré verzie operačný systém musí byť nainštalovaný dodatočne. Uvedená služba je do počítača nainštalovaná, keď inštalácia PowerShell 2,0. Na overenie prítomnosti WinRM spustite konzolu PowerShell 2.0 a spustite v nej príkaz:
Get-Service WinRm
Výsledok bude vyzerať takto:

Stavový názov Zobrazované meno ------ ---- ----------- Zastavené winrm Windows Remote Management (WS-Manag ...

Ako vidíte, služba je k dispozícii, ale nie je spustená. Na spustenie WinRm musíte spustiť príkaz z konzoly PowerShell 2.0 s právami správcu:
Povoliť-PSRemoting
Na požiadanie o potvrdenie spustenia služby stlačte tlačidlo „Y“. Služba WinRM je teraz nastavená na typ spustenia „Automatický“; pobeží to vždy, keď sa počítač spustí. Príkaz Enable-PSRemoting nielenže spustí službu a zmení jej typ spustenia, ale tiež správne nakonfiguruje bránu firewall, aby fungovala správne. Služba WinRm prijíma požiadavky z akejkoľvek IP adresy.

Žiadame mená všetkých pripojených poskytovateľov:
Get-PSProvider
Ako vidíte, teraz máme ďalšieho poskytovateľa s názvom WSMan.
Priradenie dôveryhodných uzlov

V konzole PowerShell 2.0 spustite príkazy s oprávneniami správcu:

Set-Location –Path WSMan: Set-Location –Path localhost \ client Get-ChildItem

Poznámka
Všimnite si toho, že v prvom príkaze je hodnota parametra –Path ukončená dvojbodkou, pretože toto je poskytovateľ.

Na počítači, s ktorým chcete pracovať vzdialene, by ste mali určiť, ktoré servery sa môžu pripojiť k tomuto počítaču. Také servery sú známe ako „dôveryhodné stránky“. Ak ste teda na serveri „MyServer“, mali by ste predtým, ako budete môcť vzdialene pracovať s počítačom „MyComputer“, nakonfigurovať dôveryhodných hostiteľov (TrustedHosts). Nasledujúci spôsob priradenia dôveryhodných stránok sa používa, ak počítač nie je členom domény Active Directory. Ak je počítač členom domény Active Directory, nastavenia TrustedHosts je možné konfigurovať prostredníctvom skupinovej politiky.

Dôležité!
Nasledujúci príkaz nebude fungovať, ak WSMan: \ localhost \ client nie je nainštalovaný v aktuálnom adresári (pozri vyvolanie príkazu, ktoré sme urobili vyššie).

Nastavená položka TrustedHosts *

Príkaz môžete spustiť z iného adresára, ale potom musíte zadať úplnú cestu k TrustedHosts:

Položka položky WSMan: \ localhost \ Client \ TrustedHosts *

Na požiadavke na potvrdenie stlačte kláves „Y“.

Aby PowerShell videl zmeny, ktoré sme urobili v nastaveniach TrustedHosts, musíte reštartovať službu WSMan. To sa vykonáva pomocou nasledujúceho príkazu:
Reštartujte službu winrm

Podobnú akciu je možné vykonať z operačného systému DOS. Spustite príkaz winrm -?. Zobrazí sa všeobecná pomoc s príkazom. Ak chcete zobraziť aktuálnu hodnotu TrustedHosts, spustite príkaz:

winrm získať winrm / config / client

a aby ste mohli nastaviť hodnotu, mali by ste spustiť:

winrm set winrm / config / client / @ (TrustedHosts = "*")

Vo vyššie uvedených príkazoch bol pre TrustedHosts ako hodnota uvedený symbol „*“, namiesto neho však môžete zadať názvy konkrétnych serverov. Spravovanie TrustedHosts je klasickým prípadom používania slovies PowerShell Získať a nastaviť v spojení: používate Get-Item a Set-Item.
Vytvorenie a ukončenie vzdialenej relácie PowerShell 2.0
V nižšie uvedených príkazoch zadajte namiesto „IpAddress“ požadovanú IP adresu a namiesto „FQDN“ zadajte úplne kvalifikované meno domény:

Enter-PSSession IpAddress

Enter-PSSession FQDN

Ak chcete ukončiť vzdialenú pracovnú reláciu, spustite príkaz:

Príkaz Enter-PSSession vyžaduje úplný názov domény. Napríklad v prípade MyServer.domain.local by jednoduché zadanie MyServeru nefungovalo, ale použitie adresy IP vždy fungovalo dobre v takýchto situáciách. Alternatívna metóda PSSession:

New-PSSession -počítačové meno testMachine2 Get-PSSession

Túto reláciu môžete ukončiť takto:

Get-PSSession | remove-PSSession

Ak chcete otestovať prácu na diaľku, ale nemáte druhý počítač, vytvorte si „vzdialené pripojenie“ počítača k sebe. Ak sa váš počítač napríklad nazýva „MyMachine“, skúste toto:

Nové -PSSession -počítačové meno MyMachine

Možno sa vám to zdá zvláštne a nie logické, ale týmto spôsobom si stále môžete vyskúšať prácu na diaľku v PowerShell 2.0.

Práca vo vzdialenej relácii PowerShell 2.0
Po vytvorení vzdialeného pripojenia môžete organizovať príkazové kanály tak, že ich spustíte v konzole PowerShell 2.0, ale zároveň budú spustené na vzdialenom počítači, ako keby ste boli na jeho klávesnici a zadávali príkazy tam, nie tu. Spustite napríklad tento príkaz a pozrite sa na výsledok jeho práce:

Miesto umiestnenia c: \ | Získajte dieťa

Pretože hlavným účelom tohto tutoriálu je pomôcť vám vytvoriť reláciu vzdialeného pripojenia PowerShell 2.0 a ukázať vám, ako ju ukončiť, musíte sa sami rozhodnúť, aké operácie chcete počas vzdialeného pripojenia vykonávať.

Poznámka
Ak sa vám zdá, že niektorý príkaz nefunguje pre reláciu vzdialeného pripojenia, vyskúšajte ho najskôr na miestnom počítači.

Hneď ako vám vzdialené pripojenie bude fungovať, okamžite vám poskytne možnosť používať PowerShell 2.0 na správu počítačov pripojených k vašej sieti. Teraz môžete skripty spúšťať na iných počítačoch. V prostredí PowerShell 2.0 podporuje mnoho rutín parameter „-computerName“, ale vzdialené pripojenie vám umožňuje používať príkazy rodiny PSSession a vyvolávať príkaz Invoke-Command (to znamená, že môžete robiť, čo chcete).

Riešenie problémov so vzdialenými problémami PowerShell 2.0

Bežným problémom je chyba „Prístup odmietnutý“.

Riešenie:
Spustite PowerShell 2.0 ako správca. Skúste na oboch počítačoch (na tom, ku ktorému sa pripájate a na ktorom sa pripájate), nastaviť „TrustedHosts“ na * (hviezdička). Nezabudnite, že táto možnosť umožňuje pripojenie odkiaľkoľvek.
Nezabudnite reštartovať službu WinRm, inak zmeny, ktoré ste vykonali v „TrustedHosts“, nebudú účinné. Ak chcete službu reštartovať, spustite v konzole PowerShell 2.0 príkaz: Restart-Service WinRm
Dávajte si tiež pozor, aby ste si nezamieňali názov poskytovateľa WSMan s názvom služby WinRm.
Ďalšia zvláštna, ale niekedy užitočná rada: Skúste znova skúsiť vzdialené pripojenie. Zvláštne je, že to nemusí fungovať na prvý pokus, ale môže to fungovať na druhý alebo tretí. Títo. musíte znova spustiť príkaz: Enter -PSSession -computerName myOtherMachineName

Brány firewall, PowerShell 2.0 a server RPC nie sú k dispozícii
Bezpečnostní špecialisti pri takom návrhu zdesene zdvihnú ruky, avšak v prípade prijatia vyššie uvedenej chyby navrhujem, aby ste vypli bránu firewall na oboch počítačoch. Ak po vypnutí všetko funguje, potom musíte skontrolovať používanie portov 135 a 445. Nastavte pre tieto porty výnimky v bránach firewall - to umožní PowerShell 2.0 pracovať na diaľku a súčasne brána firewall ochráni počítač pred hrozby.

P.S. Čítal som, že príkaz Enable-PSRemoting by mal prevziať automatické zmeny nastavení brány firewall, ale podľa mojich skúseností to tak nie je vždy.
Informácie o tom, ako vypnúť bránu firewall v programe Windowws 8 pomocou skupinovej politiky, nájdete v článku.

Dva typy používané na vzdialenú prácu v prostredí PowerShell 2.0
Je načase oznámiť, že v programe PowerShell 2.0 existujú dve možnosti vzdialenej práce.
Prvá metóda je sofistikovanejšia variácia, ktorá používa rutiny na vytvorenie trvalého kanála k druhému počítaču. Názvy takýchto príkazov obsahujú slovo „PSSession“ ako podstatné meno (pamätajte, že názvy rutín sú zostavené podľa pravidla „slovesné podstatné meno“). Zoznam týchto rutín môžete získať pomocou nasledujúceho príkazu:

Získajte príkaz PSSession

Druhý spôsob je tiež kanonickejšou formou práce na diaľku PowerShell 2.0. Táto metóda jednoducho rozširuje lokálne príkazy pridaním parametra „-computerName“, ktorý určuje vzdialený počítač, na ktorom sa má operácia vykonať. Výsledkom bude, že tieto príkazy budú spustené na inom počítači v sieti:

Get -Process -computerName machine2

Zoznam rutín, ktoré je možné použiť takto jednoduchým spôsobom(tj. tie, ktoré majú parameter „-počítačové meno“) je možné získať pomocou nasledujúceho príkazu:

Príkaz | kde ($ _. parameters.keys -obsahuje „ComputerName“)

Úplný zoznam rutín, ktoré môžu fungovať druhým spôsobom, je možné získať nasledovne:

Príkaz | kde ($ _. parameters.keys -obsahuje „ComputerName“ -a ($ _. parameters.keys -neobsahuje „reláciu“))

Zhrnutie práce na diaľku v PowerShell 2.0
Tajomstvo práce na diaľku s PowerShell 2.0 je porozumieť základným veciam:
Nainštalujte WinRm.
Vzdialenú komunikáciu je potrebné povoliť pomocou príkazu Enable-PSRemoting.
Musíte nakonfigurovať TrustedHosts (napríklad ho nastaviť ako hodnotu *).
Pri použití príkazu Enter-PSSession nezabudnite zadať úplný názov hostiteľa alebo IP adresu.

Mnou predložený a mierne zrevidovaný zdroj informácií v anglickom jazyku

# Vytvorte novú reláciu na pripojenie k vzdialenému počítaču $ s = New -PSSession -počítačové meno TestComputer

# Vykonajte na vzdialenom počítači napríklad ľubovoľné akcie - pozrite sa na obsah adresára C:
Vyvolať príkaz -relácia $ s -ScriptBlock (ls c: \)

# Na vzdialenom počítači vytvorte adresár „% ProgramFiles% \ MyCompany \ MySoft“
Vyvolať príkaz -relácia $ s -ScriptBlock (nová položka -cesta „$ env: ProgramFiles \ MyCompany \ MySoft“ -adresár ItemType)

# Je však oveľa pohodlnejšie nezadávať manuálne príkazy, ale spustiť hotový skript na vzdialenom počítači:
Vyvolať príkaz -relácia $ s -FilePath "\\ ServerDir \ Common Scripts \ MyScript.ps1"

# Ukončite reláciu
$ s | remove-PSSession

  • Výučba

Teórie je minimum, hlavne praktická časť. Popisuje, ako konfigurovať WinRM, ako zmeniť profil sieťového adaptéra, poskytuje skript na jeho pridanie do TrustedHosts s filtrovaním, vysvetľuje, prečo sú potrební dôveryhodní hostitelia, a povrchne ho pokrýva. vzdialené pripojenia aby ste si mohli sadnúť a okamžite spravovať vzdialené počítače.

Najjednoduchší spôsob konfigurácie diaľkového ovládača je Povoliť-PSRemoting v PowerShell s oprávneniami správcu. V takom prípade sa stane nasledovné:

  • služba WinRM sa spustí (ak je spustená, reštartuje sa)
  • služba WinRM prejde do stavu - automatické spustenie pri štarte
  • bude vytvorený poslucháč WinRM HTTP premávka v prístave 5985 pre všetky lokálne IP adresy
  • pre poslucháča WinRM sa vytvorí pravidlo brány firewall. Pozor, táto položka sa skončí chybou, ak je niektorá zo sieťových kariet typu „verejnej“ siete, pretože otvorenie portu na takejto karte nie je dobré. Ak sa vám pri konfigurácii zobrazí taká chyba, zmeňte profil tejto dievčatá v sieti pomocou rutiny cmdlet Set-NetConnectionProfile a potom znova spustite Enable-PSRemoting. Ak potrebujete sieťovú kartu s profilom „Verejná sieť“, spustite s parametrom Enable-PSRemoting -SkipNetworkProfileCheck v tomto prípade budú pravidlá brány firewall vytvorené iba z lokálna sieť.
Potom musíte povoliť pripojenie k vzdialenému počítaču zo zariadenia, z ktorého bude ovládanie prebiehať. Deje sa to z bezpečnostných dôvodov, aby sa znížilo riziko hacknutia relácie diaľkového ovládania alebo systému DNS nahradením vzdialeného počítača a aby sa zabránilo spusteniu skriptov na počítačoch, ktoré ste násilne nepovolili.

Ak chcete zistiť, kde sa môžete pripojiť, použite:
get-item wsman: \ localhost \ Client \ TrustedHosts
o povolenie pripojiť sa ku všetkým
set -item wsman: localhost \ client \ trustedhosts -value *
Ak otvoríte prístup ku všetkým zadaním *, WinRM sa pripojí ku VŠETKÝM počítačom bez kontroly. Nezabudnite, že sa otvárate potenciálnemu hackovaniu z vašej miestnej siete. Je lepšie zadať adresy hostiteľov, ku ktorým sa potrebujete pripojiť, potom WinRM odmietne všetky ostatné adresy alebo mená. Ak je počítač, z ktorého je spravovaný, v doméne, bude dôverovať všetkým počítačom v tejto doméne. Ak sa nenachádza v doméne alebo v inej doméne, musíte v TrustedHosts zadať adresu alebo názov počítača, ku ktorému sa pripojíme. Na stroji, ku ktorému sa pripájame, nie je potrebné sa pridávať.

Pomoc obsahuje príkazy, mierne som ich zmenil na skript
######################################################## ## ################################################################## však preto, že v prípade, že už existuje # môžeš vytiahnuť príkazový riadok zadanie parametra priamo napríklad#. \ Add-TrustedHost.ps1 192.168.2.1 ##################################### ###################################################################### ####### # param ($ NewHost = "192.168.2.89") Write-Host "pridanie hostiteľa: $ NewHost" $ prev = (get-item WSMan: \ localhost \ Client \ TrustedHosts) .hodnota if (($ prev.Contains ($ NewHost )) -eq $ false) (if ($ prev -eq "") (set -item WSMan: \ localhost \ Client \ TrustedHosts -Value "(! LANG: $ NewHost" } else { set-item WSMan:\localhost\Client\TrustedHosts -Value "$ prev, $ NewHost" } } Write-Host "" Write-Host "Now TrustedHosts contains:" (get-item WSMan:\localhost\Client\TrustedHosts).value !}
skontroluje, či taký záznam existuje, ak nie, potom ho pridá do zoznamu. Môžete volať z príkazového riadka zadaním adresy alebo mena.

Je dôležité uviesť meno alebo adresu. Ak je v TrustedHosts iba adresa, potom nebude možné otvoriť reláciu podľa mena a naopak - ak zadáte meno, nebude možné sa k adrese pripojiť. Zváž toto.

aký je rozdiel

Enable-PSRemoting robí viac ako "winrm quickconfig". Rutina cmdlet Set-WSManQuickConfig robí presne to isté ako "winrm quickconfig". Enable-PSRemoting pri konfigurácii systému spustí Set-WSManQuickConfig

Vzdialené pripojenia
1. Relácie 1: 1
otvoril tím
Enter -PSSession -ComputerName Test
Na vzdialenom počítači získate škrupinu. Môžete sa k sebe pripojiť zadaním localhost. S parametrom sú uvedené alternatívne kredity -poverovací list, výstup urobí rutina cmdlet Ukončiť reláciu PS

Obmedzenia sú nasledujúce:

  • nemôžete urobiť druhý skok - iba 1 reláciu, nemôžete sa ďalej pripojiť v rámci relácie
  • nemôžete používať príkazy, ktoré majú grafické rozhranie... Ak to urobíte, shell visí, stlačením Ctrl + C zavesíte
  • nemôžete spúšťať príkazy, ktoré majú svoj vlastný shell, napríklad nslookup, netsh
  • skripty môžete spúšťať, ak im to umožňuje politika spustenia na vzdialenom počítači
  • nemôžete sa pripojiť k interaktívnej relácii, prihlásite sa ako "prihlásenie do siete" akoby priľnul sieťový disk... Prihlasovacie skripty sa preto nespustia a domovský priečinok sa nemusí dostať na vzdialený počítač (ďalší dôvod nemapovať domáce priečinky prihlasovacími skriptmi)
  • nebudete môcť komunikovať s používateľom na vzdialenom počítači, aj keď je tam prihlásený. Nebudete mu môcť ukázať okno ani mu nič vytlačiť.
táto metóda je najlepšia pre jednoduché operácie, prihláste sa, trhnite serverom a odpojte sa. Ak potrebujete udržať premenné v rozsahu, potrebujete dlhú operáciu (mnoho hodín alebo dní), potrebujete viac možností správy, potom musíte použiť pokročilejšiu techniku.
Komentár.
objekty prenášané po sieti sú prerušené a prestávajú byť živé. Ich metódy sú odstránené, vlastnosti zostávajú. Natiahnutie predmetu na auto, jeho vyčarovanie a strčenie späť nebude fungovať. Ak potrebujete napísať viac, doplním to osobitne.

2. 1-to-many relácií
Vyvolať príkaz
definujeme, čo budeme vykonávať takto:
$ sb = (príkazy pre vzdialený počítač oddelené bodkočiarkou)
prenos na vzdialené počítače Test1 a Test2
Vyvolajte príkaz -názov počítača Test1, Test2 --ScriptBlock $ sb
je možné obsadiť až 32 automobilov súčasne. Ak máte alternatívne kredity, použite parameter -Credential

Na to, aby namiesto parametra -ScriptBlock, -FilePath, prešiel celý skript, vzdialený počítač NEMUSÍ mať prístup k súboru, bude analyzovaný na časti, prenesený cez HTTP a spustený z druhej strany.

Nezabudnite, že na druhej strane bude nový rozsah, takže váš skript nebude dostávať hodnoty z vašej konzoly a premenné skriptu môžu byť na tejto strane prázdne. Preneste preto pripravené pokyny a skripty s parametrami naraz.

na plné využitie príkazu Invoke-Command musíte byť schopní premeniť riadky na bloky skriptov. Napríklad máte príkazy, ktoré závisia od nejakého zoznamu, musíte vygenerovať reťazec, premeniť ho na ScriptBlock a odoslať ho na vzdialený počítač:
$ sb = :: Vytvoriť ($ SomeString)
kuda78
V článku veľmi chýba dôležitý bod- odovzdanie parametrov skriptu na vzdialenom počítači.

$ deployRemote = (
param (
$ targetEnvName,
$ targetUsername)
$ Global: ErrorActionPreference = "Zastaviť"
#…
}

Vyvolať príkaz -relácia $ relácia -ScriptBlock $ deployRemote -ArgumentList ($ targetEnvName, $ targetUsername)


Áno, naozaj zmeškané. Urobil som to zámerne, aby som recenziu nepreplnil parametrami a popismi. Vďaka. Parameter -ArgumentList funguje s blokmi aj skriptmi

3. Relácie
Vtedy vzniká kópia dielu z druhej strany, ktorá neustále visí v pamäti, a odosielajú sa naň príkazy. Výsledkom je, že sa k nemu môžete znova pripojiť, prečítať si dlhý beh na spustenie, držať sa rôznych skriptov alebo rôznych používateľov. Napríklad máte sadu skriptov, ktoré po častiach riešia jednu úlohu, pričom každý z nich sa môže zase pripojiť k jednej vzdialenej relácii, vidieť výsledky predchádzajúcich príkazov, mať jeden načítaný modul, spoločné premenné, spoločné prostredie, kým sa relácia je násilne zatvorený.

Relácia je vytvorená pomocou rutiny New-PSSession, výsledok môže byť umiestnený do premennej
$ DC01 = New-PSSession -ComputerName DC01 $ Controllers = New-PSSession DC01, DC02, DC03
môžete použiť rovnaké parametre pripojenia ako v programe Invoke-Command

Ako použiť:
ak 1 na 1
Enter -PSSession -Session $ DC01
ak 1-k-mnohým
Vyvolať príkaz -Relácie $ Ovládače --ScriptBlock (get -eventlog -logname security -napad 50)
môžete vidieť, ktoré relácie sú otvorené, pomocou Get-PSSession, zatvorte Remove-PSSession
úplne zatvorte všetky relácie
Get-PSSession | Odstrániť-PSSession
k relácii sa môžete pripojiť pomocou Connect-PSSession, odpojiť sa môžete cez Disconnect-PSSession

Invoke-Command môže okamžite vytvoriť odpojenú reláciu, odosiela príkazy na vykonanie a odpojí sa, neskôr sa môžete pripojiť a stiahnuť pracovné výsledky. To sa deje pomocou parametra -Disconnected. Získavanie výsledkov prostredníctvom rutiny cmdlet Recieve-PSSession.

Relácie majú veľa nastavení, dokonca je možné vytvárať relácie so skrátenou sadou príkazov, modulov atď. Volajú sa vlastné koncové body



Páčil sa vám článok? Zdieľaj to