Școala Geek Învățați cum să utilizați obiecte în PowerShell
Înțelegerea obiectelor este unul dintre conceptele fundamentale de a "obține" PowerShell. Alăturați-vă nouă în timp ce explorăm obiecte și cum fac PowerShell mai bine decât orice altă coajă aflată astăzi.
Asigurați-vă că citiți articolele anterioare din seria:
- Aflați cum să automatizați Windows cu PowerShell
- Învățarea de a folosi Cmdlets în PowerShell
Și stați pe toată săptămâna pentru restul seriei.
Obiecte
Te-ai intrebat vreodata ce plaseaza PowerShell in afara unei cochilii traditionale Linux ca Bash, sau chiar si promptitudinea liniei de comanda? Răspunsul este foarte simplu: textul de ieșire din coajă tradițională, ceea ce face dificilă efectuarea de lucruri precum formatarea și filtrarea. Desigur, există instrumente care să vă ajute să obțineți treaba (sed și grep veniți în minte), dar la sfârșitul zilei, dacă doriți să faceți orice fel de parsare de text greu, trebuie să știți expresii regulate, cum ar fi din spatele mâinii tale.
PowerShell profită de cadrul .Net care stă la baza și are o abordare diferită, folosind obiecte în loc de text. Obiectele sunt doar o reprezentare a ceva. Acestea reprezintă o colecție de părți și acțiuni pentru a le folosi. Să aruncăm o privire asupra părților unei biciclete și asupra modului în care am putea să le folosim.
Obiectele din .Net sunt la fel, cu excepția a două diferențe mici: se numesc "părțile" proprietăţi și "Instrucțiunile" sunt numite metode. Dacă vrem să reprezentăm un serviciu Windows ca un obiect, am putea decide că este adecvat să îl descriem folosind trei proprietăți: Nume serviciu, stare și descriere. De asemenea, trebuie să interacționăm cu serviciul, așa că am putea da obiectului o metodă Start, o oprire și o pauză.
Puteți vedea proprietățile și metodele unui obiect prin trecerea acestuia în cmdlet-ul Get-Member. Obiectele pe care o ieșire de tip cmdlet PowerShell sunt în mare parte tipuri de bază din cadrul .Net, dar puteți crea propriile obiecte dacă trebuie să utilizați o limbă precum C # sau să utilizați tipul PSObject.
Conducta
Există o mulțime de cochilii Linux cu o conductă, permițându-vă să trimiteți textul pe care o comandă iese ca intrare la următoarea comandă în conductă. PowerShell duce acest lucru la nivelul următor, permițându-vă să luați obiectele care ies la ieșire dintr-un cmdlet și să le transmiteți ca intrare în următorul cmdlet din conductă. Trucul este să știe ce tip de obiect se întoarce într-un cmdlet, ceea ce este foarte ușor atunci când se utilizează cmdlet-ul Get-Member.
Get-Service | Get-membru
Din motive care depășesc sfera de aplicare a acestui articol, proprietățile și metodele sunt numite în comun de membri ai clasei, ceea ce explică de ce utilizați cmdlet-ul Get-Member pentru a obține o listă cu toate metodele și proprietățile unui obiect. Totuși, cmdlet-ul Get-Member returnează și o altă informație importantă, tipul de obiect de bază. În captura de ecran de mai sus, putem vedea că Get-Service returnează obiecte de tipul:
System.ServiceProcess.ServiceController
Deoarece PowerShell se ocupă de obiecte și nu de text, nu toate cmdleturile pot fi conectate împreună folosind conducta [1]. Asta înseamnă că trebuie să găsim un cmdlet care caută să accepte un obiect System.ServiceProcess.ServiceController din conducta.
Get-Command -ParameterType System.ServiceProcess.ServiceController
Observați că există un cmdlet numit Stop-Service; să aruncăm o privire la ajutorul pentru asta.
Get-Help -Spune Stop-Service
Se pare că parametrul InputObject ia o serie de obiecte ServiceController ca intrare. De obicei, dacă vedeți un parametru numit InputObject, acesta va accepta intrarea din Pipeline, dar doar pentru a fi sigur că să aruncăm o privire la ajutorul complet pentru acel parametru.
Get-Help -Să-ți dai Stop-Service -Full
Suspiciunile noastre erau corecte. Deci, în acest moment știm următoarele:
- Get-Service returnează obiectele ServiceController
- Stop-Service are un parametru numit InputObject care acceptă unul sau mai mulți ServiceControllers ca intrare.
- Parametrul InputObject acceptă introducerea conductei.
Folosind aceste informații am putea face următoarele:
Get-Service - "Apple Mobile Device" Stop-service
Asta e tot pentru oamenii de această dată. Data viitoare când ne uităm la modul în care putem formata, filtra și compara obiecte din conductă.
Teme pentru acasă
- Citiți pe conducta de obiecte
Dacă aveți întrebări, puteți să-mi trimiteți un tweet @taybgibb sau să lăsați un comentariu.