Contacte

Trimiterea comenzilor către o altă aplicație de consolă PowerShell. Tehnici de lucru cu sisteme la distanță prin PowerShell. WinRM - Windows Remote Management

Lucrez adesea cu comenzi pe sisteme la distanță prin PowerShell, atât în ​​timpul testelor de penetrare, cât și în sarcinile de zi cu zi. Comenzile de la distanță sunt lansate prin intermediul protocolului WinRM (Windows Remote Management), care, din câte știu, este acceptat în Windows Vista SP 1, Windows 7, Windows Server 2008 și Windows Server 2012.

Introducere

Lucrez adesea cu comenzi pe sisteme la distanță prin PowerShell, atât în ​​timpul testelor de penetrare, cât și în sarcinile de zi cu zi. Comenzile de la distanță sunt lansate prin intermediul protocolului WinRM (Windows Remote Management), care, din câte știu, este acceptat în Windows Vista SP 1, Windows 7, Windows Server 2008 și Windows Server 2012.

Setări inițiale

Înainte de a putea începe să lucrați cu sistemul de la distanță, trebuie să finalizați configurarea.

1. Porniți consola PowerShell ca administrator și rulați următoarea comandă:

Enable-PSRemoting -force

Comanda de mai sus permite executarea comenzilor pe sisteme la distanță. Dacă aveți probleme, utilizați comenzile de mai jos:

2. Asigurați-vă că serviciul WinRM pornește automat.

# Setați modul dorit

Set-Service WinRM -StartMode Automatic

# Verificați dacă serviciul rulează

Get-WmiObject -Class win32_service | Where-Object ($ _. Name-like "WinRM")

3. Setați starea tuturor gazdelor la „valid” (o puteți face mai târziu).

# Avem încredere în toate gazdele

Set-Item WSMan: localhost \ client \ trusthosts -value *

# Verificați configurația gazdelor de încredere

Get-Item WSMan: \ localhost \ Client \ TrustedHosts

Exemple de lucru cu sisteme la distanță

Rularea unei singure comenzi pe un sistem la distanță

Comanda "Invoke-Command" este utilizată pentru a rula comenzi pe sisteme la distanță. Puteți lucra ca utilizator curent sau puteți utiliza un cont terț dacă lucrați la un sistem care nu face parte dintr-un domeniu:

Invoke-Command –ComputerName MyServer1 -ScriptBlock (Hostname)
Invoke-Command –ComputerName MyServer1 -Credentials demo \ serveradmin -ScriptBlock (Hostname)

Dacă este instalat un modul de lucru cu Active Directory, devine posibil să rulați comenzi pe mai multe sisteme folosind o conductă:

Get-ADComputer -Filter * -properties nume | selectați @ (Nume = "nume computer"; Expresie = ($ _. "nume")) | |
Invoke-Command -ScriptBlock (nume de gazdă)

Uneori, pe un sistem la distanță, trebuie să rulați un script stocat local:

Invoke-Command -ComputerName MyServer1 -FilePath C: \ pentest \ Invoke-Mimikatz.ps1
Invoke-Command -ComputerName MyServer1 -FilePath C: \ pentest \ Invoke-Mimikatz.ps1 -Credentials demo \ serveradmin

Dacă generați comenzi sau funcții dinamic, care sunt apoi transmise sistemului la distanță, puteți utiliza o grămadă de comenzi de invocare-expresie și invocare-comandă:

$ MyCommand = "nume de gazdă"
$ MyFunction = "function evil (write-host`" Getting evil ... `"; iex -comand $ MyCommand); evil "
invoke-command -ComputerName MyServer1 -Credentials demo \ serveradmin -ScriptBlock
(Invocare-Expresie -Comandă "$ args") -ArgumentList $ MyFunction

Organizarea unei console interactive pe un sistem la distanță

Puteți configura o consolă interactivă în PowerShell pe un sistem la distanță folosind comanda „Enter-PsSession” (un pic ca SSH). Comanda „Enter-PsSession” se execută, de asemenea, fie ca utilizator curent, fie utilizând un cont alternativ:

Enter-PsSession –ComputerName server1.domain.com
Enter-PsSession –ComputerName server1.domain.com –Credentials domain \ serveradmin

Sesiunea este închisă utilizând comanda „Exit-PsSession”:

Crearea sesiunilor de fundal

O altă caracteristică utilă vă permite să creați sesiuni de fundal (comanda „New-PsSession”). Sesiunile de fundal pot fi utile atunci când executați mai multe comenzi pe mai multe sisteme. La fel ca comenzile anterioare, comanda „New-PsSession” se execută în numele utilizatorului curent sau utilizând un cont alternativ:

New-PSSession -ComputerName server1.domain.com
New-PSSession –ComputerName server1.domain.com –Credentials domain \ serveradmin

Dacă este instalat modulul de lucru cu ActiveDirectory, devine posibil să creați simultan sesiuni de fundal pentru mai multe sisteme (acest truc poate fi realizat căi diferite). Mai jos este un exemplu de creare a sesiunilor de fundal pentru toate sistemele dintr-un domeniu. În exemplu, sesiunile sunt create pe un sistem non-domeniu utilizând un cont de domeniu alternativ.

New-PSDrive -PSProvider ActiveDirectory -Name RemoteADS -Root "
"-Server a.b.c.d -credential domain \ user
cd RemoteADS:
Get-ADComputer -Filter * -Nume proprietăți | selectați @ (Name = "ComputerName"; Expression = ($ _. "name"))
| New-PSSession

Listarea sesiunilor de fundal

După ce au fost create mai multe sesiuni de fundal, puteți vizualiza o listă a acestora folosind comanda „Get-PsSession”.

Interacțiunea cu sesiunile de fundal

La început, am avut un sentiment similar cu modul în care am lucrat cu sesiunile în MetaSploit. Cu toate acestea, sesiunile de fundal din PowerShell sunt puțin mai stabile. Un exemplu de interacțiune utilizând un ID de sesiune este prezentat mai jos:

Enter-PsSession –id 3

Pentru a ieși din sesiune, utilizați comanda „Exit-PsSession”. Sesiunea va reveni la fundal.

Rularea comenzilor prin sesiuni de fundal

Dacă doriți să executați o comandă în toate sesiunile active, utilizați o grămadă de comenzi „Invocare-comandă” și „Obținere-PsSession”.

Invocare-Comandă-Sesiune (Get-PSSession) -ScriptBlock (Nume gazdă)

Eliminarea sesiunilor de fundal

Pentru a elimina toate sesiunile active, utilizați comanda „Disconnect-PsSession”

Get-PSSession | Disconnect-PSSession

Concluzie

Comenzile de la distanță din PowerShell deschid oportunități extraordinare atât pentru administratori, cât și pentru testerii de penetrare. Indiferent de situație, de modul în care veți lucra cu sistemele la distanță, totul se reduce la următoarele:

  • Utilizați Invocare-comandă pentru a rula o singură comandă pe un sistem la distanță.
  • Utilizați Enter-PSSession pentru a interacționa cu un singur sistem.
  • Dacă doriți să rulați mai multe comenzi pe mai multe sisteme, utilizați sesiuni de fundal.

Sper că ați găsit util acest articol.

04.03.2011 Bill Stewart

V Versiuni Windows PowerShell 2.0 implementează un mecanism alternativ pentru conectarea la calculatoare la distanță numit telecomandă. Acest mecanism folosește facilitățile serviciului telecomandă Windows (Windows Remote Management, WinRM). Oferă conectivitate la un computer la distanță, precum și lansarea comenzilor executate pe acel computer la distanță

Dezvoltarea PowerShell 1.0 a fost o adevărată descoperire în instrumentele de gestionare și automatizare ale Windows XP și versiunile ulterioare ale platformei Windows OS. Bazat pe platformă. Cadru net Tehnologia PowerShell 1.0 include o structură de comandă consistentă (cmdlet-uri), are instrumente puternice de formatare a ieșirilor încorporate și oferă o creștere semnificativă a disponibilității altor tehnologii, mai ales Windows Management Instrumentation (WMI). Cu toate acestea, deși unii compuși Comenzi PowerShell 1.0 și obiecte. NET se poate conecta la computere la distanță, această funcție este implementată diferit, în funcție de caz. Comenzile care acceptă conexiuni la distanță au parametrul -ComputerName; de asemenea, utilizează fie apeluri de procedură la distanță (RPC), fie DCOM pentru a stabili conexiuni.

În multe situații, RPC și DCOM fac o treabă bună de gestionare, dar uneori apar probleme atunci când se efectuează diagnosticare și se identifică cauza principală a problemelor. De exemplu, comanda Get-Service poate citi datele de serviciu de pe un computer la distanță folosind parametrul -ComputerName, dar această comandă nu are un parametru -Credential și, prin urmare, trebuie conectată cu un cont care are permisiunea de a accesa sistemul la distanță să-l execute.

Cu toate acestea, Windows PowerShell 2.0 introduce un mecanism alternativ de conectare la computerele la distanță numit la distanță. Acest mecanism folosește instrumentele serviciului Windows Remote Management (WinRM). Oferă conectivitate la un computer la distanță, precum și lansarea comenzilor care sunt executate pe acel computer la distanță. Permiteți-mi să explic acest lucru cu un exemplu. Conectori desktop la distanță se referă la interfața grafică a utilizatorului în același mod în care telecomanda este la linia de comandă PowerShell. Când rulați o comandă compusă utilizând telecomanda, comanda este de fapt executată pe mașina la distanță, dar puteți vedea rezultatele pe mașina locală.

De unde să obțineți Windows PowerShell 2.0

PowerShell 2.0 și WinRM sunt incluse în Windows 7 și Windows Server 2008 R2, deci dacă utilizați aceste sisteme de operare, nu este necesar să instalați aceste componente. Dacă lucrezi cu Sisteme Windows Vista SP2, Windows XP SP3, Windows Server 2008 SP2 sau Windows Server 2003 SP2, va trebui să descărcați și să instalați Pachetul Windows Management Framework Core (support.microsoft.com/kb/968930).

Activarea funcționalității de la distanță

Pentru ca computerul să se poată conecta la sistemele de la distanță care au instalat PowerShell, trebuie îndeplinite următoarele condiții.

  1. Serviciul WinRM trebuie activat.
  2. Trebuie instalat un ascultător WinRM care acceptă conexiuni de la una sau mai multe adrese IP.
  3. Paravan de protecție Windows trebuie să fie configurat pentru a putea stabili conexiuni prin WinRM.
  4. Sesiunea PowerShell trebuie să fie activată și configurată corect.

Dacă computerul nu acceptă conexiuni de la PowerShells instalate pe computere la distanță, rulați condiții specificate nu este necesar.

Pentru a ajuta utilizatorii să înceapă cât mai curând posibil, dezvoltatorii Microsoft PowerShell au creat comanda Enable-PSRemoting pentru a configura automat aceste componente. Această setare trebuie făcută nu pe aparatul cu care veți interacționa de la distanță, ci pe computerul pe care îl veți accesa de la distanță. Puteți rula comanda Enable-PSRemoting numai dacă rulați PowerShell în calitate de administrator. Dacă lucrați cu Mașini Windows Vista, Server 2008 și versiunile ulterioare, faceți clic dreapta pe pictograma PowerShell și selectați Executare ca administrator din meniul derulant. Dacă rulați comanda Enable-PSRemoting cu parametrul -Force, sistemul nu vă va cere permisiunea de a finaliza fiecare pas de configurare atunci când este executat. Pentru mai multe informații despre comanda compusă Enable-PSRemoting, rulați comanda

Get-Help Enable-PSRemoting

Executarea unei comenzi pe un computer la distanță

Cel mai simplu mod de a vă conecta la PowerShell pe un computer la distanță este cu comanda Enter-PSSession. În mod implicit, această comandă este executată cu parametrul -ComputerName, deci nu trebuie să specificați acest parametru atunci când îl tastați de la tastatură. De exemplu, pentru a stabili o conexiune cu un computer la distanță numit rigel, introduceți de la tastatură

PS C: \> Enter-PSSession rigel

Rețineți că, pentru completare, includ o invitație în text. Nu trebuie să introduceți solicitarea ca parte a comenzii.

După ce introduceți o sesiune la distanță, sintaxa pentru promptul PowerShell se modifică. Acesta va include acum numele computerului la distanță, între paranteze drepte; acest lucru va însemna că ați stabilit o conexiune la computerul la distanță. În acest caz, invitația va arăta astfel:

: PS C: \>

După stabilirea conexiune la distanță toate comenzile pe care le introduceți pe linia de comandă vor fi executate pe aparatul de la distanță. Deci, dacă introduceți comanda

: PS C: \> Get-Child Element C: \

comanda Get-ChildItem va fi executată pe aparatul de la distanță. Ieșirea acestuia va conține numele fișierelor și folderelor stocate în unitatea C a computerului la distanță. Pentru a încheia sesiunea la distanță, utilizați comanda Exit-PSSession

: PS C: \> Exit-PSSession

Executarea unui script de blocare pe un computer la distanță

Telecomandarea PowerShell vă permite să rulați un bloc de scripturi sau un bloc de scripturi (adică un bloc de cod PowerShell închis în paranteze) pe un computer la distanță. Pentru a face acest lucru, trebuie să utilizați Invoke-Command cu parametrul -ComputerName. De exemplu, în comanda prezentată în Figura 1, am folosit Invocare-Comandă pentru a executa Get-ChildItem pe un computer la distanță. În timp ce examinați Figura 1, observați că nu am folosit comanda Enter-PSSession pentru a stabili o conexiune la computerul la distanță înainte de a rula blocul de script. Enter-PSSession și Invoke-Command sunt două metode diferite de la distanță.

Primul parametru pentru Invoke-Command este parametrul -ScriptBlock; indică codul pe care urmează să îl executați. În Figura 1, am omis numele parametrului -ScriptBlock deoarece este opțional. Parametrul -ComputerName conține numele computerului la distanță. După cum puteți vedea în ieșirea din comanda Get-ChildItem, PowerShell listează chiar și numele computerului la distanță în coloana PSComputerName a ieșirii pentru confortul operatorului.

Executarea unui bloc de script pe mai multe computere la distanță

Blocul de scripturi poate fi executat și pe mai multe computere la distanță. Aceasta se numește o configurație sau o implementare continuă. În Figura 1, parametrul -ComputerName pentru Invoke-Command conține un singur nume, dar puteți include mai multe nume de computer. Deci, comanda

PS C: \> Invoke-Command (Get-ChildItem env: co *) -Computer titan, rigel

permite comenzii Get-ChildItem să ruleze pe două computere la distanță. În textul articolului, această comandă este împărțită în mai multe linii, dar în Consola PowerShell ar trebui să fie introdus pe o singură linie. Același lucru este valabil și pentru alte comenzi care sunt împărțite pe mai multe linii. La fel ca în Figura 1, coloana PSComputerName din ieșire va conține numele computerului.

Executarea unui bloc de script în fundal

PowerShell 2.0 oferă lucrări de fundal, ceea ce înseamnă că operatorul poate rula o comandă în fundal. Această caracteristică este utilă atunci când executați comenzi care durează mult timp pentru a fi finalizate.

Puteți utiliza comanda Start-Job pentru a porni o lucrare de fundal pe computerul local. Dar trebuie să spun că această comandă nu are un parametru -ComputerName, ceea ce înseamnă că nu poate fi folosit pentru a executa o lucrare de fundal pe o mașină la distanță. În schimb, va trebui să rulați Invoke-Command cu parametrul -AsJob. De exemplu, comanda de sus din Figura 2 inițiază blocul de scripturi ca o lucrare de fundal pe computerul la distanță titan. După ce am introdus această comandă, promptul a apărut imediat pe ecran: PowerShell a trimis un bloc de script pentru executare la computerul de la distanță și apoi mi-a returnat controlul. Avertismentul afirmă că comanda executată nu se potrivea în fereastra consolei și, prin urmare, nu a fost inclusă în ieșire. Dacă aș avea o fereastră de consolă mai largă, formatatorul PowerShell ar include comanda în ieșire. Coloanele Id și Nume indică lucrarea (respectiv ID-ul și numele prietenos), iar coloana State indică dacă lucrarea este în curs, întreruptă sau finalizată. Coloana HasMoreData conține informații care indică faptul că toate datele pentru un anumit job au fost recuperate sau că jobul conține mai multe informații care trebuie recuperate.

Puteți rula comanda Get-Job pentru a determina dacă s-a finalizat o lucrare de fundal, așa cum arată a doua comandă din Figura 2. Dacă nu utilizați niciun parametru, Get-Job verifică starea tuturor lucrărilor care rulează în sesiunea curentă . Dacă aveți mai multe joburi care rulează în același timp, puteți utiliza opțiuni precum -Id sau -Name pentru a specifica ce job doriți să verificați. La finalizarea lucrării de fundal, coloana State din ieșire va fi Finalizată.

Puteți utiliza comanda Receive-Job pentru a citi rezultatele unei lucrări de fundal. Această comandă, la fel ca comanda Get-Job, returnează ieșirea tuturor lucrărilor începute în sesiunea curentă, cu excepția cazului în care ați utilizat un parametru pentru a specifica ce job vă interesează. De exemplu, ultima comandă din Figura 2 include parametrul -Id, care indică faptul că doriți ieșirea pentru ID-ul jobului 9. Am omis numele parametrului -Id deoarece este opțional. Figura 3 prezintă ultimele linii de ieșire legate de execuția lucrării de fundal la distanță în cauză.

Crearea sesiunilor PowerShell

Exemplele de mai sus arată cum să accesați solicitarea PowerShell pe o mașină la distanță și cum să executați comenzi pe computere la distanță. Dar nu am menționat încă că distanța se face întotdeauna în contextul sesiunii. O sesiune este, să spunem, casa PowerShell. Când deschideți o fereastră PowerShell Console sau o fereastră PowerShell Integrated Scripting Environment (ISE), creați o sesiune. Fără telecomandă, toate sesiunile rulează pe computerul local și sunt independente una de cealaltă. Toate exemplele de la distanță de mai sus creează sesiuni temporare care se încheie automat la sfârșitul distanței. În plus, este posibilă instanțierea sesiunilor de la distanță și reutilizarea acestora. Această abordare este mult mai eficientă atunci când trebuie să accesați computerele la distanță de mai multe ori.

Pentru a crea sesiuni noi, utilizați comanda New-PSSession cu parametrul -ComputerName. Numele acestui parametru poate fi omis în comenzi. Deci, comanda

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

creează trei sesiuni pe trei computere numite phineas, ferb și perry. Puteți vizualiza aceste sesiuni creând variabila $ sessions. Pentru a face acest lucru, introduceți numele pe linia de comandă

$ sesiuni

și apăsați Enter. Parametrul -Session al Invoke-Command acceptă obiecte de sesiune create cu comanda New-PSSession, astfel încât să puteți utiliza apoi o comandă precum următoarea:

C: \> Invoke-Command (Get-ChildItem) -session $ sesiuni

Această comandă execută comanda Get-ChildItem pe mașinile phineas, ferb și perry, dar nu se deconectează. Puteți adăuga parametrul -AsJob și puteți executa comanda în fundal:

C: \> Invoke-Command (Get-ChildItem) -session $ sessions -asjob

O nouă abordare a muncii

Telecomandarea PowerShell este un nou mecanism puternic pentru executarea comenzilor pe computerele la distanță. Sper că acest articol vă va motiva să explorați noi posibilități. Informații mai detaliate despre telecomandă, inclusiv probleme de diagnosticare, pot fi găsite în subiectele de referință PowerShell despre_Remote la technet.microsoft.com/en-us/library/dd347616.aspx.

Bill Stewart ( [e-mail protejat]) - Administrator de sistem și rețea pentru casa mortuară franceză, New Mexico



Administrare la distanță folosind PowerShell

Există destul de multe metode de lucru cu computere la distanță. Există Gestionarea Windows Instrumentație (WMI), utilizată pe scară largă în VBScript. Există diverse utilitare care permit controlul de la distanță, cum ar fi cele de la Sysinternals. Chiar și multe cmdleturi PowerShell au un parametru ComputerName pentru a rula pe computere la distanță.

În general, există o mulțime de metode, dar fiecare dintre ele are dezavantajele sale. În primul rând, sintaxa este diferită, cu care este ușor de confundat. În al doilea rând, unele comenzi se comportă diferit în funcție de faptul că sunt executate local sau de la distanță. În cele din urmă, comunicarea poate necesita deschiderea porturilor suplimentare pe firewall, ceea ce nu este bun din punct de vedere al securității.

PowerShell la distanță rezolvă majoritatea problemelor descrise. Se bazează pe implementarea de către Microsoft a protocolului Servicii Web pentru Management (WS-Management) și folosește un serviciu (WinRM) pentru comunicare. Comunicarea între computere se face prin HTTP (implicit) sau HTTPS. Tot traficul dintre două computere este criptat la nivel de protocol (cu excepția cazului în care este utilizat SSL). Sunt acceptate mai multe metode de autentificare, inclusiv NTLM și Kerberos.

Spre deosebire de utilitarele care utilizează diferite interfețe de programare, PS Remoting funcționează după cum urmează: comenzile introduse pe computerul local sunt transmise către computerul de la distanță și executate acolo, apoi rezultatul este trimis înapoi. Deoarece toate comenzile sunt executate local, nu este nevoie să vă faceți griji cu privire la compatibilitate. În plus, PS Remoting are nevoie doar de unul port deschis pe firewall.

Există mai multe moduri de a-l gestiona folosind PowerShell Remoting.

Controlul unu la unu

Cel mai simplu mod de a controla de la distanță este de a deschide interactiv sesiune la distanțăși să efectueze acțiunile necesare în acesta. De exemplu, să deschidem o sesiune pe computerul SRV4 și să repornim serviciul de imprimare pe acesta:

Enter-PSSession -ComputerName SRV4
Restart-Service -Nume spooler

Să vedem starea serviciului și să închidem sesiunea la distanță:

Spooler Get-Service -Name
Exit-PSSession

Munca interactivă este potrivită pentru rezolvare sarcini simple administrare la distanță. Dacă trebuie să automatizați procesul, atunci este mai bine să utilizați cmdletul Invocare-comandă. Acesta este modul în care puteți face aceeași acțiune cu ea:

Invoke-Command -ScriptBlock (Restart-Service spooler) -ComputerName SRV4

Această comandă va deschide o sesiune la distanță pe SRV4, va executa blocul de comandă specificat în parametrul -ScriptBlock și va închide sesiunea. Și pentru a rula lucrarea în fundal, puteți specifica opțional parametrul -AsJob.

Rețineți că atunci când rulează în fundal, PowerShell nu returnează un rezultat. Pentru ao obține, va trebui să utilizați cmdletul Receive-Job.

Pentru a executa nu câteva comenzi, ci un script, Invoke-Command are un parametru –FilePath, care poate fi utilizat în loc de –ScriptBlock pentru a defini un fișier script. De exemplu, am creat un script care listează serviciile oprite și l-am rulat pe o mașină SRV4 la distanță:

Invoke-Command -FilePath. \ Script.ps1 -ComputerName SRV4

Managementul unu-la-mulți

Destul de des, devine necesară executarea unei sarcini în paralel pe mai multe computere. Acest lucru se poate face destul de ușor folosind aceeași comandă Invocare. De exemplu, numele computerelor pot fi simplu enumerate, separate prin virgule:

Invoke-Command -ScriptBlock (Restart-Service spooler) -ComputerName SRV4, SRV5

Plasați în variabilă:

$ servere = @ (″ SRV1 ″, ″ SRV2 ″, ″ SRV3 ″)
Invoke-Command -ScriptBlock (Restart-Service spooler) -ComputerName $ servere

Sau luați din fișier:

Invoke-Command -ScriptBlock (Restart-Service spooler) -ComputerName`
(Get-Content. \ Servers.txt)

Notă: Invoke-Command are o limitare a parametrilor ThrottleLimit suma maximă calculatoare care pot fi controlate în același timp. În mod implicit, acest parametru este 32. Puteți să-l modificați dacă este necesar, dar rețineți că mărirea acestui parametru va crește încărcarea pe procesor și memoria computerului dvs., astfel încât această operațiune trebuie efectuată cu mare atenție.

Sesiuni

De fiecare dată când executați Invoke-Command, este creată o nouă sesiune, care necesită timp și resurse pentru a crea. Pentru a evita acest lucru, putem deschide o sesiune în care să executăm toate comenzile. De exemplu, să deschidem o sesiune numită SRV4 pe computerul SRV4 și să o punem în variabila $ session, iar apoi această sesiune ne va îndeplini sarcina (opriți spoolerul îndelung suferit):

$ session = New-PSSession -ComputerName SRV4 -Name SRV4
Invoke-Command -ScriptBlock (Get-Service spooler | Stop-Service) `
-Sesiune $ sesiune

Sesiunea va fi activă până când ieșim din consola PowerShell. De asemenea, puteți închide sesiunea - Disconnect-PSSession sau șterge - Remove-PSSession.

Iată câteva caracteristici interesante introduse în PowerShell 3.0. Dacă mai devreme, când ieșiți din sesiune sau închideți consola, sesiunea a fost ștearsă, atunci în PS 3.0, când închideți sesiunea, aceasta intră în starea deconectat... Putem deschide o nouă sesiune pe același computer (sau orice alt computer) și putem executa comanda chiar în această sesiune deconectată. De exemplu, pornim serviciul de imprimare pe computerul SRV4, care a fost oprit ultima dată:

Invocare-Comandă-ScriptBlock (Start-Service spooler) `
-ComputerName SRV4 -Deconectat

O altă opțiune pentru utilizarea sesiunilor deconectate este lansarea de sarcini care necesită mult timp. De exemplu, să deschidem o sesiune numită LongJob pe SRV4 și să lansăm o lucrare de fundal în ea, care va afișa o listă de servicii cu un interval de 1 minut:

$ session = New-PSSession -ComputerName SRV4 -Name LongJob
Invocare-Comandă-Sesiune $ session -ScriptBlock`
(Get-Service | foreach ($ _; sleep 60)) -AsJob

Să vedem cum este efectuată sarcina și să închidem sesiunea:

Receive-Job -Name Job2
Sesiunea de deconectare-PSSession $

Mergem la un alt computer și deschidem consola, ne conectăm la sesiunea LongJob și folosim cmdletul Receive-PSSession pentru a obține rezultatul sarcinii:

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

Sau o altă opțiune, fără a vă conecta în mod explicit la sesiune folosind Connect-PSSession:

$ session = Get-PSSession -Name LongJob -ComputerName SRV4
$ job = Receive-PSSession $ session -OutTarget Job
Primire-job $ job

Notă: pentru ca rezultatul să rămână în sistem, Receive-Job trebuie utilizat cu parametrul -Keep.

Telecomandă implicită

O altă metodă, destul de neconvențională, de telecomandă este telecomanda implicită. Folosindu-l, puteți rula la nivel local cmdlet-uri situate pe computerul la distanță fără a crea o sesiune la distanță.

De exemplu, să luăm o stație de lucru obișnuită fără instrumente de administrare la distanță instalate. Creați o sesiune la distanță cu controlerul de domeniu SRV4 și importați modulul în această sesiune Director activ:

$ session = New-PSSession -ComputerName SRV4
Invocare-Comandă (Import-Modul ActiveDirectory) -Sesiune $ sesiune

Apoi exportăm cmdleturile Active Directory din sesiunea de la distanță și le plasăm în modulul RemoteAD local:

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

Această comandă va crea un nou modul PowerShell în folderul WindowsPowerShell \ Modules \ RemoteAD. Se vor încărca numai cmdlet-uri cu nume care se potrivesc cu modelul * -AD *. Cu toate acestea, cmdleturile în sine nu sunt copiate computer local... Modulul local servește ca un fel de comandă rapidă, iar comenzile în sine vor fi executate pe controlerul de domeniu la distanță.

După crearea modulului, sesiunea la distanță poate fi închisă, nu mai este necesară.

Importăm noul modul în sesiunea curentă (în PS 3.0, puteți sări peste acest pas):

Import-Modul RemoteAD

Acum atenție - nu deschidem o sesiune la distanță cu controlerul de domeniu în care se află cmdleturile. Nu este nevoie să porniți în mod explicit această sesiune - se poate face implicitîncercând să rulați cmdlet-uri la distanță:

New-ADUser -Nume BillGates -Company Microsoft
Get-ADUser BillGates

Aceasta va restabili conexiunea la distanță la controlerul de domeniu, după care comanda va fi trimisă la controlerul de domeniu și executată acolo. Rezultatul execuției va fi serializat în XML și transmis prin rețea către computerul local, unde va fi deserializat în obiecte cu care PowerShell poate lucra.

Sesiunea la distanță va rămâne activă până când închideți consola sau dezinstalați modulul RemoteAD.

Telecomanda implicită vă permite să lucrați cu cmdlet-uri pe un computer la distanță în același mod ca și cum ar fi instalate pe mașina locală. În același timp, toate cmdleturile necesare sunt întotdeauna la îndemână, ceea ce este destul de convenabil.

În concluzie, voi spune că în acest moment PowerShell Remoting este instrumentul principal pentru gestionarea de la distanță a sistemelor de operare Windows. Prin urmare, orice administrator Windows trebuie să știe despre capacitățile sale și să le poată folosi.

Acest articol explică în detaliu tema de la distanță folosind PowerShell 2.0. În primul rând, trebuie să începem serviciul cu care se va efectua comunicarea la distanță.

Începem serviciul WinRm
Pentru telecomandă, PowerShell 2.0 folosește serviciul WinRM, care este preinstalat în mod implicit pe Windows 7 și Windows 2008 R2. Pentru mai mult versiunile timpurii sistem de operare trebuie instalat suplimentar. Serviciul specificat este instalat pe aparat când instalarea PowerShell 2.0. Pentru a verifica dacă WinRM este prezent, porniți consola PowerShell 2.0 și rulați comanda în ea:
Get-Service WinRm
Rezultatul va arăta astfel:

Status Name DisplayName ------ ---- ----------- Winrm oprit Windows Remote Management (WS-Manag ...

După cum puteți vedea, serviciul este prezent, dar nu funcționează. Pentru a porni WinRm, trebuie să executați comanda din consola PowerShell 2.0 cu drepturi de administrator:
Enable-PSRemoting
La cererea de confirmare a începerii serviciului, apăsați butonul „Y”. Serviciul WinRM este acum setat la tipul de pornire „Automat”; va rula de fiecare dată când computerul pornește. Comanda Enable-PSRemoting nu numai că pornește serviciul și își modifică tipul de pornire, ci și configurează firewall-ul în mod corespunzător pentru ca acesta să funcționeze corect. Serviciul WinRm acceptă cereri de la orice adresă IP.

Vă cerem numele tuturor furnizorilor conectați:
Get-PSProvider
După cum puteți vedea, avem acum un alt furnizor numit WSMan.
Atribuirea nodurilor de încredere

În consola PowerShell 2.0, rulați comenzile cu drepturi de administrator:

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

Notă
Rețineți că în prima comandă, valoarea parametrului –Path este terminată de două puncte, deoarece acesta este un furnizor.

Pe computerul cu care doriți să lucrați de la distanță, trebuie să specificați ce servere sunt permise să se conecteze la această mașină. Astfel de servere sunt cunoscute ca „site-uri de încredere”. Astfel, dacă vă aflați pe serverul "MyServer", atunci înainte de a putea lucra de la distanță cu computerul "MyComputer", ar trebui să configurați gazdele de încredere (TrustedHosts). Următoarea metodă de atribuire a site-urilor de încredere este utilizată atunci când computerul nu este membru al unui domeniu Active Directory. Dacă computerul este membru al unui domeniu Active Directory, atunci setările TrustedHosts pot fi configurate prin intermediul politicii de grup.

Important!
Comanda de mai jos nu va funcționa dacă WSMan: \ localhost \ client nu este instalat în directorul curent (consultați invocarea comenzii pe care am făcut-o mai sus).

Set-Item TrustedHosts *

Puteți rula comanda dintr-un alt director, dar trebuie să specificați calea completă către TrustedHosts:

Set-Item WSMan: \ localhost \ Client \ TrustedHosts *

La cererea de confirmare, apăsați tasta „Y”.

Pentru ca PowerShell să vadă modificările pe care le-am făcut în setările TrustedHosts, trebuie să reporniți serviciul WSMan. Acest lucru se face cu următoarea comandă:
Restart-Service winrm

O acțiune similară poate fi efectuată de sub DOS. Rulați comanda winrm -?. Veți vedea ajutor general pentru comandă. Pentru a vizualiza valoarea curentă a TrustedHosts, rulați comanda:

winrm obține winrm / config / client

și pentru a seta valoarea, ar trebui să executați:

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

În comenzile de mai sus, pentru TrustedHosts, simbolul „*” a fost specificat ca valoare, cu toate acestea, în locul ei, puteți specifica numele anumitor servere. Gestionarea TrustedHosts este un caz clasic pentru utilizarea verbelor PowerShell Get și Set împreună: folosiți Get-Item și Set-Item.
Crearea și încheierea unei sesiuni PowerShell 2.0 la distanță
În comenzile de mai jos, în loc de „IpAddress”, specificați adresa IP dorită și, în loc de „FQDN”, specificați numele de domeniu complet calificat:

Enter-PSSession IpAddress

Enter-PSSession FQDN

Pentru a încheia o sesiune de lucru la distanță, rulați comanda:

Comanda Enter-PSSession necesită un nume de domeniu complet calificat. De exemplu, în cazul MyServer.domain.local, simpla specificare a MyServer nu ar funcționa, dar utilizarea adresei IP funcționează întotdeauna bine în situații ca aceasta. Metoda alternativă PSSession:

New-PSSession -computername testMachine2 Get-PSSession

Puteți încheia această sesiune astfel:

Get-PSSession | remove-PSSession

Dacă doriți să testați funcționarea la distanță, dar nu aveți o a doua mașină, creați o „conexiune la distanță” a computerului cu dvs. De exemplu, dacă mașina dvs. se numește „Mașina mea”, încercați următoarele:

New-PSSession -computername MyMachine

Vă poate părea ciudat și nu este logic, dar în acest fel puteți încerca în continuare lucrul la distanță în PowerShell 2.0.

Lucrul într-o sesiune PowerShell 2.0 la distanță
După crearea unei conexiuni la distanță, puteți organiza conducte de comandă executându-le în consola PowerShell 2.0, dar în același timp acestea vor fi executate pe mașina de la distanță, ca și cum ați fi la tastatura sa și ați tastat comenzile acolo, nu aici. De exemplu, rulați o comandă ca aceasta și vedeți rezultatul muncii sale:

Set-Location c: \ | Get-childitem

Deoarece scopul principal al acestui tutorial este de a vă ajuta să creați o sesiune de conectare la distanță PowerShell 2.0 și să vă arăt cum să o închideți, va trebui să decideți singur ce operațiuni doriți să efectuați în timpul conexiunii la distanță.

Notă
Dacă vi se pare că unele comenzi nu funcționează pentru o sesiune de conexiune la distanță, testați-o mai întâi pe mașina dvs. locală.

De îndată ce conexiunea la distanță funcționează pentru dvs., aceasta vă oferă imediat posibilitatea de a utiliza PowerShell 2.0 pentru a gestiona computerele conectate la rețeaua dvs. Acum puteți rula scripturi pe alte mașini. În PowerShell 2.0, multe cmdleturi acceptă parametrul „-computerName”, dar o conexiune la distanță vă permite să utilizați comenzile familiei PSSession, precum și să invocați Invocare-comandă (adică puteți face orice doriți).

Depanarea problemelor PowerShell 2.0 la distanță

O problemă comună este EROAREA „Accesul este refuzat”.

Soluţie:
Rulați PowerShell 2.0 ca administrator. Încercați pe ambele mașini (cea la care vă conectați și cea la care vă conectați) pentru a seta setarea „TrustedHosts” la * (asterisc). Nu uitați că această opțiune permite conexiuni de oriunde.
Nu uitați să reporniți serviciul WinRm, altfel modificările pe care le-ați făcut la „TrustedHosts” nu vor intra în vigoare. Pentru a reporni serviciul, rulați comanda în consola PowerShell 2.0: Restart-Service WinRm
De asemenea, aveți grijă să nu confundați numele furnizorului WSMan cu numele serviciului WinRm.
Un alt sfat ciudat, dar uneori util: Încercați să reîncercați conexiunea la distanță. În mod ciudat, s-ar putea să nu funcționeze la prima încercare, dar ar putea funcționa la a doua sau a treia. Acestea. trebuie să executați din nou comanda: Enter-PSSession -computerName myOtherMachineName

Firewall-uri, PowerShell 2.0 și Serverul rpc nu sunt disponibile
Specialiștii în securitate își vor ridica mâinile îngroziți la o astfel de propunere, cu toate acestea, în cazul în care primiți eroarea de mai sus, vă sugerez să dezactivați paravanul de protecție de pe ambele computere. Dacă totul funcționează bine după oprire, atunci trebuie să verificați utilizarea porturilor 135 și 445. Configurați excepții pentru aceste porturi în firewall - acest lucru va permite PowerShell 2.0 să funcționeze de la distanță și, în același timp, firewall-ul va proteja computerul de amenințări.

P.S. Am citit că comanda Enable-PSRemoting ar trebui să preia modificările automate ale setărilor firewall-ului, dar, din experiența mea, acest lucru nu este întotdeauna cazul.
Pentru informații despre cum să dezactivați paravanul de protecție în Windowws 8 utilizând politica de grup, citiți.

Două tipuri utilizate pentru lucrul la distanță în PowerShell 2.0
Este timpul să anunțăm că există două opțiuni pentru lucrul la distanță în PowerShell 2.0.
Prima metodă este o variantă mai sofisticată care folosește cmdleturi pentru a crea o conductă persistentă la a doua mașină. Numele unor astfel de comenzi conțin cuvântul „PSSession” ca substantiv (amintiți-vă că numele cmdleturilor sunt construite conform regulii „Verb-Noun”). Puteți obține o listă a acestor cmdlet-uri folosind următoarea comandă:

Get-Command -noun PSSession

A doua modalitate este, de asemenea, forma mai canonică a lucrării la distanță PowerShell 2.0. Aceasta metoda extinde pur și simplu comenzile locale prin adăugarea parametrului „-computerName”, care specifică computerul la distanță pe care să efectueze operațiunea. Ca urmare, astfel de comenzi vor fi rulate pe o altă mașină din rețea:

Get-Process -computerName machine2

Listă de cmdlet-uri care pot fi utilizate astfel într-un mod simplu(adică cele care au parametrul "-computerName") pot fi obținute folosind următoarea comandă:

Get-command | unde ($ _. parameters.keys -conține „ComputerName”)

O listă completă a cmdleturilor care pot funcționa în al doilea mod poate fi obținută după cum urmează:

Get-command | unde ($ _. parameters.keys -contains "ComputerName" -and ($ _. parameters.keys -notContains "Session"))

Rezumând munca la distanță în PowerShell 2.0
Secretul pentru a lucra de la distanță cu PowerShell 2.0 este să înțelegeți lucrurile de bază:
Instalați WinRm.
Comunicarea la distanță trebuie activată utilizând comanda Enable-PSRemoting.
Trebuie să configurați TrustedHosts (de exemplu, setați-l ca valoare *).
Când utilizați comanda Enter-PSSession, nu uitați să specificați numele de gazdă complet complet sau adresa IP.

O sursă de informații în limba engleză prezentată și ușor revizuită de mine.

# Creați o nouă sesiune pentru a vă conecta la mașina la distanță $ s = New-PSSession -computername TestComputer

# Efectuați acțiuni arbitrare pe mașina de la distanță, de exemplu - priviți conținutul directorului C:
Invocare-Comandă-Sesiune $ s -ScriptBlock (ls c: \)

# Creați directorul "% ProgramFiles% \ MyCompany \ MySoft" pe computerul de la distanță
Invocare-Comandă-Sesiune $ s -ScriptBlock (New-Item -Path "$ env: ProgramFiles \ MyCompany \ MySoft" -ItemType directory)

# Cu toate acestea, este mult mai convenabil să nu introduceți manual comenzi, ci să rulați un script gata pe o mașină la distanță:
Invoke-Command -Session $ s -FilePath "\\ ServerDir \ Common Scripts \ MyScript.ps1"

# Încheiați sesiunea
$ s | remove-PSSession

  • Tutorial

Există un minim de teorie, în principal o parte practică. Descrie cum se configurează WinRM, cum se schimbă profilul unui adaptor de rețea, oferă un script pentru adăugarea acestuia la TrustedHosts cu filtrare, explică de ce sunt necesare gazde de încredere și îl acoperă superficial. conexiuni la distanță astfel încât să vă puteți așeza și să administrați imediat mașini la distanță.

Cel mai simplu mod de a configura telecomanda este să Enable-PSRemoting în PowerShell cu privilegii de administrator. În acest caz, se vor întâmpla următoarele:

  • serviciul WinRM va porni (dacă este pornit, acesta va reporni)
  • serviciul WinRM va intra în stare - pornire automată la pornire
  • un ascultător WinRM va fi creat pentru HTTP trafic pe port 5985 pentru toate adresele IP locale
  • o regulă de firewall va fi creată pentru ascultătorul WinRM. Atenție, acest element se va termina cu o eroare dacă oricare dintre plăcile de rețea este de tipul rețelei „publice”, deoarece deschiderea unui port pe un astfel de card nu este bună. Dacă primiți o astfel de eroare în timp ce configurați, modificați profilul acestei fete de rețea folosind cmdletul Set-NetConnectionProfile și după aceea rulați din nou Enable-PSRemoting. Dacă aveți nevoie de o placă de rețea cu profilul „Rețea publică”, rulați Enable-PSRemoting cu parametrul -SkipNetworkProfileCheckîn acest caz, regulile firewall-ului vor fi create numai din retea locala.
După aceea, trebuie să permiteți conectarea la mașina la distanță de la mașina de la care va avea loc controlul. Acest lucru se face din motive de securitate, pentru a reduce riscul de piratare a sesiunii de control de la distanță sau DNS, înlocuindu-vă cu mașina de la distanță și pentru a preveni executarea de scripturi pe mașini pe care nu le-ați permis forțat.

Pentru a verifica unde vă puteți conecta, utilizați:
get-item wsman: \ localhost \ Client \ TrustedHosts
pentru permisiunea de conectare la toți
set-item wsman: localhost \ client \ trusthosts -value *
Dacă deschideți accesul la toate prin specificarea *, atunci WinRM se va conecta la TOATE mașinile fără a verifica. Amintiți-vă că vă deschideți la potențialul hacking din rețeaua dvs. locală. Este mai bine să specificați adresele de gazdă unde trebuie să vă conectați, apoi WinRM va respinge toate celelalte adrese sau nume. Dacă mașina de la care este gestionată se află într-un domeniu, va avea încredere în toate mașinile din acel domeniu. Dacă nu se află într-un domeniu sau într-un alt domeniu, atunci trebuie să specificați în TrustedHosts adresa sau numele mașinii la care ne vom conecta. Nu este nevoie să ne adăugăm pe aparatul la care ne conectăm.

Ajutorul conține comenzi, le-am modificat ușor într-un script
##################################################### # #################################### # adaugă NewHost la lista TrustedHost cu filtrare dacă există deja o astfel de linie # poți scoate afară Linie de comanda specificând parametrul direct de exemplu #. \ Add-TrustedHost.ps1 192.168.2.1 #################################### # ##################################################### # param ($ NewHost = "192.168.2.89") Write-Host "adăugând gazdă: $ NewHost" $ prev = (get-item WSMan: \ localhost \ Client \ TrustedHosts) .value 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 !}
verifică dacă există o astfel de intrare, dacă nu, apoi o adaugă în listă. Puteți apela din linia de comandă specificând adresa sau numele.

Este important să indicați un nume sau o adresă. Dacă există doar o adresă în TrustedHosts, atunci nu va funcționa pentru a deschide o sesiune după nume și invers - dacă specificați un nume, atunci nu va funcționa pentru a atașa la adresă. Gandeste-te la asta.

Care este diferența

Enable-PSRemoting face mai mult decât „winrm quickconfig”. Cmdletul Set-WSManQuickConfig face exact același lucru ca și "winrm quickconfig". Enable-PSRemoting rulează Set-WSManQuickConfig la configurarea sistemului

Conexiuni de la distanță
1. Sesiunile 1-la-1
deschis de echipă
Enter-PSSession -ComputerName Test
Veți obține un shell pe aparatul de la distanță. Vă puteți conecta la dvs. specificând localhost. Creditele alternative sunt specificate cu parametrul -Credential, ieșirea se face de cmdlet Exit-PSSession

Restricțiile sunt următoarele:

  • nu puteți face un al doilea salt - doar o sesiune, nu vă puteți conecta mai departe în interiorul sesiunii
  • nu puteți utiliza comenzi care au interfață grafică... Dacă faceți acest lucru, shell-ul se va bloca, apăsați Ctrl + C pentru a bloca
  • nu puteți rula comenzi care au propriul shell, de exemplu nslookup, netsh
  • puteți rula scripturi dacă politica de lansare pe mașina la distanță le permite să ruleze
  • nu vă puteți atașa la o sesiune interactivă, vă autentificați ca „conectare la rețea” de parcă s-ar fi lipit de unitate de rețea... Prin urmare, scripturile de conectare nu vor porni și este posibil să nu primiți folderul de acasă de pe computerul de la distanță (un motiv suplimentar pentru a nu mapa folderele de acasă cu scripturi de conectare)
  • nu veți putea interacționa cu un utilizator pe o mașină la distanță, chiar dacă acesta este conectat acolo. Nu îi veți putea arăta fereastra sau nu-i puteți imprima nimic.
această metodă este cea mai bună pentru operații simple, conectați-vă, smulgeți serverul și deconectați-vă. Dacă trebuie să păstrați variabilele în domeniul de aplicare, aveți nevoie de o operație lungă (multe ore sau zile), aveți nevoie de mai multe opțiuni de administrare, atunci trebuie să utilizați o tehnică mai avansată.
Un comentariu.
obiectele transmise prin rețea sunt tăiate și încetează să mai fie în viață. Metodele lor sunt eliminate, proprietățile rămân. Tragerea obiectului pe mașină, evocarea și punerea la loc nu va funcționa. Dacă trebuie să scrieți mai multe, îl voi adăuga separat.

2. 1-la-multe sesiuni
Invocare-comandă
definim ce vom executa astfel:
$ sb = (comenzi pentru aparatul de la distanță separate prin punct și virgulă)
transfer la aparate la distanță Test1 și Test2
Invocare-Comandă -ComputerName Test1, Test2 -ScriptBlock $ sb
poate fi aruncat pe 32 de mașini la un moment dat. Dacă aveți credite alternative, utilizați parametrul -Credential

Pentru a trece întregul script în loc de parametrul -ScriptBlock, scrieți -FilePath, aparatul la distanță NU trebuie să aibă acces la fișier, acesta va fi analizat în părți, transferat prin HTTP și executat de cealaltă parte.

Amintiți-vă că va exista un nou domeniu de aplicare pe cealaltă parte, astfel încât scriptul dvs. nu va primi valori de pe consola dvs., iar variabilele scriptului pot fi goale pe partea respectivă. Prin urmare, transferați simultan instrucțiuni și scripturi gata făcute cu parametri.

pentru a utiliza pe deplin Invoke-Command, trebuie să puteți transforma liniile în blocuri de scripturi. De exemplu, aveți comenzi care depind de o anumită listă, trebuie să generați un șir, să îl transformați într-un ScriptBlock și să îl trimiteți la un computer la distanță:
$ sb = :: Creați ($ SomeString)
kuda78
Articolul ratează foarte mult punct important- trecerea parametrilor la un script pe o mașină la distanță.

$ deployRemote = (
param (
$ targetEnvName,
$ targetUsername)
$ Global: ErrorActionPreference = "Opriți"
#…
}

Invoke-Command -Session $ session -ScriptBlock $ deployRemote -ArgumentList ($ targetEnvName, $ targetUsername)


Da, într-adevăr ratat. Am făcut-o în mod deliberat pentru a nu aglomera revizuirea cu parametri și descrieri. Mulțumiri. Parametrul -ArgumentList funcționează atât cu blocuri de scripturi, cât și cu scripturi

3. Sesiuni
Acesta este momentul în care o copie a piesei este creată de cealaltă parte, care este în permanență agățată în memorie și îi sunt trimise comenzi. Drept urmare, vă puteți reconecta la acesta, puteți citi o perioadă lungă de timp pentru executare, vă puteți agăța de diferite scripturi sau de la utilizatori diferiți. De exemplu, aveți un set de scripturi care rezolvă o sarcină în părți, fiecare dintre ele la rândul său se poate conecta la o sesiune la distanță, vedeți rezultatele comenzilor anterioare, aveți unul încărcat module, variabile comune, un mediu comun, până la sesiune este închisă forțat.

Sesiunea este creată folosind cmdletul New-PSSession, rezultatul poate fi plasat într-o variabilă
$ DC01 = New-PSSession -ComputerName DC01 $ Controllers = New-PSSession DC01, DC02, DC03
puteți utiliza aceiași parametri de conexiune ca în Invocare-comandă

Mod de utilizare:
dacă 1-la-1
Enter-PSSession -Session $ DC01
dacă 1-la-mulți
Invocare-Comandă-Sesiuni $ Controlere -ScriptBlock (get-eventlog -logname security -newest 50)
puteți vedea ce sesiuni sunt deschise folosind Get-PSSession, închideți Remove-PSSession
închideți toate sesiunile cu totul
Get-PSSession | Remove-PSSession
vă puteți atașa la sesiune folosind Connect-PSSession, deconectați-vă prin Disconnect-PSSession

Invoke-Command poate crea imediat o sesiune deconectată, trimite comenzi pentru executare și se deconectează, ulterior vă puteți conecta și descărca rezultatele muncii. Acest lucru se face cu parametrul -Disconnected. Preluarea rezultatelor prin intermediul cmdletului Recieve-PSSession.

Sesiunile au o mulțime de setări, este chiar posibil să creați sesiuni cu un set trunchiat de comenzi, module etc. Puncte finale personalizate numite



Ti-a placut articolul? Împărtășește-l