PowerShell - PowerShell

PowerShell
PowerShell Core 6.0 icon.png
PowerShell Core 7.1.5 cu Windows Terminal.png
Captură de ecran a unei sesiuni PowerShell Core în Terminalul Windows
Paradigmă Imperativ , pipeline , orientat spre obiect , funcțional și reflexiv
Proiectat de Jeffrey Snover , Bruce Payette, James Truher (și colab.)
Dezvoltator Microsoft
A apărut prima dată 14 noiembrie 2006 ; Acum 14 ani ( 14.11.2006 )
Versiune stabila
7.1.5 / 14 octombrie 2021 ; acum 4 zile ( 14-10-2021 )
Previzualizare lansare
v7.2.0-preview.10 / 28 septembrie 2021 ; Acum 20 de zile ( 28.09.2021 )
Disciplina de tastare Puternic , sigur , implicit și dinamic
Limbajul de implementare C #
Platformă .NET Framework , .NET Core
OS
Licență Licență MIT (dar componenta Windows rămâne proprietară )
Extensii de nume de fișier
Site-ul web microsoft .com / powershell
Influențată de
Python , Ksh , Perl , C # , CL , DCL , SQL , Tcl , Tk , Chef , Puppet

PowerShell este un program de automatizare și gestionare a configurației sarcinilor de la Microsoft , care constă dintr-un shell de linie de comandă și limbajul de scriptare asociat . Inițial, doar o componentă Windows, cunoscută sub numele de Windows PowerShell , a fost realizată open-source și multiplataforma pe 18 august 2016 odată cu introducerea PowerShell Core . Primul este construit pe .NET Framework , cel din urmă pe .NET Core .

În PowerShell, sarcinile administrative sunt îndeplinite în general de cmdleturi (pronunțate comenzi ), care sunt clase specializate .NET care implementează o anumită operație. Acestea funcționează prin accesarea datelor din diferite magazine de date, cum ar fi sistemul de fișiere sau registrul , care sunt puse la dispoziția PowerShell prin intermediul furnizorilor . Dezvoltatorii terți pot adăuga cmdleturi și furnizori la PowerShell. CMdleturile pot fi utilizate de scripturi, care pot fi la rândul lor ambalate în module.

PowerShell oferă acces la COM și WMI , permițând administratorilor să efectueze sarcini administrative atât pe sistemele Windows locale, cât și la distanță, precum și WS-Management și CIM care să permită gestionarea sistemelor Linux la distanță și a dispozitivelor de rețea. PowerShell oferă, de asemenea, un API de găzduire cu care runtime-ul PowerShell poate fi încorporat în alte aplicații. Aceste aplicații pot utiliza apoi funcționalitatea PowerShell pentru a implementa anumite operațiuni, inclusiv cele expuse prin interfața grafică . Această capacitate a fost utilizată de Microsoft Exchange Server 2007 pentru a-și expune funcționalitatea de gestionare ca cmdleturi și furnizori PowerShell și pentru a implementa instrumentele de gestionare grafică ca gazde PowerShell care invocă cmdleturile necesare. Alte aplicații Microsoft, inclusiv Microsoft SQL Server 2008 , își expun, de asemenea, interfața de gestionare prin intermediul cmdleturilor PowerShell.

PowerShell include propriul său ajutor extins, bazat pe consolă (similar cu paginile de man din shell-urile Unix ), accesibil prin intermediul Get-Helpcmdlet - ului. Conținutul de ajutor local actualizat poate fi recuperat de pe Internet prin Update-Helpcmdlet. Alternativ, ajutorul de pe web poate fi obținut de la caz la caz prin -onlinetrecerea la Get-Help.

fundal

fundal

Fiecare versiune de Microsoft Windows pentru computerele personale a inclus un interpret de linie de comandă (CLI) pentru gestionarea sistemului de operare. Predecesorul său, MS-DOS , s-a bazat exclusiv pe un CLI. Acestea sunt COMMAND.COMîn MS-DOS și Windows 9x și cmd.exeîn familia de sisteme de operare Windows NT . Ambele acceptă câteva comenzi interne de bază. În alte scopuri, trebuie scrisă o aplicație separată pentru consolă . Acestea includ, de asemenea, un limbaj de scripting de bază ( fișiere batch ), care poate fi utilizat pentru automatizarea diferitelor activități. Cu toate acestea, ele nu pot fi folosite pentru a automatiza toate fațetele funcționalității interfeței grafice a utilizatorului (GUI), în parte deoarece echivalenții operațiunilor din linia de comandă sunt limitați, iar limbajul de scriptare este elementar. În Windows Server 2003 , situația a fost îmbunătățită, dar suportul pentru scripturi a fost încă nesatisfăcător.

Microsoft a încercat să soluționeze unele dintre aceste neajunsuri introducând Windows Script Host în 1998 cu Windows 98 și gazda sa bazată pe linia de comandă cscript.exe,. Se integrează cu motorul Active Script și permite scripturilor să fie scrise în limbaje compatibile, cum ar fi JScript și VBScript , folosind API - urile expuse de aplicații prin intermediul modelului de obiect component ( COM ). Cu toate acestea, are propriile deficiențe: documentația sa nu este foarte accesibilă și a câștigat repede reputația de vector de vulnerabilitate a sistemului după ce mai mulți viruși de computer de profil au exploatat punctele slabe ale prevederilor sale de securitate. Diferite versiuni de Windows furnizau diferiți interpreți de linie de comandă cu destinație specială (cum ar fi netsh și WMIC ) cu propriile seturi de comenzi, dar nu erau interoperabile.

Kermit

Până la sfârșitul anilor 1990, Intel a venit la Microsoft cerând ajutor pentru a crea Windows, care funcționa pe procesoare Intel, o platformă mai adecvată pentru a sprijini dezvoltarea viitoarelor procesoare Intel. La acea vreme, dezvoltarea procesorului Intel a fost realizată pe computerele Sun Microsystems care au rulat Solaris (o variantă Unix ) pe CPU-uri de arhitectură RISC . Capacitatea de a rula numeroasele scripturi de automatizare KornShell pe Windows a fost identificată ca o capacitate cheie. Pe plan intern, Microsoft a început un efort de a crea un port Windows Korn Shell, care a fost denumit în cod Kermitwiki. Intel a pivotat în cele din urmă pe o platformă de dezvoltare bazată pe Linux care ar putea rula pe procesoare Intel, făcând proiectul Kermit redundant. Cu toate acestea, cu o echipă complet finanțată, managerul de programe Microsoft, Jeffrey Snover, a realizat că există o oportunitate de a crea o soluție mai generală pentru problema Microsoft de automatizare administrativă.


Monadă

Până în 2002, Microsoft a început să dezvolte o nouă abordare a gestionării liniei de comandă, inclusiv o CLI numită Monad (cunoscută și ca Microsoft Shell sau MSH). Ideile din spatele acesteia au fost publicate în august 2002 într-o carte albă numită „Manifestul Monadei” de către arhitectul său principal, Jeffrey Snover . Într-un interviu din 2017, Snover explică geneza PowerShell, spunând că a încercat să pună la dispoziție instrumentele Unix pe Windows, care nu au funcționat din cauza „ diferențelor arhitecturale de bază dintre Windows și Linux ”. Mai exact, el a menționat că Linux consideră totul un fișier text ASCII , în timp ce Windows consideră totul un „ API care returnează date structurate”. Acestea erau fundamental incompatibile, ceea ce l-a determinat să adopte o abordare diferită.

Monad urma să fie un nou CLI extensibil, cu un design nou capabil să automatizeze o serie de sarcini administrative de bază. Microsoft a demonstrat pentru prima dată Monad public la Conferința de dezvoltare profesională de la Los Angeles, în octombrie 2003. Câteva luni mai târziu, au deschis versiunea beta privată, care a dus în cele din urmă la o versiune beta publică. Microsoft a publicat prima versiune beta publică Monad pe 17 iunie 2005 și Beta 2 pe 11 septembrie 2005 și Beta 3 pe 10 ianuarie 2006.

PowerShell

La 25 aprilie 2006, nu mult după anunțul inițial Monad, Microsoft a anunțat că Monad a fost redenumit Windows PowerShell , poziționându-l ca o parte semnificativă a ofertelor sale de tehnologie de gestionare. Release Candidate (RC) 1 din PowerShell a fost lansat în același timp. Un aspect semnificativ atât al schimbării numelui, cât și al RC-ului a fost că aceasta era acum o componentă a Windows, mai degrabă decât un simplu supliment.

Release Candidatul 2 al PowerShell versiunea 1 a fost lansat pe 26 septembrie 2006, cu lansarea finală pe web pe 14 noiembrie 2006. PowerShell pentru versiunile anterioare de Windows a fost lansat pe 30 ianuarie 2007. Dezvoltarea PowerShell v2.0 a început înainte ca PowerShell v1.0 să fie livrat. . În timpul dezvoltării, Microsoft a livrat trei previzualizări ale tehnologiei comunității (CTP) . Microsoft a pus aceste versiuni la dispoziția publicului. Ultima versiune CTP a Windows PowerShell v2.0 a fost disponibilă în decembrie 2008.

PowerShell pentru Linux 6.0 Alpha 9 pe Ubuntu 14.04 x64

PowerShell v2.0 a fost finalizat și lansat în fabricație în august 2009, ca parte integrantă a Windows 7 și Windows Server 2008 R2. Versiunile PowerShell pentru Windows XP, Windows Server 2003, Windows Vista și Windows Server 2008 au fost lansate în octombrie 2009 și sunt disponibile pentru descărcare atât pentru platformele pe 32 de biți, cât și pentru cele pe 64 de biți. Într-un număr din octombrie 2009 al revistei TechNet , Microsoft a numit competența cu PowerShell „cea mai importantă abilitate de care va avea nevoie un administrator Windows în anii următori”.

Windows 10 a livrat un cadru de testare pentru PowerShell.

La 18 august 2016, Microsoft a anunțat că a creat PowerShell open-source și cross-platform cu suport pentru Windows, macOS , CentOS și Ubuntu . Codul sursă a fost publicat pe GitHub . Trecerea la open source a creat o a doua încarnare a PowerShell numită „PowerShell Core”, care rulează pe .NET Core . Este distinct de „Windows PowerShell”, care rulează pe întregul .NET Framework . Începând cu versiunea 5.1, PowerShell Core este inclus în Windows Server 2016 Nano Server .

Proiecta

O tactică esențială de proiectare pentru PowerShell a fost să valorifice numărul mare de API-uri care existau deja în Windows, Windows Management Instrumentation, .NET Framework și alte programe software. Aplicațiile cmdlet PowerShell „înconjoară” funcționalitatea existentă. Intentia cu aceasta tactica este de a oferi o interfata prietenoasa cu administratorul, mai consistenta intre administratori si o gama larga de functionalitati subiacente. Cu PowerShell, un administrator nu trebuie să știe .NET, WMI sau codarea API de nivel scăzut și se poate concentra în schimb pe utilizarea cmdleturilor expuse de PowerShell. În acest sens, PowerShell creează puține funcționalități noi, concentrându-se în schimb pe a face funcționalitatea existentă mai accesibilă unui anumit public.

Gramatică

Dezvoltatorii PowerShell au bazat gramatica de bază a instrumentului pe cea a POSIX 1003.2 KornShell .

Cu toate acestea, limbajul PowerShell a fost influențat și de PHP , Perl și multe alte limbi existente.

Comenzi numite

Windows PowerShell poate executa patru tipuri de comenzi denumite:

  • cmdleturi ( programe .NET Framework concepute pentru a interacționa cu PowerShell)
  • Scripturi PowerShell (fișiere cu sufix de .ps1)
  • Funcții PowerShell
  • Programe executabile independente

Dacă o comandă este un program executabil independent, PowerShell o lansează într-un proces separat ; dacă este un cmdlet, acesta se execută în procesul PowerShell. PowerShell oferă o interfață interactivă din linia de comandă , unde comenzile pot fi introduse și ieșirea lor afișată. Interfața cu utilizatorul oferă completarea filelor personalizabile . PowerShell permite crearea aliasurilor pentru cmdlet-uri, pe care PowerShell le traduce textual în invocații comenzilor originale. PowerShell acceptă parametrii numiți și poziționali pentru comenzi. În executarea unui cmdlet, sarcina de legare a valorii argumentului la parametru este realizată de PowerShell însăși, pentru executabilele externe, argumentele sunt analizate de executabilul extern independent de interpretarea PowerShell.

Sistem tip extins

Sistemul PowerShell Extended Type System ( ETS ) se bazează pe sistemul de tip .NET, dar cu semantică extinsă (de exemplu, propertySets și extensibilitate terță parte). De exemplu, permite crearea diferitelor vizualizări ale obiectelor prin expunerea doar a unui subset de câmpuri de date, proprietăți și metode, precum și specificarea unui format personalizat și a unui comportament de sortare. Aceste vizualizări sunt mapate la obiectul original utilizând fișiere de configurare bazate pe XML .

Cmdlets

Cmdleturile sunt comenzi specializate în mediul PowerShell care implementează funcții specifice. Acestea sunt comenzile native din stiva PowerShell. Cmdlet-urile urmează un model de denumire a verbului - substantivului , cum ar fi Get-ChildItem , care îl face cod de auto-documentare . Cmdleturile produc rezultatele lor ca obiecte și pot primi, de asemenea, obiecte ca intrare, făcându-le potrivite pentru a fi utilizate ca destinatari într-o conductă. Dacă un cmdlet produce mai multe obiecte, fiecare obiect din colecție este transmis prin întreaga conductă înainte ca următorul obiect să fie procesat.

Cmdleturile sunt clase specializate .NET , pe care timpul de execuție PowerShell le instanțiază și le invocă în timpul execuției . Cmdleturile derivă fie din, Cmdletfie din PSCmdlet, acesta din urmă fiind utilizat atunci când cmdletul trebuie să interacționeze cu timpul de execuție PowerShell. Aceste clase de bază specifica anumite metode - BeginProcessing(), ProcessRecord()și EndProcessing()- care are prioritate față de punerea în aplicare cmdlet pentru a oferi funcționalitatea. Ori de câte ori se execută un cmdlet, PowerShell invocă aceste metode în ordine, ProcessRecord()fiind apelat dacă primește intrarea conductei. Dacă este colectată o colecție de obiecte, metoda este invocată pentru fiecare obiect din colecție. Clasa care implementează cmdletul trebuie să aibă un atribut .NET - CmdletAttribute- care specifică verbul și substantivul care alcătuiește numele cmdletului. Verbele comune sunt furnizate ca enum .

Dacă un cmdlet primește fie intrarea conductei, fie intrarea parametrilor din linia de comandă, trebuie să existe o proprietate corespunzătoare în clasă, cu o implementare mutator . PowerShell invocă mutatorul cu valoarea parametrului sau intrarea conductei, care este salvată de implementarea mutatorului în variabilele de clasă. Aceste valori sunt apoi menționate prin metodele care implementează funcționalitatea. Proprietățile care se mapează la parametrii liniei de comandă sunt marcate de ParameterAttributeși sunt setate înainte de apelul către BeginProcessing(). Cei care mapează la intrarea conductei sunt, de asemenea, flancate de ParameterAttribute, dar cu ValueFromPipelinesetul de parametri atribut.

Implementarea acestor clase de cmdlet se poate referi la orice API .NET și poate fi în orice limbă .NET . În plus, PowerShell pune la dispoziție anumite API-uri, cum ar fi , care este utilizat pentru a accesa funcționalitatea specifică PowerShell, cum ar fi scrierea obiectelor rezultate în conductă. Cmdleturile pot utiliza API-urile de acces la date .NET direct sau pot utiliza infrastructura PowerShell a furnizorilor PowerShell , care fac ca magazinele de date să fie adresabile utilizând căi unice . Magazinele de date sunt expuse folosind litere de unitate și ierarhii din ele, adresate ca directoare. Windows PowerShell este livrat cu furnizori pentru sistemul de fișiere , registry , depozitul de certificate , precum și spațiile de nume pentru pseudonimele comenzilor, variabilele și funcțiile. Windows PowerShell include, de asemenea, diverse cmdleturi pentru gestionarea diferitelor sisteme Windows , inclusiv sistemul de fișiere , sau utilizarea instrumentelor de gestionare Windows pentru a controla componentele Windows . Alte aplicații pot înregistra cmdlet-uri cu PowerShell, permițându-i astfel să le gestioneze și, dacă conțin un magazin de date (cum ar fi o bază de date), pot adăuga și furnizori specifici. WriteObject()

Numărul de cmdleturi incluse în instalarea de bază PowerShell a crescut în general cu fiecare versiune:

Versiune Cmdlets
Windows PowerShell 1.0 129
Windows PowerShell 2.0 632
Windows PowerShell 3.0 aproximativ 1.000
Windows PowerShell 4.0 ?
Windows PowerShell 5.0 aproximativ 1.300
Windows PowerShell 5.1 1586
PowerShell Core 6.0 ?
PowerShell Core 6.1 ?
PowerShell Core 6.2 ?
PowerShell 7.0 1507
PowerShell 7.1 ?

Cmdleturile pot fi adăugate în shell prin snap-ins (depreciat în v2) și module; utilizatorii nu sunt limitați la cmdleturile incluse în instalarea PowerShell de bază.

Conductă

PowerShell implementează conceptul de conductă , care permite canalizarea ieșirii unui cmdlet la alt cmdlet ca intrare. De exemplu, ieșirea Get-Processcmdlet - ului ar putea fi conectată la canal pentru Where-Objecta filtra orice proces care are mai puțin de 1 MB de memorie paginată , apoi pentru Sort-Objectcmdlet (de exemplu, pentru a sorta obiectele după numărul de mâner) și apoi în cele din urmă la Select-Objectcmdlet pentru a selecta doar primele zece procese pe baza numărului de mâner.

Ca și în cazul conductelor Unix , conductele PowerShell pot construi comenzi complexe, utilizând |operatorul pentru conectarea etapelor. Cu toate acestea, conducta PowerShell diferă de conductele Unix, deoarece etapele se execută în runtime PowerShell, mai degrabă decât ca un set de procese coordonate de sistemul de operare . În plus, obiectele .NET structurate, mai degrabă decât fluxurile de octeți , sunt transmise de la o etapă la alta. Folosirea obiectelor și executarea etapelor în timpul de execuție PowerShell elimină necesitatea serializării structurilor de date sau a extragerii acestora analizând în mod explicit ieșirea textului. Un obiect poate încapsula, de asemenea, anumite funcții care funcționează pe datele conținute, care devin disponibile comenzii destinatarului pentru utilizare. Pentru ultimul cmdlet dintr-o conductă, PowerShell conectează automat obiectul de ieșire la Out-Defaultcmdlet, care transformă obiectele într-un flux de obiecte formatate și apoi le redă pe ecran.

Deoarece toate obiectele PowerShell sunt obiecte .NET, acestea împărtășesc o .ToString()metodă, care recuperează reprezentarea text a datelor într-un obiect. În plus, PowerShell permite specificarea definițiilor de formatare, astfel încât reprezentarea textului obiectelor poate fi personalizată alegând ce elemente de date să fie afișate și în ce mod. Cu toate acestea, pentru a menține compatibilitatea înapoi , dacă un executabil extern este utilizat într-o conductă, acesta primește un flux de text care reprezintă obiectul, în loc să se integreze direct cu sistemul de tip PowerShell.

Scripting

Windows PowerShell include un limbaj de scriptare tastat dinamic , care poate implementa operațiuni complexe folosind cmdleturi în mod imperativ . Suporții limbaj de scripting variabile, funcții, ramificare ( if-then-else), bucle ( while, do, forși foreach), eroarea structurata / manipulare excepție și de închidere / expresii lambda , precum și integrarea cu .NET. Variabilele din scripturile PowerShell sunt prefixate cu $. Variabilelor li se poate atribui orice valoare, inclusiv ieșirea cmdleturilor. Șirurile pot fi încadrate fie între ghilimele simple sau ghilimele duble: atunci când se utilizează ghilimele duble, variabilele vor fi extinse chiar dacă se află în ghilimele. Încadrarea căii către un fișier între paranteze precedată de un semn de dolar (ca în ${C:\foo.txt}) creează o referință la conținutul fișierului. Dacă este utilizată ca valoare L , tot ce i se atribuie va fi scris în fișier. Când este utilizat ca valoare R , conținutul fișierului va fi citit. Dacă este atribuit un obiect, acesta este serializat înainte de a fi stocat.

Membrii obiectului pot fi accesați utilizând .notația, ca în sintaxa C #. PowerShell oferă variabile speciale, cum ar fi $args, care este o matrice a tuturor argumentelor liniei de comandă transmise unei funcții din linia de comandă și $_, care se referă la obiectul curent din conductă. PowerShell oferă, de asemenea, matrici și matrici asociative . Limbajul de script PowerShell evaluează de asemenea expresiile aritmetice introduse pe linia de comandă și analizează abrevierile obișnuite, cum ar fi GB, MB și KB.

Folosind functioncuvântul cheie, PowerShell asigură crearea de funcții. O funcție simplă are următorul aspect general:

function name ([Type]$Param1, [Type]$Param2)
{
  # Instructions
}

Cu toate acestea, PowerShell permite funcții avansate care acceptă parametrii numiți, parametrii de poziție, parametrii de comutare și parametrii dinamici.

function Verb-Noun
{
  param (
    # Definition of static parameters
  )
  dynamicparam {
    # Definition of dynamic parameters
  }
  begin {
    # Set of instruction to run at the start of the pipeline
  }
  process {
    # Main instruction sets, ran for each item in the pipeline
  }
  end {
    # Set of instruction to run at the end of the pipeline
  }
}

Funcția definită este invocată în oricare dintre următoarele forme:

name value1 value2
Verb-Noun -Param1 value1 -Param2 value2

PowerShell permite apelarea oricăror metode .NET statice prin furnizarea spațiilor de nume între paranteze ( []) și apoi folosind o pereche de puncte ( ::) pentru a indica metoda statică. De exemplu:

[Console]::WriteLine("PowerShell")

Există zeci de moduri de a crea obiecte în PowerShell. Odată creat, se poate accesa proprietățile și metodele de instanță ale unui obiect folosind .notația.

PowerShell acceptă șiruri , atât raw cât și escape . Un șir încadrat între ghilimele unice este un șir brut, în timp ce un șir închis între ghilimele duble este un șir scăpat. PowerShell tratează ghilimelele drepte și cretate ca echivalente.

Următoarea listă de caractere speciale este acceptată de PowerShell:

Caracterele speciale PowerShell
Secvenţă Sens
`0 Nul
`a Alerta
`b Backspace
`e Evadare
`f Formular de alimentare
`n Linie nouă
`r Retur transport
`t Filă orizontală
`u {x} Secvență de evadare Unicode
`v Fila verticală
-% Tratați literalmente orice personaj din acest punct înainte

Pentru gestionarea erorilor, PowerShell oferă un mecanism de gestionare a excepțiilor bazat pe .NET . În caz de erori, Exceptionsunt aruncate obiecte care conțin informații despre eroare ( obiect), care sunt surprinse folosind try ... catchconstructul (deși un trapconstruct este acceptat și). PowerShell poate fi configurat pentru a relua în tăcere execuția, fără a arunca de fapt excepția; acest lucru se poate face fie printr-o singură comandă, o singură sesiune sau perpetuu.

Scripturile scrise folosind PowerShell pot fi făcute să persiste între sesiuni fie într-un .ps1fișier, fie într- un .psm1fișier (acesta din urmă este utilizat pentru a implementa un modul). Mai târziu, poate fi utilizat întregul script sau funcțiile individuale din script. Scripturile și funcțiile funcționează în mod analog cu cmdleturile, în sensul că pot fi utilizate ca comenzi în conducte, iar parametrii pot fi legați de acestea. Obiectele de conducte pot fi transmise fără probleme între funcții, scripturi și cmdleturi. Pentru a preveni rularea neintenționată a scripturilor, executarea scriptului este dezactivată în mod implicit și trebuie activată în mod explicit. Activarea scripturilor poate fi realizată fie la nivel de sistem, utilizator sau sesiune. Scripturile PowerShell pot fi semnate pentru a le verifica integritatea și sunt supuse securității accesului la cod .

Limbajul de script PowerShell acceptă notația de prefix binar similară cu notația științifică acceptată de multe limbaje de programare din familia C.

Gazduire

Se poate utiliza, de asemenea, PowerShell încorporat într-o aplicație de gestionare, care utilizează runtime-ul PowerShell pentru a implementa funcționalitatea de gestionare. Pentru aceasta, PowerShell oferă un API de găzduire gestionat . Prin intermediul API - uri, aplicația poate instantia un runspace (unul instanțierea runtime PowerShell), care rulează în aplicației de proces și este expus ca un obiect. Starea spațiului de rulare este încorporată într-un obiect. Când spațiul de rulare este creat, runtime-ul Windows PowerShell inițializează instanțierea, inclusiv inițializarea furnizorilor și enumerarea cmdleturilor și actualizează obiectul în consecință. Spațiul de execuție trebuie apoi deschis fie pentru procesare sincronă, fie pentru prelucrare asincronă. După aceea poate fi folosit pentru a executa comenzi. RunspaceSessionStateSessionState

Pentru a executa o comandă, Pipelinetrebuie creată o conductă (reprezentată de un obiect) și asociată cu spațiul de rulare. Obiectul conductei este apoi populat cu cmdleturile care alcătuiesc conducta. Pentru operații secvențiale (ca într-un script PowerShell), un obiect Pipeline este creat pentru fiecare instrucțiune și imbricat în interiorul unui alt obiect Pipeline. Când este creată o conductă, Windows PowerShell invocă procesorul de conducte, care rezolvă cmdleturile în lor ansambluri ( procesorul de comandă ) și adaugă o referire la acestea la conducta, si le asociaza InputPipe, OutputPipesi ErrorOutputPipeobiecte, pentru a reprezenta legătura cu conductă. Tipurile sunt verificate și parametrii legați utilizând reflexia . Odată ce conducta este configurată, gazda apelează Invoke()metoda pentru a rula comenzile sau echivalentul său asincron InvokeAsync(). Dacă conducta are Write-Hostcmdlet-ul la sfârșitul conductei, acesta scrie rezultatul pe ecranul consolei. În caz contrar, rezultatele sunt predate gazdei, care ar putea aplica o prelucrare suplimentară sau afișa rezultatul în sine.

Microsoft Exchange Server 2007 utilizează API-urile de găzduire pentru a furniza GUI de gestionare. Fiecare operațiune expusă în GUI este mapată la o secvență de comenzi (sau conducte) PowerShell. Gazda creează conducta și le execută. De fapt, consola interactivă PowerShell în sine este o gazdă PowerShell, care interpretează scripturile introduse la linia de comandă și creează Pipelineobiectele necesare și le invocă.

Configurarea stării dorite

DSC permite specificarea declarativă a modului în care ar trebui configurat un mediu software.

La executarea unei configurații , DSC se va asigura că sistemul obține starea descrisă în configurație. Configurațiile DSC sunt idempotente. Configuration Local Manager (LCM) sondaje periodic sistemul cu ajutorul fluxului de control descris de resurse (bucăți imperative de DSC) pentru a se asigura că starea unei configurații este menținută.

Versiuni

Folosind inițial numele de cod „Monad”, PowerShell a fost prezentat public pentru prima dată la Conferința pentru dezvoltatori profesioniști din octombrie 2003 la Los Angeles. Toate versiunile majore sunt încă acceptate și fiecare versiune majoră are compatibilitate inversă cu versiunile anterioare.

Windows PowerShell 1.0

Sesiunea Windows PowerShell 1.0 utilizând consola Windows

PowerShell 1.0 a fost lansat în noiembrie 2006 pentru Windows XP SP2 , Windows Server 2003 SP1 și Windows Vista . Este o componentă opțională a Windows Server 2008 .

Windows PowerShell 2.0

Windows PowerShell ISE v2.0 pe Windows 7 , un mediu de dezvoltare integrat pentru scripturile PowerShell.

PowerShell 2.0 este integrat cu Windows 7 și Windows Server 2008 R2 și este lansat pentru Windows XP cu Service Pack 3, Windows Server 2003 cu Service Pack 2 și Windows Vista cu Service Pack 1.

PowerShell v2 include modificări ale limbajului de scriptare și API-ului de găzduire, pe lângă includerea a peste 240 de cmdlet-uri noi.

Noile caracteristici ale PowerShell 2.0 includ:

  • PowerShell la distanță : Folosind WS-Management , PowerShell 2.0 permite scripturile și cmdleturile să fie invocate pe o mașină la distanță sau un set mare de mașini la distanță.
  • Lucrări de fundal : denumit și PSJob , permite o secvență de comandă (script) sau o conductă să fie invocată asincron. Lucrările pot fi rulate pe mașina locală sau pe mai multe mașini la distanță. Un cmdlet interactiv într-un PSJob blochează execuția lucrării până când este furnizată intrarea utilizatorului.
  • Tranzacții : activați cmdletul și dezvoltatorii pot efectua operațiuni tranzacționale . PowerShell 2.0 include cmdlet-uri de tranzacție pentru pornirea, angajarea și derularea înapoi a unei tranzacții PST , precum și caracteristici pentru gestionarea și direcționarea tranzacției către cmdlet-ul participant și operațiunile furnizorului. Furnizorul de registru PowerShell acceptă tranzacțiile.
  • Funcții avansate : Acestea sunt cmdlet-uri scrise folosind limbajul de script PowerShell. Denumită inițial „cmdleturi script”, această caracteristică a fost redenumită ulterior „funcții avansate”.
  • SteppablePipelines : Aceasta permite utilizatorului să controleze atunci când BeginProcessing(), ProcessRecord()și EndProcessing()funcțiile unui cmdlet sunt numite.
  • Module : Aceasta permite dezvoltatorilor și administratorilor de scripturi să organizeze și să partiționeze scripturile PowerShell în unități autonome, reutilizabile. Codul dintr-un modul se execută în propriul context autonom și nu afectează starea din afara modulului. Modulele pot defini un mediu de spațiu de rulare restricționat utilizând un script. Au un stat persistent, precum și membri publici și privați.
  • Limbaj de date : un subset specific domeniului limbajului de scriptare PowerShell care permite decuplarea definițiilor de date de scripturi și permite importarea resurselor șirului localizat în script în timpul rulării ( Script Internationalization ).
  • Depanare script : permite setarea punctelor de întrerupere într-un script sau funcție PowerShell. Punctele de întrerupere pot fi setate pe linii, linie și coloane, comenzi și accesul la citire sau scriere a variabilelor. Acesta include un set de cmdleturi pentru a controla punctele de întrerupere prin script.
  • Evenimentare : Această caracteristică permite ascultarea, redirecționarea și acționarea asupra evenimentelor de management și de sistem. Evenimentarea permite gazdelor PowerShell să fie notificate cu privire la modificările de stare ale entităților lor gestionate. De asemenea, permite scripturilor PowerShell să se aboneze la ObjectEvents , PSEvents și WmiEvents și să le proceseze sincron și asincron.
  • Windows PowerShell Integrated Scripting Environment (ISE) : PowerShell 2.0 include o gazdă PowerShell bazată pe GUI, care oferă depanator integrat, evidențierea sintaxei , completarea filelor și până la 8 console PowerShell Unicode (Runspaces) activate într-o interfață cu file, precum și abilitatea pentru a rula doar părțile selectate într-un script.
  • Transfer de fișiere în rețea : suport nativ pentru transfer prioritar, limitat și asincron de fișiere între mașini utilizând Serviciul de transfer inteligent în fundal (BITS).
  • Cmdlet-uri noi : inclusiv Out-GridView, care afișează date tabulare în obiectul WPF GridView , pe sistemele care permit acest lucru și dacă ISE este instalat și activat.
  • Operatori noi : -Split, -Join, și splatting ( @) operatori.
  • Manevrarea excepțiilor cu Try-Catch-Final : spre deosebire de alte limbi .NET, aceasta permite mai multe tipuri de excepții pentru un singur bloc de captură.
  • Nest-Here-Strings : PowerShell Here-Strings au fost îmbunătățite și pot acum să se cuibărească.
  • Blocați comentariile : PowerShell 2.0 acceptă comentariile de blocare folosind <#și #>ca delimitatori.
  • API-uri noi : noile API variază de la predarea unui control mai mare asupra parserului PowerShell și a timpului de execuție către gazdă, la crearea și gestionarea colecției de Runspaces ( RunspacePools), precum și posibilitatea de a crea Runspaces restricționate care permit doar invocarea unui subset configurat de PowerShell . Noile API susțin, de asemenea, participarea la o tranzacție gestionată de PowerShell

Windows PowerShell 3.0

PowerShell 3.0 este integrat cu Windows 8 și cu Windows Server 2012 . De asemenea, Microsoft a făcut PowerShell 3.0 disponibil pentru Windows 7 cu Service Pack 1, pentru Windows Server 2008 cu Service Pack 1 și pentru Windows Server 2008 R2 cu Service Pack 1.

PowerShell 3.0 face parte dintr-un pachet mai mare, Windows Management Framework 3.0 (WMF3), care conține, de asemenea, serviciul WinRM pentru a sprijini telecomanda. Microsoft a lansat mai multe versiuni de previzualizare a tehnologiei comunitare ale WMF3. O versiune timpurie a previzualizării tehnologiei comunității 2 (CTP 2) a Windows Management Framework 3.0 a fost lansată pe 2 decembrie 2011. Windows Management Framework 3.0 a fost lansat pentru disponibilitate generală în decembrie 2012 și este inclus în mod implicit cu Windows 8 și Windows Server 2012.

Noile funcții din PowerShell 3.0 includ:

  • Lucrări programate : Lucrările pot fi programate să ruleze la o dată și o oră prestabilite utilizând infrastructura Programator activități Windows .
  • Conectivitatea sesiunii : sesiunile pot fi deconectate și reconectate. Sesiunile la distanță au devenit mai tolerante față de eșecurile temporare ale rețelei.
  • Scriere de cod îmbunătățită : completarea codului (IntelliSense) și fragmente sunt adăugate. PowerShell ISE permite utilizatorilor să utilizeze casete de dialog pentru a completa parametrii pentru cmdleturile PowerShell.
  • Suport pentru delegare : sarcinile administrative pot fi delegate utilizatorilor care nu au permisiuni pentru acel tip de sarcină, fără a le acorda permisiuni suplimentare perpetue.
  • Actualizare ajutor : documentațiile de ajutor pot fi actualizate prin comanda Actualizare-Ajutor.
  • Detectarea automată a modulelor : modulele sunt încărcate implicit ori de câte ori este invocată o comandă din acel modul. Completarea codului funcționează și pentru modulele descărcate.
  • Noi comenzi : s-au adăugat zeci de module noi, inclusiv funcționalități de gestionare a discurilor get-WmiObject win32_logicaldisk, volumelor, firewall-urilor, conexiunilor de rețea și imprimantelor, care au fost efectuate anterior prin WMI.

Windows PowerShell 4.0

PowerShell 4.0 este integrat cu Windows 8.1 și cu Windows Server 2012 R2 . De asemenea, Microsoft a făcut PowerShell 4.0 disponibil pentru Windows 7 SP1 , Windows Server 2008 R2 SP1 și Windows Server 2012 .

Noile funcții din PowerShell 4.0 includ:

  • Configurarea stării dorite : extensii și instrumente de limbaj declarative care permit implementarea și gestionarea datelor de configurare pentru sisteme care utilizează standardele de gestionare DMTF și protocolul de gestionare WS
  • Nouă politică de execuție implicită : pe serverele Windows, politica de execuție implicită este acum RemoteSigned.
  • Salvare-Ajutor : Ajutorul poate fi acum salvat pentru modulele care sunt instalate pe computere la distanță.
  • Depanare îmbunătățită : depanatorul acceptă acum fluxurile de lucru de depanare, execuția de script la distanță și păstrarea sesiunilor de depanare între reconectările de sesiune PowerShell.
  • -PipelineVariable switch : Un nou parametru omniprezent pentru a expune obiectul curent al conductei ca o variabilă în scopuri de programare
  • Diagnostic de rețea pentru a gestiona comutatoarele de rețea virtualizate fizice și Hyper-V
  • Sintaxa metodei Where și ForEach oferă o metodă alternativă de filtrare și repetare a obiectelor.

Windows PowerShell 5.0

Pictograma PowerShell 5.0

Windows Management Framework (WMF) 5.0 RTM care include PowerShell 5.0 a fost relansat pe web pe 24 februarie 2016, în urma unei versiuni inițiale cu o eroare severă.

Caracteristici cheie incluse:

  • Noul class cuvânt cheie care creează clase pentru programarea orientată pe obiecte
  • Noul enumcuvânt cheie care creează enumere
  • OneGetcmdleturi pentru a sprijini managerul de pachete Chocolatey
  • Extinderea suportului pentru gestionarea comutatorilor la comutatoarele de rețea din stratul 2 .
  • Depanare pentru lucrări de fundal PowerShell și instanțe de PowerShell găzduite în alte procese (fiecare dintre acestea fiind numit „spațiu de execuție”)
  • Desired State Configuration (DSC) Local Configuration Manager (LCM) versiunea 2.0
  • Configurații parțiale DSC
  • Meta-configurații DSC Local Configuration Manager
  • Autorizarea resurselor DSC utilizând clasele PowerShell

Windows PowerShell 5.1

A fost lansat împreună cu actualizarea Windows 10 Anniversary pe 2 august 2016 și în Windows Server 2016 . PackageManagement acceptă acum proxy-uri, PSReadLine are acum suport ViMode și au fost adăugate două noi cmdlet-uri: Get-TimeZone și Set-TimeZone. Modulul LocalAccounts permite adăugarea / eliminarea conturilor de utilizator locale. O previzualizare pentru PowerShell 5.1 a fost lansată pentru Windows 7, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012 și Windows Server 2012 R2 pe 16 iulie 2016 și a fost lansată pe 19 ianuarie 2017.

PowerShell 5.1 este prima versiune care vine în două ediții de „Desktop” și „Core”. Ediția „Desktop” este continuarea tradiționalului Windows PowerShell care rulează pe stiva .NET Framework. Ediția „Core” rulează pe .NET Core și este inclusă în Windows Server 2016 Nano Server. În schimbul unei amprente mai mici, acesteia din urmă îi lipsesc unele caracteristici, cum ar fi cmdleturile pentru a gestiona clipboard-ul sau pentru a conecta un computer la un domeniu, cmdlet-urile WMI versiunea 1, cmdlet-urile jurnalului de evenimente și profiluri. Aceasta a fost versiunea finală a PowerShell realizată exclusiv pentru Windows.

PowerShell Core 6

PowerShell Core 6.0 a fost anunțat pentru prima dată pe 18 august 2016, când Microsoft a dezvăluit PowerShell Core și decizia sa de a face produsul pe mai multe platforme , independent de Windows, gratuit și open source. A obținut disponibilitatea generală pe 10 ianuarie 2018 pentru Windows, macOS și Linux . Are propriul ciclu de viață al asistenței și respectă politica Microsoft privind ciclul de viață care este introdusă cu Windows 10: Doar cea mai recentă versiune a PowerShell Core este acceptată. Microsoft se așteaptă să lanseze o versiune minoră pentru PowerShell Core 6.0 la fiecare șase luni.

Cea mai semnificativă schimbare în această versiune de PowerShell este extinderea către celelalte platforme. Pentru administratorii Windows, această versiune de PowerShell nu a inclus nicio caracteristică nouă majoră. Într-un interviu acordat comunității din 11 ianuarie 2018, echipei PowerShell i s-a cerut să enumere primele 10 lucruri cele mai interesante care s-ar întâmpla pentru un profesionist din Windows IT care ar migra de la Windows PowerShell 5.1 la PowerShell Core 6.0; ca răspuns, Angel Calvo de la Microsoft ar putea numi doar două: cross-platform și open-source.

Potrivit Microsoft, una dintre noile caracteristici ale PowerShell 6.1 este „Compatibilitatea cu peste 1900 cmdleturi existente în Windows 10 și Windows Server 2019 ”. Totuși, nu există detalii despre aceste cmdleturi în versiunea completă a jurnalului de modificări. Microsoft susține ulterior că acest număr a fost insuficient deoarece PowerShell Core nu a reușit să înlocuiască Windows PowerShell 5.1 și să câștige tracțiune pe Windows. Cu toate acestea, a fost popular pe Linux.

PowerShell Core 6.2 se concentrează în principal pe îmbunătățirile de performanță, remedierea erorilor și îmbunătățirile de cmdlet și limbaj mai mici care au îmbunătățit productivitatea dezvoltatorului.

PowerShell 7

PowerShell 7 înlocuiește produsele PowerShell Core 6.x, precum și Windows PowerShell 5.1, care este ultima versiune Windows PowerShell acceptată. Accentul în dezvoltare a fost de a face din PowerShell 7 un înlocuitor viabil pentru Windows PowerShell 5.1, adică să aibă aproape paritate cu Windows PowerShell în ceea ce privește compatibilitatea cu modulele livrate cu Windows.

Noile funcții din PowerShell 7 includ:

  • -ParallelComutatorul pentru ForEach-Objectcmdlet pentru a ajuta mâner de procesare paralelă
  • Aproape de paritate cu Windows PowerShell în ceea ce privește compatibilitatea cu modulele Windows încorporate
  • O nouă vizualizare a erorilor
  • Get-Errorcmdlet
  • Operatori de înlănțuire a conductelor ( &&și ||) care permit executarea condiționată a următorului cmdlet din conductă
  • Operatorul ?: Pentru operație ternară
  • ??=Operatorul care atribuie doar o valoare unei variabile atunci când valoarea existentă a variabilei este nulă
  • ??Operatorul de coalescență nul
  • Cross-platform Invoke-DscResource(experimental)
  • Întoarcerea Out-GridViewcmdletului
  • Întoarcerea -ShowWindowcomutatorului pentruGet-Help

Compararea cmdleturilor cu comenzi similare

Următorul tabel conține o selecție a cmdlet-urilor livrate cu PowerShell, notând comenzi similare în alți interpreți de linie de comandă bine cunoscuți. Multe dintre aceste comenzi similare apar imediat ca definite ca aliasuri în PowerShell, ceea ce face ca persoanele familiare cu alte shell-uri obișnuite să înceapă să lucreze.

Compararea cmdleturilor PowerShell cu comenzile interne și externe ale altor interpreți din linia de comandă
PowerShell (cmdlet) PowerShell (Alias) Prompt de comandă Windows Unix shell Descriere
Get-ChildItem gci, dir, ls dir eu sunt Listează toate fișierele și folderele din folderul curent sau dat
Test de conexiune ping ping ping Trimite solicitări de ecou ICMP către aparatul specificat de pe aparatul curent sau pornește altei aparate să facă acest lucru
Obțineți conținut gc, tip, cat tip pisică Obține conținutul unui fișier
Obțineți comanda gcm ajutor , unde tip , care , compgen Listează comenzile disponibile și primește calea comenzii
Obține ajutor ajutor, omule Ajutor apropos , omule Tipărește documentația unei comenzi pe consolă
Clear-Host cls, clar cls clar Șterge ecranul
Copy-Item cpi, copie, cp copie , xcopy , robocopy cp Copiază fișiere și foldere într-o altă locație
Mutare-articol mi, mișcă, mv mutare mv Mută ​​fișierele și folderele într-o locație nouă
Eliminați-articolul ri, del, șterge, rmdir, rd, rm del , șterge , rmdir , rd rm , rmdir Șterge fișiere sau foldere
Redenumiți-articolul rni, ren, mv ren , redenumiți mv Redenumește un singur fișier, folder, hard link sau link simbolic
Obțineți locația gl, cd, pwd CD pwd Afișează calea de lucru (folderul curent)
Pop-Location popd popd popd Schimbă calea de lucru la locația împinsă cel mai recent în stivă
Push-Location pushd pushd pushd Stochează calea de lucru pe stivă
Set-Location sl, cd, chdir cd , chdir CD Schimbă calea de lucru
Tee-Object tee N / A tee Introduceți conductele într-un fișier sau variabilă, trecând intrarea de-a lungul conductei
Scriere-ieșire ecou, ​​scrie ecou ecou Tipărește șiruri sau alte obiecte la ieșirea standard
Obține-proces GPS, ps tlist, Tasklist ps Listează toate procesele care rulează
Stop-proces spps, ucide ucide , taci ucide Oprește un proces de rulare
Selectați-șir sls findstr găsi , grep Tipărește linii care se potrivesc cu un model
Set-Variable sv, set a stabilit env, export, set, setenv Creează sau modifică conținutul unei variabile de mediu
Invocare-Cerere Web iwr, curl, wget răsuci wget , curl Obține conținut de pe o pagină web pe Internet

Note

Extensii de nume de fișier

Extensie Descriere
.ps1 Fișier script
.psd1 Fișierul manifest al modulului; de obicei vine cu un modul script sau un modul binar
.psm1 Fișier modul script
.dll Fișier modul binar compatibil DLL
.ps1xml Formatați și definiți tipul fișierului
.xml Fișier de date serializat conform XML
.psc1 Fișier consolă
.pssc Fișier de configurare a sesiunii
.psrc Fișier capacitate rol

Suport aplicatie

Cerere Versiune Cmdlets Furnizor Management GUI
Server Exchange 2007 402 da da
Windows Server 2008 da da Nu
Microsoft SQL Server 2008 da da Nu
Microsoft SharePoint 2010 da da Nu
System Center Configuration Manager 2012 R2 400+ da Nu
Manager operațiuni centru de sistem 2007 74 da Nu
System Center Virtual Machine Manager 2007 da da da
System Center Data Protection Manager 2007 da Nu Nu
Windows Compute Cluster Server 2007 da da Nu
Microsoft Transporter Suite pentru Lotus Domino 08.02.0012 47 Nu Nu
Microsoft PowerTools pentru Open XML 1.0 33 Nu Nu
IBM WebSphere MQ 6.0.2.2 44 Nu Nu
Suplimente IoT Core 74 Necunoscut Necunoscut
Quest Management Shell pentru Active Directory 1.7 95 Nu Nu
Comenzi Specificații software pentru operațiuni speciale 1.0 da Nu da
VMware vSphere PowerCLI 6.5 R1 500+ da da
Servicii de informare pe internet 7.0 54 da Nu
Centrul de depanare Windows 7 6.1 da Nu da
Set de instrumente de implementare Microsoft 2010 da da da
NetApp PowerShell Toolkit 4.2 2000+ da da
JAMS Scheduler - Sistem de gestionare și acces la joburi 5.0 52 da da
UIAutomation 0,8 432 Nu Nu
Dell Equallogic 3.5 55 Nu Nu
Inventar LOGIN 5.8 da da da
SePSX 0.4.1 39 Nu Nu

Implementare alternativă

Un proiect numit Pash , un joc de cuvinte pe cunoscutul shellbash ” Unix, a fost o reimplementare open-source și multiplataforma a PowerShell prin cadrul Mono . Pash a fost creat de Igor Moochnick, scris în C # și a fost lansat sub licența publică generală GNU . Dezvoltarea Pash sa oprit în 2008, a fost repornită pe GitHub în 2012 și, în cele din urmă, a încetat în 2016, când PowerShell a devenit oficial open-source și multiplataforma.

Vezi si

Referințe

Lecturi suplimentare

linkuri externe