If-Koubou

Școala Geek: Învățați cum să utilizați obiecte în PowerShell

Școala Geek: Învățați cum să utilizați obiecte în PowerShell (Cum să)

Înțelegerea obiectelor este unul dintre conceptele fundamentale de a "obține" PowerShell. Alăturați-vă nouă pe măsură ce explorăm obiecte și cum fac PowerShell mai bine decât orice altă colac aflată astăzi.

Asigurați-vă că citiți articolele anterioare din seria:

  • Aflați cum să automatizați Windows cu PowerShell
  • Învățați să utilizați Cmdlets în PowerShell

Și stați liniștit pentru restul seriei toată săptămâna.

Obiecte

Te-ai intrebat vreodata ce plaseaza PowerShell in afara de o cochilie traditionala Linux ca Bash sau chiar de linia de comanda moștenita? 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 la 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 sunt 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ă mici diferențe: 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 potrivit să îl descriem folosind trei proprietăți: Nume serviciu, stare și descriere. De asemenea, trebuie să interacționăm cu serviciul, astfel încât să putem da obiect un început, o metodă Stop ș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 subsecvente 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 pe care le trimiteți câte 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 când utilizați cmdlet-ul Get-Member.

Get-Service | Get-membru

Din motive care depășesc sfera de aplicare a acestui articol, proprietățile și metodele sunt denumite împreună membrii 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-Members 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 să încerce să accepte un obiect System.ServiceProcess.ServiceController din conductă.

Get-Command -ParameterType System.ServiceProcess.ServiceController

Observați că există un cmdlet numit Stop-Service; să aruncăm o privire la ajutorul pentru el.

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 Conductă, dar doar pentru a ne asigura că aruncăm o privire la ajutorul complet pentru acest parametru.

Get-Help -Vă opriți-Service-Întreg

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 vom analiza modul în care putem formata, filtra și compara obiecte din conducte.

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.