PowerShell este un instrument de automatizare extensibil open source de la Microsoft [2] care constă dintr-un shell cu o interfață de linie de comandă și un limbaj de scripting însoțitor . Limbajul a fost pentru prima dată demonstrat public la Conferința dezvoltatorilor profesionali (PDC) în septembrie 2003 , cu numele de cod Monad. Instrumentul a fost lansat inițial ca o caracteristică Windows numită Windows PowerShell . Open Source a fost lansat odată cu începerea dezvoltării PowerShell Core în august 2016 .
Windows PowerShell 2.0 a fost lansat cu Windows 7 , Windows 8 și Windows Server 2008 R2 , precum și Windows Server 2012 R2 ca componentă integrală a sistemului. În plus, a doua versiune este disponibilă și pentru alte sisteme precum Windows XP SP3, Windows Server 2003 SP2, Windows Vista SP1, Windows Vista SP2, Windows Server 2008 [3] și Windows Server 2012.
PowerShell a fost inițial construit pe și integrat cu Microsoft .NET Framework și mai târziu pe .NET . În plus, PowerShell oferă acces convenabil la COM , WMI și ADSI , precum și capacitatea de a executa comenzi comune de linie de comandă pentru a crea un mediu unic în care administratorii pot efectua diverse sarcini pe sistemele locale și la distanță.
Aceste sarcini administrative sunt de obicei efectuate folosind cmdlet -uri (inițial „cmdlet-uri” ), care sunt clase .NET specializate. Utilizatorul le poate combina în scripturi (scripturi) folosind diverse constructe, utilitare de linie de comandă și apeluri la clase obișnuite .NET, obiecte WMI sau COM . În plus, puteți utiliza diverse depozite de date, cum ar fi sistemul de fișiere sau registrul Windows , care sunt furnizate de PowerShell prin furnizori ( furnizori englezi ).
PowerShell oferă, de asemenea, un mecanism de încorporare prin care executabilele PowerShell pot fi încorporate în alte aplicații. Aceste aplicații pot folosi apoi funcționalitatea PowerShell pentru a implementa o varietate de operațiuni, inclusiv cele furnizate printr-o interfață grafică. Această abordare este adoptată în Microsoft Exchange Server 2007 pentru a implementa funcționalitatea de gestionare sub formă de cmdlet-uri PowerShell și utilitare de management grafic sub formă de shell-uri PowerShell care invocă cmdleturile necesare. Astfel, interfața grafică de management se află deasupra stratului intermediar - PowerShell. Alte aplicații Microsoft, inclusiv Microsoft SQL Server 2008 , System Center Operations Manager și System Center Data Protection Manager , oferă, de asemenea, acces la interfețele lor de gestionare prin cmdleturile PowerShell.
PowerShell are propriul ajutor extensibil disponibil (inclusiv din linia de comandă) prin intermediul Get-Help.
Fiecare versiune lansată de MS-DOS și Microsoft Windows pentru computere personale includea un utilitar care furniza o interfață de linie de comandă. Acestea au fost COMMAND.COM(pe sisteme bazate pe MS-DOS, inclusiv Windows 9x ) și cmd.exe(pe sistemele din familia Windows NT ). Acestea erau interpreți obișnuiți de linie de comandă cu doar câteva comenzi de bază. Alte sarcini au necesitat aplicații de consolă separate care au fost apelate din aceste shell-uri. Aveau, de asemenea, un limbaj de scripting ( fișiere batch ) cu care să automatizeze diverse sarcini. Cu toate acestea, acești interpreți nu erau potriviti pentru automatizarea completă - parțial pentru că le lipseau echivalentele multor operațiuni GUI și, de asemenea, din cauza funcționalității slabe a limbajului de scripting, care nu permitea descrierea unor algoritmi suficient de complexi. În Windows Server 2003 , situația a fost îmbunătățită, dar suportul pentru scripting a fost considerat încă insuficient.
Microsoft a încercat să rezolve unele dintre aceste deficiențe cu Windows Script Host , lansat în 1998 cu Windows 98 și un utilitar de linie de comandă cscript.exe. Se integrează cu Active Script și permite scriptarea în limbaje compatibile, cum ar fi JScript și VBScript , folosind API-uri furnizate de aplicații prin Component Object Model (COM). Cu toate acestea, această soluție are dezavantajele sale. Windows Script Host nu este integrat cu shell-ul, nu există documentație încorporată. Diverse versiuni de Windows oferă, de asemenea, shell-uri speciale (cum ar fi netsh.exeWMIC ) cu propriile seturi de comenzi. Nu sunt integrate cu shell-ul și nu oferă interoperabilitate.
În 2003, Microsoft a început să dezvolte un nou shell numit Monad (cunoscut și ca Microsoft Shell sau MSH). Monad urma să fie un nou shell de linie de comandă extensibil, cu un design nou, care ar automatiza o gamă completă de sarcini administrative. Microsoft a lansat prima versiune beta publică a Monad pe 17 iunie 2005. A doua și a treia versiune beta au fost lansate pe 11 septembrie 2005 și, respectiv, pe 10 ianuarie 2006. Pe 25 aprilie 2006, a fost anunțat că Monad a fost redenumit Windows PowerShell pentru a-l poziționa ca o parte semnificativă a tehnologiilor lor de management. În același timp, a fost lansat Release Candidate 1. Release Candidate 2 a urmat pe 26 septembrie 2006. Versiunea finală (Release to Web, RTW) a fost lansată pe 14 noiembrie 2006 pentru Windows XP SP2 și Windows 2003. Versiunea finală pentru Windows Vista nu a devenit disponibilă până la 30 ianuarie 2007.
Cea mai recentă versiune de previzualizare a tehnologiei comunitare a Windows PowerShell versiunea 2.0 a fost lansată în decembrie 2008. Versiunea finală a celei de-a doua versiuni de PowerShell a fost lansată pe Windows 7 și Windows Server 2008 R2 în același timp cu care au fost lansate. Pentru alte sisteme (Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008), PowerShell 2 a devenit disponibil ca parte a Windows Management Framework pe 27 octombrie 2009. Pe lângă Windows PowerShell versiunea 2, acest pachet include și WinRM versiunea 2.0 și BITS 4.0 (cel din urmă este disponibil numai pentru Windows Vista și Windows 2008; este încorporat în Windows 7 și Windows Server 2008 R2).
Comenzile care rulează în Windows PowerShell pot fi sub formă de cmdlet-uri, care sunt clase .NET specializate concepute pentru a oferi funcționalități în PowerShell ca scripturi PowerShell ( .PS1) sau pot fi executabile obișnuite . Dacă comanda este un fișier executabil, atunci PowerShell o rulează într-un proces separat; dacă este o comandă, atunci este executată în cadrul procesului PowerShell. PowerShell oferă o interfață de linie de comandă în care puteți introduce comenzi și puteți afișa rezultatele lor ca text. Această interfață cu utilizatorul, care se bazează pe mecanismul standard de consolă Windows , oferă un mecanism de completare a comenzilor personalizabil, dar nu oferă evidențierea sintaxei, deși poate fi furnizată dacă se dorește [4] . În PowerShell, puteți crea și aliasuri ( eng. alias ) pentru cmdlet-uri care, atunci când sunt apelate, sunt convertite în comenzi originale. În plus, parametrii poziționali și numiți sunt acceptați pentru cmdleturi. Când rulați un cmdlet, munca de legare a valorilor argumentelor la parametri este realizată de PowerShell însuși, dar când apelați executabile externe, argumentele le sunt transmise pentru analizare.
Un alt concept folosit în PowerShell este o conductă . Asemenea conductelor în UNIX , ele sunt concepute pentru a combina mai multe comenzi prin trecerea ieșirii unei comenzi la intrarea unei a doua comenzi folosind . Dar, spre deosebire de omologul său din UNIX, conducta PowerShell este complet obiect , adică datele dintre cmdleturi sunt transferate ca obiecte cu drepturi depline de tipurile adecvate, și nu ca un flux de octeți. Atunci când datele sunt transmise ca obiecte, elementele pe care le conține își păstrează structura și tipurile în cmdlet-uri, fără a fi nevoie de nicio serializare sau parsare caracter cu caracter a datelor. Obiectul poate conține, de asemenea, unele funcții concepute pentru a lucra cu date. De asemenea, sunt puse la dispoziția cmdlet-ului care le primește. Ieșirea ultimului cmdlet din conducta PowerShell este transmisă automat cmdlet-ului , care creează o reprezentare textuală a obiectelor și a datelor pe care le conțin și o afișează pe ecran. |Write-Host
Deoarece toate obiectele PowerShell sunt obiecte .NET, ele conțin o metodă .ToString()care returnează o reprezentare textuală a datelor obiectului. PowerShell folosește această metodă pentru a converti un obiect în text. În plus, vă permite să specificați reguli de formatare, astfel încât reprezentarea textuală a obiectelor să poată fi personalizată. Cu toate acestea, din motive de compatibilitate, dacă un executabil extern este utilizat într-o conductă, acesta primește un flux de text reprezentând obiectul și nu se integrează cu sistemul de tip PowerShell.
Sistemul de tip extins (ETS) PowerShell se bazează pe sistemul de tip .NET, dar implementează unele completări . De exemplu, vă permite să creați diferite reprezentări ale obiectelor, afișând doar unele dintre proprietățile și metodele acestora, precum și să aplicați mecanisme speciale de formatare și sortare. Aceste vizualizări sunt legate de obiectele originale folosind fișiere de configurare în format XML .
Cmdleturile sunt comenzi PowerShell specializate care implementează diferite funcționalități . Acestea sunt comenzi încorporate în PowerShell. Cmdleturile sunt denumite conform regulii , de exemplu, astfel încât scopul lor să fie clar din nume. Cmdlet-urile scot rezultate ca obiecte sau colecții ale acestora. În plus, cmdleturile pot primi intrare în aceeași formă și, în consecință, pot fi utilizate ca receptori în conductă. În timp ce PowerShell vă permite să canalizați matrice și alte colecții, cmdleturile procesează întotdeauna obiectele unul câte unul. Pentru o colecție de obiecte, handlerul de cmdlet este invocat pe fiecare obiect din colecție pe rând. Глагол-СуществительноеGet-ChildItem
Instanțele de obiect sunt create în PowerShell și rulate de acesta atunci când sunt invocate. Cmdleturile sunt moștenite de la Cmdletsau de la PSCmdlet, iar acestea din urmă sunt utilizate atunci când cmdletul trebuie să interacționeze cu partea executabilă a PowerShell ( PowerShell runtime ) . Aceste clase de bază specifică unele metode - și cel puțin una dintre acestea implementarea cmdlet - ului trebuie să o suprascrie pentru a-și asigura funcționalitatea. De fiecare dată când cmdletul este rulat, aceste metode sunt apelate pe rând de PowerShell. În primul rând, se numește , apoi, dacă datele sunt transmise cmdlet-ului prin conductă, pentru fiecare element și la sfârșit - . O clasă care implementează trebuie să aibă un atribut .NET , , care specifică verbul și substantivul care alcătuiesc numele cmdlet-ului. Verbele populare sunt prezentate sub forma unei enumerații ( ing. enum ). BeginProcessing()ProcessRecord()EndProcessing()BeginProcessing()ProcessRecord()EndProcessing()CmdletCmdletAttribute
Implementările cmdlet-urilor pot apela orice API .NET disponibil și pot fi scrise în orice limbă .NET. PowerShell oferă, de asemenea, câteva API-uri suplimentare, cum ar fi WriteObject(), care sunt necesare pentru a accesa funcționalitatea specifică PowerShell, cum ar fi trimiterea obiectelor rezultat într-o conductă. Cmdleturile pot folosi API-uri pentru a accesa datele direct sau pot folosi cadrul de furnizori PowerShell pentru a accesa depozitele de date prin căi unice. Depozitele de date sunt reprezentate prin litere de unitate și o structură de directoare ierarhică în cadrul acestora. Windows PowerShell vine cu furnizori pentru sistemul de fișiere , registry Windows , depozit de certificate și aliasuri de comandă, variabilă și funcție. Alte aplicații își pot adăuga propriile cmdlet-uri și furnizori pentru a-și accesa depozitele de date.
PowerShell 2.0 a adăugat capacitatea de a crea cmdlet-uri în PowerShell în sine, fără a utiliza limbaje .NET.
PowerShell, ca și shell-urile UNIX/Linux, are o conductă. Această conductă este utilizată pentru a canaliza ieșirea unui cmdlet în intrarea altui cmdlet. În special, utilizatorul poate scoate rezultatele unui cmdlet Get-Processcătre un cmdlet Sort-Object(de exemplu, pentru a sorta procesele după mânere), apoi pentru Where-Objecta filtra procesele care, de exemplu, ocupă mai puțin de 1 MB de memorie de pagină și, în final, poate trece rezultate la cmdlet Select-Objectpentru a selecta doar primele 10 procese (după numărul de handle). Conceptul pipeline este utilizat inițial pe sisteme asemănătoare UNIX (vezi Pipeline (UNIX) ), conceptul PowerShell este diferit de acesta. În sistemele de tip UNIX, ieșirea unei comenzi este transmisă la următoarea etapă a conductei în formă binară, adică este de fapt un flux de date. Exemplu: dd if=/dev/zero bs=1M count=1M | bzip2 -z9 -c > ex.bz2unde fluxul de „zerouri” în blocuri de 1 MB în valoare de 1 milion de ori (de pe dispozitiv /dev/zero) prin comandă dd(copierea fișierelor speciale) este transmis la intrarea comenzii Bzip2, care le comprimă cât mai mult posibil (din punct de vedere al algoritmului de compresie bzip2, opțiunea -z9) și fluxul rezultat transmite către stdout(opțiunea -с), care la rândul său este redirecționat către un ex.bz2. Rezultatul executării unei astfel de comenzi relativ scurte va fi crearea unei arhive, în interiorul căreia va exista un flux de zero octeți de 1 terabyte. Procesul de creare a unei astfel de arhive în acest caz utilizează 2 conducte secvențiale.
PowerShell include un limbaj de scripting cu tipuri dinamice care pot fi folosite pentru a implementa operațiuni complexe folosind cmdleturi. Limbajul de scripting acceptă variabile, funcții, constructe de ramificare ( if-then-else), bucle ( while, do, forși foreach), gestionarea structurată a erorilor și multe alte caracteristici, inclusiv integrarea .NET. Variabilele din PowerShell sunt notate printr-un prefix $înaintea numelui; pot fi setate la orice valoare, inclusiv la ieșirea cmdlet-urilor. Deși limbajul în sine nu este puternic tipizat , variabilele interne sunt stocate cu tipurile lor, care pot fi tipuri sau obiecte primitive . Șirurile pot fi cuprinse între ghilimele simple sau ghilimele duble: utilizarea ghilimelelor duble va înlocui variabilele conținute în șir cu valorile lor. Conform sintaxei variabilei, dacă o cale de fișier este închisă între acolade precedată de un semn dolar (adică ), atunci va fi o referință la conținutul fișierului. Tot ceea ce va fi atribuit unei astfel de variabile va fi scris în fișier și invers - la accesarea conținutului acestuia, conținutul fișierului va fi afișat. ${C:\foo.txt}
Puteți accesa proprietățile și metodele unui obiect folosind punctul ( .) ca în sintaxa C# . PowerShell furnizează variabile speciale, cum ar fi $args, care conține o matrice cu toate argumentele de linie de comandă fără nume transmise unei funcții sau $_care se referă la obiectul curent în conducte și alte constructe. PowerShell are, de asemenea, matrice și matrice asociativă . În plus, PowerShell evaluează automat expresiile aritmetice introduse la linia de comandă și înțelege abrevieri populare precum GB (GB), MB (MB) și KB (KB).
În PowerShell, vă puteți crea propriile funcții care preiau parametri folosind function. Problema pentru mulți începători este că funcțiile nu iau argumente separate prin virgule, ci prin spații (cum ar fi utilitarele din linia de comandă sau cmdleturile):
Aceste argumente pot fi legate de parametri specificați în declarația funcției. Ele pot fi accesate și printr-o matrice $args.
PowerShell vă permite să apelați orice metodă .NET prin includerea spațiului lor de nume între paranteze drepte ( []) și apoi folosind o pereche de două puncte ( ::) pentru a specifica o metodă statică . De exemplu, [System.Console]::WriteLine("PowerShell"). Obiectele sunt create folosind cmdletul New-Objectși le puteți adăuga proprietăți noi folosind cmdletul Add-Member.
Pentru gestionarea erorilor, PowerShell oferă un mecanism bazat pe .NET. În cazul unei erori, Exceptionsunt returnate obiectele care conțin informații despre eroare ( object ), care sunt interceptate de cuvântul cheie trap. Cu toate acestea, comportamentul erorii este configurabil. De exemplu, puteți configura PowerShell să continue executarea în tăcere în cazul unei erori, fără a capta eroarea. A doua versiune de PowerShell a adăugat, de asemenea, Try Catch Finally.
Scripturile scrise în PowerShell pot fi salvate între sesiuni în .PS1. Puteți utiliza apoi întregul script sau funcțiile individuale din acesta. Scripturile și funcțiile sunt folosite ca cmdlet-uri, adică pot fi comenzi într-o pipeline și le puteți transmite parametri. Obiectele pot fi transmise în mod transparent între scripturi, funcții și cmdleturi într-o conductă. Cu toate acestea, rularea scripturilor PowerShell este dezactivată în mod implicit și trebuie să fie activată folosind cmdletul Set-ExecutionPolicy. Scripturile PowerShell pot fi semnate digital pentru a le verifica integritatea.
Microsoft a lansat PowerShell 2.0 ca parte a Windows 7 și Windows Server 2008 R2. Windows PowerShell 2.0 este preinstalat pe aceste sisteme. Excepție este modul de instalare a Windows Server 2008 R2 în modul Core, unde PowerShell 2.0 poate fi reinstalat manual. Pentru platformele mai vechi, este disponibil ca parte a Windows Management Framework. PowerShell 2.0 aduce câteva modificări limbajului de scriptare și API-ului de încorporare, în plus față de 240 de cmdleturi noi.
O listă parțială de funcții noi incluse în PowerShell 2.0:
Următorul tabel conține o selecție a cmdlet-urilor livrate cu PowerShell, cu comenzi care sunt cât mai asemănătoare posibil din alte shell-uri de linie de comandă binecunoscute.
Trebuie remarcat faptul că acest tabel este oferit pentru cunoștință superficială, nu acoperă toate posibilitățile cochiliilor prezentate.
Windows PowerShell (Cmdlet) |
Windows PowerShell (alias) |
cmd.exe / COMMAND.COM (MS-DOS, Windows, OS/2 etc.) |
Bash (Unix, BSD, Linux, Mac OS X etc.) |
Descriere |
---|---|---|---|---|
Obține locație | gl, pwd | cd [5] | pwd | Afișează directorul de lucru curent |
Setați locația | sl, cd, chdir | cd , chdir | CD | Schimbă directorul curent |
limpede-gazdă | cls, clar | cls | clar | Șterge ecranul [6] |
Copiați elementul | cpi, copiere, cp | copie | cp | Copiază unul sau mai multe fișiere sau un arbore de directoare (în PowerShell, puteți copia și obiecte de la alți furnizori de date) |
Obține ajutor | ajuta omul | Ajutor | om | Comanda Ajutor |
Eliminați-element | ri, del, erase, rmdir, rd, rm | del , erase , rmdir , rd | rm , rmdir | Șterge un fișier/director (sau alt element din furnizorii de date PowerShell). |
Redenumiți-element | rni, ren | ren , redenumiți | mv | Redenumește un fișier/director |
Mutați elementul | mi, mișcare, mv | mutare | mv | Mută un fișier/director într-o nouă locație |
Get-ChildItem | gci, dir, ls | dir | ls | Listează toate fișierele/directoarele din directorul curent |
Ieșire de scriere | ecou, scrie | ecou | ecou | Imprimă șiruri de caractere, variabile la ieșire standard |
Locație populară | popd | popd | popd | Schimbă directorul curent cu cel care a fost plasat ultima dată pe stivă |
Împingeți locația | împins | împins | împins | Împinge directorul curent în stivă |
Setați variabila | sv, set | a stabilit | a stabilit | Setarea valorii unei variabile / crearea unei variabile |
Obțineți conținut | gc, tip, cat | tip | pisică | Obține conținutul unui fișier |
Select-String | sls | găsi , găsi str | grep | Afișează linii care corespund unei condiții |
GetProcess | GPS, ps | tlist, [7] tasklist [8] | ps | Listează toate procesele care rulează |
Opriți procesul | spps, ucide | ucide , [7] taskkill [8] | ucide | Oprește un proces care rulează |
Tee-Obiect | tricou | N / A | tricou | Transmite intrarea unui fișier sau variabilă, apoi o transmite mai departe în conductă |
.NET | |
---|---|
Implementări | |
Arhitectură | |
Infrastructură | |
Limbi Microsoft | |
Alte limbi | |
Fundamente Windows | |
Componente | |
Comparații |
|
Tehnologii viitoare | |
Resurse informaționale |
Software gratuit și open source Microsoft | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
informatii generale |
| ||||||||||||
software _ |
| ||||||||||||
Licențe | |||||||||||||
subiecte asemănătoare |
| ||||||||||||
Categorie |