Istoric, utilitarele din linia de comandă în sistemele Unix s-au dezvoltat mai bine decât în Windows, însă odată cu apariția unei noi soluții, situația s-a schimbat.
Windows PowerShell permite administratorilor de sistem să automatizeze majoritatea sarcinilor de rutină. Cu ajutorul său, este posibil să se schimbe configurările, să se oprească și să se pornească servicii, precum și să se efectueze întreținerea majorității aplicațiilor instalate. A percepe fereastra albastră ca pe un alt interpret de comenzi ar fi greșit. Această abordare nu reflectă esența inovațiilor propuse de Microsoft. De fapt, capabilitățile Windows PowerShell sunt mult mai ample: în cadrul unei serii de articole, vom încerca să înțelegem în ce constă diferența dintre soluția Microsoft și instrumentele mai familiari nouă.
Funcționalități principale
Desigur, Windows PowerShell este, în primul rând, o interfață de commandă cu un limbaj de scripturi, inițial creat pe baza platformei .NET Framework, iar apoi — pe .NET Core. Spre deosebire de interfețele care acceptă și returnează date textuale, Windows PowerShell lucrează cu clase .NET, care au proprietăți și metode. PowerShell permite executarea de comenzi obișnuite, precum și accesul la obiecte COM, WMI și ADSI. Folosește diferite stocări, cum ar fi sistemul de fișiere sau registrul Windows, pentru a accesa care au fost create așa-numitele furnizori. Merită menționat că PowerShell permite încorporarea componentelor executabile în alte aplicații pentru a realiza diverse operații, inclusiv prin intermediul interfeței grafice. Este valabil și invers: multe aplicații pentru Windows oferă acces la interfețele lor de management prin PowerShell.
Windows PowerShell permite:
- Schimbarea configurărilor sistemului de operare;
- Gestionarea serviciilor și proceselor;
- Configurarea rolurilor și componentelor serverului;
- Instalarea software-ului;
- Gestionarea software-ului instalat prin interfețe specializate;
- Încadrerea componentelor executabile în aplicații externe;
- Crearea de scripturi pentru automatizarea sarcinilor de administrare;
- Lucrul cu sistemul de fișiere, registrul Windows, magazinul de certificate etc.
Interfața și mediul de dezvoltare
Există Windows PowerShell în două forme: pe lângă emulatorul de consolă cu terminalul de comandă, există și un mediu integrat de scripting (Integrated Scripting Environment - ISE). Pentru a accesa interfața liniei de comandă, este suficient să selectați pictograma corespunzătoare din meniul Windows sau să executați powershell.exe din meniul „Rulare”. Pe ecran va apărea o fereastră albastră, vizibil diferită în capacitate față de vechiul cmd.exe. Acolo există completare automată și alte funcții familiare utilizatorilor terminalelor Unix.

Pentru a lucra cu shell-ul, trebuie să memorați anumite combinații de taste:
- Săgețile sus și jos derulează istoricul pentru a repeta comenzile anterioare;
- Săgeata dreapta la sfârșitul liniei reintroduce anteriora comandă caracter cu caracter;
- Ctrl+Home șterge textul introdus din poziția cursorului până la începutul liniei;
- Ctrl+End șterge textul de la cursor până la sfârșitul liniei.
F7 afișează o fereastră cu comenzile introduse și permite selectarea uneia dintre ele. În consolă, de asemenea, funcționează selecția de text cu mouse-ul, copierea și lipirea, poziționarea cursorului, ștergerea, backspace - totul așa cum ne place.

Windows PowerShell ISE este un mediu complet de dezvoltare cu un editor de cod care suportă tab-uri și evidențierea sintaxei, un constructor de comenzi, un debugger încorporat și alte bucurii pentru programatori. Dacă în editorul mediului de dezvoltare, după numele comenzii, scrieți semnul minus, veți obține în lista derulantă toate parametrele disponibile cu indicația tipului. PowerShell ISE poate fi lansat fie printr-o scurtătură din meniul sistemului, fie prin intermediul fișierului executabil powershell_ise.exe.

Comandlet-uri
În Windows PowerShell au apărut așa-numitele comandlet-uri (cmdlets). Acestea sunt clase specializate .NET, care încorporază diverse funcționalități. Ele sunt numite după principiul „Acțiune-Obiect” (sau „Verbul-Substantiv”, dacă preferați), iar legătura separată printr-un minus îi amintește de predicat și subiect în propozițiile limbilor naturale. De exemplu, Get-Help înseamnă literal „A Obține-Ajutor” sau, în contextul PowerShell: „A Arăta-Asistență”. Practic, aceasta este echivalentul comenzii man în sistemele Unix, iar manualele în PowerShell trebuie solicitate exact așa, nu invocând comandlet-uri cu cheia —help sau /?. Nu uitați de documentația online pentru PowerShell: la Microsoft este destul de detaliată.
Pe lângă Get, în cmdlet-uri se folosesc și alți verbi (și nu doar verbe, strict vorbind). În lista de mai jos vă vom oferi câteva exemple:
Adaugă — adăuga;
Clear — curăța;
Activare — activa;
Disable — dezactiva;
Nou — crea;
Remove — elimina;
Set — seta;
Start — lansa;
Stop — opri;
Export — exporta;
Importați — importa.
Există cmdlet-uri sistem, de utilizator și opționale: ca rezultat al execuției, toate acestea returnează un obiect sau un array de obiecte. Ele nu sunt sensibile la case, adică din perspectiva interpretării comenzilor nu există nicio diferență între Get-Help și get-help. Separatorul este simbolul ‘;’, dar trebuie pus doar dacă se execută mai multe cmdlet-uri pe o singură linie.
Cmdlet-urile Windows PowerShell sunt grupate în module (NetTCPIP, Hyper-V etc.), iar pentru a căuta după obiect și acțiune există cmdlet-ul Get-Command. Puteți arăta ajutorul pentru acesta astfel:
Get-Help Get-Command 
Implicit, comanda afișează un scurt ajutor, dar în cmdlet-uri pot fi transmise parametere (argumente) după cum este necesar. Cu ajutorul lor, puteți, de exemplu, obține ajutor detaliat (parametru -Detailed) sau complet (parametru -Full), precum și afișa exemple (parametru -Examples):
Get-Help Get-Command -ExamplesAjutorul în Windows PowerShell se actualizează cu cmdlet-ul Update-Help. Dacă linia de comenzi devine prea lungă, argumentele cmdlet-ului pot fi mutate pe linia următoare, scriind caracterul de comandă ‘`’ și apăsând Enter — simplu a încheia scrierea comenzii pe o linie și a continua pe alta nu va funcționa.
Mai jos sunt câteva exemple de cmdlet-uri comune:
Get-Process — arată procesele care rulează în sistem;
Get-Service — arată serviciile și statusul lor;
Get-Content — afișează conținutul unui fișier.
Pentru cmdlet-uri frecvent utilizate și utilitare externe în Windows PowerShell există aliasuri (din engleză: Alias). De exemplu, dir — alias pentru Get-ChildItem. Există în lista aliasurilor și echivalente ale comenzilor din sistemele Unix (ls, ps etc.), iar cmdlet-ul Get-Help este accesat cu comanda help. Lista completă a aliasurilor poate fi vizualizată folosind cmdlet-ul Get-Alias:

Scripting, funcții, module și limbaj PowerShell
Scripturile Windows PowerShell sunt stocate sub formă de fișiere text obișnuite cu extensia .ps1. Nu le poți rula cu un clic dublu: trebuie să deschizi meniul contextual cu clic dreapta și să alegi opțiunea „Rulați în PowerShell”. Din consolă, trebuie fie să specifici calea completă către script, fie să navighezi în directorul corespunzător și să scrii numele fișierului. Executarea scripturilor este, de asemenea, restricționată de politica de sistem, iar pentru a verifica setările curente, poți folosi cmdlet-ul Get-ExecutionPolicy, care va returna una dintre următoarele valori:
Restricted — executarea scripturilor este interzisă (implicit);
AllSigned — este permisă doar executarea scripturilor semnate de un dezvoltator de încredere;
RemoteSigned — se permite executarea scripturilor semnate și a celor proprii;
Unrestricted — se permite executarea oricăror scripturi.
Administratorul are două opțiuni. Cea mai sigură implică semnarea scripturilor, dar aceasta este o sarcină destul de complexă — ne vom ocupa de asta în articolele următoare. Acum, vom urma calea cea mai simplă și vom schimba politica:
Set-ExecutionPolicy RemoteSigned 
PowerShell trebuie să fie rulat cu privilegii de administrator pentru aceasta, deși cu ajutorul unei opțiuni speciale se poate schimba politica și pentru utilizatorul curent.
Scripturile sunt scrise într-un limbaj de programare orientat pe obiect, a cărui comenzi sunt denumite în același principiu ca și cmdlet-urile discutate anterior: „Acțiune-Obiect” („Verb-Substantiv”). Principalul său scop este automatizarea sarcinilor de administrare, dar este un limbaj interpretat complet, în care există toate construcțiile necesare: ramificații condiționale, bucle, variabile, array-uri, obiecte, gestionarea erorilor etc. Poate fi folosit orice editor de text pentru scrierea scripturilor, dar cel mai convenabil este să lansați Windows PowerShell ISE.
Poți transmite parametrii în script, să-i faci obligatorii și, de asemenea, să setezi valori implicite. În plus, Windows PowerShell permite crearea de funcții și apelarea acestora exact ca și cmdlet-urile: pentru aceasta se folosește construcția Function și acoladele. Un script cu funcții se numește modul și are extensia .psm1. Modulele trebuie să fie stocate în directoarele definite în variabilele de mediu PowerShell. Le poți vizualiza folosind comanda următoare:
Get-ChildItem Env:PSModulePath | Format-Table -AutoSizeConveioarele
În ultimul exemplu, am aplicat o structură cunoscută utilizatorilor shell-urilor pentru sisteme Unix. În Windows PowerShell, bara verticală permite de asemenea transmiterea ieșirii unei comenzi ca intrare pentru alta, dar în implementarea conveierului există o diferență semnificativă: aici nu este vorba despre un set de caractere sau un anumit text. Cmdlet-urile încorporate sau funcțiile utilizatorului returnează obiecte sau mase de obiecte, și pot de asemenea să le primească ca intrare. Ca în Bourne shell și numeroasele sale urmări, PowerShell simplifică realizarea sarcinilor complexe prin intermediul conveierului.
Cel mai simplu exemplu de conveier arată astfel:
Get-Service | Sort-Object -property Status 
Mai întâi se execută cmdlet-ul Get-Service, iar apoi toate serviciile obținute sunt transmise cmdlet-ului Sort-Object pentru sortare în funcție de proprietatea Status. În ce argument exact se transmite rezultatul lucrării secțiunii anterioare a conveierului depinde de tipul său — de obicei, acesta este InputObject. Această problemă va fi discutată mai detaliat în articolul dedicat limbajului de programare PowerShell.
Dacă se dorește, lanțul poate fi continuat și rezultatul muncii Sort-Object poate fi transmis unui alt cmdlet (acestea vor fi executate de la stânga la dreapta). Apropo, utilizatorilor Windows le este disponibilă și structura familiară tuturor utilizatorilor Unix pentru afișarea paginată:
Get-Service | Sort-Object -property Status | moreExecutarea sarcinilor în fundal
Adesea este necesar să pornim o anumită comandă în fundal, pentru a nu aștepta rezultatul execuției acesteia în sesiunea shell-ului. În Windows PowerShell există câteva cmdlet-uri pentru această situație:
Start-Job — pornirea unei sarcini în fundal;
Stop-Job — oprirea unei sarcini în fundal;
Get-Job — vizualizarea listei de sarcini în fundal;
Receive-Job — vizualizarea rezultatului execuției unei sarcini în fundal;
Remove-Job — eliminarea unei sarcini în fundal;
Wait-Job — readucerea unei sarcini în fundal în consola.
Pentru a lansa o sarcină în fundal, folosim cmdlet-ul Start-Job și în acolade specificăm comanda sau setul de comenzi:
Start-Job {Get-Service} 
Sarcinile în fundal în Windows PowerShell pot fi manipulate cunoscând numele lor. Mai întâi să învățăm să le afișăm:
Get-Job 
Acum să prezentăm rezultatul muncii sarcinii Job1:
Receive-Job Job1 | more 
Totul este destul de simplu.
Executarea comenzii de la distanță
Windows PowerShell permite executarea comenzilor și scripturilor nu doar pe un computer local, ci și pe unul la distanță și chiar pe un grup întreg de mașini. Există mai multe modalități de a face acest lucru:
- Multe cmdlet-uri au un parametru
-ComputerName, dar în acest fel nu se poate, de exemplu, crea un pipe; - Cmdlet-ul
Enter-PSSessionpermite crearea unei sesiuni interactive pe un computer la distanță; - Prin utilizarea cmdlet-ului
Invoke-Commandse pot executa comenzi sau scripturi pe unul sau mai multe computere la distanță.
Versiunile PowerShell
De la prima lansare în 2006, PowerShell s-a schimbat semnificativ. Instrumentul este disponibil pentru numeroase sisteme care rulează pe diferite platforme hardware (x86, x86-64, Itanium, ARM): Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008/2008 R2, Windows 7, Windows 8, Windows 8.1, Windows RT, Windows RT 8.1, Windows Server 2012/2012 R2, Windows 10, Windows Server 2016, GNU/Linux și OS X. Ultima versiune, 6.2, a fost lansată pe 10 ianuarie 2018. Scripturile scrise pentru versiunile anterioare vor funcționa cu mare probabilitate în versiunile mai recente, dar pot apărea probleme în direcția inversă, deoarece de-a lungul anilor, PowerShell a adus un număr mare de noi cmdlet-uri. Pentru a afla versiunea interfeței de linie de comandă instalate pe computer, se poate folosi proprietatea PSVersion din variabila $PSVersionTable:
$PSVersionTable.PSVersion 
De asemenea, se poate utiliza cmdlet-ul:
Get-Variable -Name PSVersionTable –ValueOnly 
Același lucru se face și prin cmdlet-ul Get-Host. De fapt, există numeroase variante, dar pentru a le aplica este necesar să învățăm limbajul de programare PowerShell, ceea ce vom face în .
Concluzii
Compania Microsoft a reușit să creeze un adevărat shell de comandă puternic, cu un mediu integrat convenabil pentru dezvoltarea de scripturi. De la instrumentele pe care le cunoaștem din lumea Unix, se distinge prin integrarea profundă cu sistemele de operare din familia Windows, precum și cu software-ul și platforma .NET Core. PowerShell poate fi numit un shell orientat pe obiect, deoarece cmdlet-urile și funcțiile personalizate returnează obiecte sau matrice de obiecte și pot primi obiecte ca intrare. Credem că acest instrument ar trebui să fie stăpânit de toți administratorii de servere pe Windows: a trecut vremea când aceștia se puteau descurca fără linia de comandă. Un shell avansat de consolă este deosebit de necesar pe , dar aceasta este o cu totul altă poveste.
Numai utilizatorii înregistrați pot participa la sondaj. , vă rugăm.
Ce subiecte ar trebui discutate în primul rând în următoarele articole din ciclu?
53,2%Programare în PowerShell123
42,4%Funcții și module PowerShell98
22,1%Cum să semnezi propriile scripturi?51
12,1%Lucrul cu stocări prin intermediul furnizorilor (providers)28
57,6%Automatizarea administrării calculatoarelor cu ajutorul PowerShell133
30,7%Gestionarea software-ului și integrarea componentelor executabile PowerShell în produse terțe71
Au votat 231 de utilizatori. 37 de utilizatori s-au abținut.
Sursa: habr.com
