Una dintre cele mai bune caracteristici oferite de PowerShell este capacitatea de a gestiona de la distanță serverele. Chiar vă permite să vă administrați o grămadă de ele dintr-o dată.
Asigurați-vă că citiți articolele anterioare din seria:
Și stați liniștit pentru restul seriei toată săptămâna.
Gestionarea în masă a serverelor dvs. poate fi obositoare și, dacă a trebuit să faceți o modificare a configurației IIS pe 50 de servere web înainte, veți ști ce vreau să spun. Acestea sunt tipurile de situații în care PowerShell Remoting și abilitățile de scriere a limbii pot ajunge la salvare. Folosind HTTP sau HTTPS mai sigur, PowerShell Remoting vă permite să trimiteți comenzi la o mașină de la distanță din rețea. Apoi, mașina execută comenzile și trimite înapoi ieșirea, care este afișată pe ecran.
În centrul programului PowerShell Remoting se află un singur serviciu Windows, serviciul Windows Remote Management sau serviciul WinRM, așa cum a devenit cunoscut. Folosind WinRM, puteți seta una sau mai multe configurații de sesiuni (cunoscute și sub denumirea de puncte finale), care sunt în principiu fișiere care conțin informații despre experiența pe care doriți să o furnizați persoanei care se conectează la instanța PowerShell de la distanță. Mai precis, puteți utiliza fișiere de configurare a sesiunii pentru a defini cine poate și cine nu se poate conecta la instanță, ce cmdleturi și scripturi pot rula, precum și ce context de securitate trebuie să fie executat în cadrul sesiunii. Folosind serviciul WinRM, ați setat și "ascultători", care ascultă pentru cererile de intrare PowerShell. Acești "ascultători" pot fi HTTP sau HTTPS și pot fi legați de o singură adresă IP pe aparat. Când deschideți o conexiune PowerShell la o altă mașină (tehnic acest lucru se face folosind protocolul WS-MAN, care se bazează pe HTTP), conexiunea se leagă de unul dintre acești "ascultători". "Ascultătorii" sunt responsabili de trimiterea traficului către aplicația asociată fișierului de configurare a sesiunii; (în mod normal, PowerShell, dar puteți avea alte aplicații de găzduire dacă doriți), apoi execută comanda și alimentează rezultatele înapoi prin intermediul "ascultătorului" din rețea și înapoi pe mașină.
Primul lucru pe care trebuie să-l faceți este să activați Remoting-ul de pe mașina la care doriți să vă conectați. Acest lucru se poate face executând următoarele:
Activați-PSRemoting
Va trebui să răspundeți apoi la toate întrebările. Când rulați Enable-PSRemoting, se fac câteva modificări pe PC:
Dacă executați Windows 7 și locația cartelei dvs. de rețea este setată la Public, activarea Remedierii PowerShell va eșua. Pentru a rezolva aceasta, trebuie doar să comutați la locația de rețea Acasă sau Loc de muncă. Alternativ, puteți trece peste verificarea rețelei utilizând următoarele:
Enable-PSRemoting -SkipNetworkProfileCheck
Cu toate acestea, vă recomandăm mai degrabă să modificați locația rețelei.
Există două moduri de a vă conecta la o altă mașină utilizând PowerShell. Există metodele una până la una, care sunt foarte asemănătoare cu utilizarea SSH, și apoi există metoda de la una la mai multe.
Primul mod de a conecta la o mașină la distanță utilizând PowerShell utilizează ceva numit sesiune PowerShell. Pur și simplu a pune o sesiune vă permite să rulați comenzi pe mașina de la distanță într-o manieră interactivă, la fel ca și pe mașina proprie. Pentru a deschide o sesiune, tastați următoarele:
Enter-PSSession -ComputerName "Darlah"
Promptul va obține un prefix care semnifică mașina în care executați cmdlet-urile împotriva.
De aici puteți trata într-adevăr promptul ca și cum ați fi așezat la mașina de la distanță. De exemplu, dacă doriți să vedeți toate fișierele de pe unitatea C: \, puteți face o simplă:
Get-ChildItem-Calea C: \
Dacă veniți dintr-un fundal Linux, vă puteți gândi să folosiți această metodă ca la o metodă de remoting ca alternativă la SSH pentru PowerShell.
Al doilea mod în care puteți utiliza PowerShell pe o mașină de la distanță este utilizarea Invoke-Command. Avantajul utilizării Invoke-Command vine din faptul că puteți executa aceeași comandă simultan pe mai multe mașini. După cum vă puteți imagina, acest lucru este deosebit de util atunci când doriți să faceți ceva de genul colectarea de jurnale de evenimente de pe serverele dvs. Invoke-Command urmează următoarea sintaxă:
Invoke-Command -ComputerName Darlah, localhost -ScriptBlock Aplicația Get-EventLog -Newest 2
Deoarece comanda este executată în paralel pe toate mașinile, veți avea nevoie de un anumit mod pentru a vedea de la care PC a rezultat un anumit rezultat. Puteți face acest lucru privindu-vă proprietatea PSComputerName.
Când utilizați Invoke-Command, nu mai aveți obiectele pe care le puteți aștepta în Conductă. Vedeți, pentru ca PowerShell să obțină informațiile de la aparatul la distanță înapoi în mașină, au nevoie de un fel de reprezentare a obiectelor pe care le-ați executat pe comanda pe ieșirile de la distanță. Aceste zile se pare că modalitatea aleasă de a reprezenta o structură de date ierarhică este de a utiliza XML, ceea ce înseamnă că atunci când emiteți o comandă folosind Invoke-Command, rezultatele sunt serializate în XML înainte de a fi trimise înapoi la mașină.Odată ce se întorc la mașină, sunt deserializați înapoi în obiect; gata aici este că atunci când acestea sunt deserializate, toate metodele, cu excepția metodei ToString (), pe care obiectul le-a îndepărtat, sunt îndepărtate.
Notă: Există câteva excepții de la această regulă, de exemplu cele mai multe tipuri primitive, cum ar fi întregi, pot fi deserializate cu metodele incluse. Există, de asemenea, un proces numit Rehidratare în cazul în care unele metode pot fi adăugate înapoi la obiecte deserializate. Deci, fii atent și amintesc că Get-Member este prietenul tău.