PowerShell - PowerShell
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 |
Versiune stabila | 7.1.5 / 14 octombrie 2021
|
Previzualizare lansare | v7.2.0-preview.10 / 28 septembrie 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 |
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-Help
cmdlet - ului. Conținutul de ajutor local actualizat poate fi recuperat de pe Internet prin Update-Help
cmdlet. Alternativ, ajutorul de pe web poate fi obținut de la caz la caz prin -online
trecerea 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 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, Cmdlet
fie 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 ValueFromPipeline
setul 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-Process
cmdlet - ului ar putea fi conectată la canal pentru Where-Object
a filtra orice proces care are mai puțin de 1 MB de memorie paginată , apoi pentru Sort-Object
cmdlet (de exemplu, pentru a sorta obiectele după numărul de mâner) și apoi în cele din urmă la Select-Object
cmdlet 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-Default
cmdlet, 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 function
cuvâ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:
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, Exception
sunt aruncate obiecte care conțin informații despre eroare ( obiect), care sunt surprinse folosind try ... catch
constructul (deși un trap
construct 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 .ps1
fișier, fie într- un .psm1
fiș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.
Runspace
SessionState
SessionState
Pentru a executa o comandă, Pipeline
trebuie 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
, OutputPipe
si ErrorOutputPipe
obiecte, 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-Host
cmdlet-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ă Pipeline
obiectele 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
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
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()
șiEndProcessing()
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
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
enum
cuvânt cheie care creează enumere -
OneGet
cmdleturi 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:
-Parallel
Comutatorul pentruForEach-Object
cmdlet 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-Error
cmdlet- 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-GridView
cmdletului - Întoarcerea
-ShowWindow
comutatorului 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.
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, |
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 shell „ bash ” 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
- Model comun de informații (calcul)
- Comparația obuzelor de comandă
- Compararea limbajelor de programare
- Managementul întreprinderilor bazat pe web
- Windows Script Host
- Terminalul Windows
Referințe
Lecturi suplimentare
- Finke, Douglas (2012). Windows PowerShell pentru dezvoltatori . O'Reilly Media . ISBN 978-1-4493-2270-0.
- Holmes, Lee (2006). Referință rapidă Windows PowerShell . O'Reilly Media . ISBN 0-596-52813-2.
- Holmes, Lee (2007). Carte de bucate Windows PowerShell . O'Reilly Media . ISBN 978-0-596-52849-2.
- Jones, Don; Hicks, Jeffery (2010). Windows PowerShell 2.0: TFM (ediția a 3-a). Sapien Technologies. ISBN 978-0-9821314-2-8.
- Jones, Don (2020). Shell of an Idea: The Untold History of PowerShell . Auto-publicat. ISBN 978-1-9536450-3-6.
- Kopczynski, Tyson; Handley, Pete; Shaw, Marco (2009). Windows PowerShell Unleashed (ediția a doua). Pearson Education . ISBN 978-0-672-32988-3.
- Kumaravel, Arul; Alb, Jon; Naixin Li, Michael; Happell, Scott; Xie, Guohui; Vutukuri, Krishna C. (2008). Programare profesională Windows PowerShell: Snapins, cmdleturi, gazde și furnizori . Wrox Press . ISBN 978-0-470-17393-0.
- Oakley, Andy (2005). Monad (AKA PowerShell) . O'Reilly Media . ISBN 0-596-10009-4.
- Watt, Andrew (2007). Windows PowerShell profesional . Wrox Press . ISBN 978-0-471-94693-9.
- Wilson, Ed (2013). Windows PowerShell 3.0 pas cu pas . Microsoft Press . ISBN 978-0-7356-6339-8.
- Wilson, Ed (2014). Cele mai bune practici Windows PowerShell . Microsoft Press . ISBN 978-0-7356-6649-8.