în PowerShell, de multe ori rulez comenzi care returnează matrice pe care trebuie să le filtrez. Odată ce am filtrat obiect caut, am nevoie pentru a citi o proprietate de pe acel obiect. Există câteva modalități de a face acest lucru. Aici sunt trei.
acestea sunt, de asemenea, exemple bune dacă sunteți nou la PowerShell și încercați să treceți de la mentalitatea Linux de parsare a șirurilor la mentalitatea PowerShell de manipulare a obiectelor.,
Pentru aceste exemple vom utiliza o matrice filtrat din Get-Process
:
Select-Object
citește proprietăți de obiecte. Putem conducta este obiect am gasit:
Get-Process | Where-Object ProcessName -Match "update" | Select-Object cpu CPU ---380.761615
În acest caz, Where-Object
returnează un obiect și Select-Object
citește proprietate, dar aceasta încă funcționează dacă ne-am potrivi mai multe procese. Apoi, Where-Object
returnează un tablou care este despachetat de conducta PowerShell și trimis la Select-Object
unul câte unul.,
acesta este de fapt un filtru de proprietate. Încă returnează o serie de obiecte de proces, dar acele obiecte au doar o proprietate pe care ați selectat-o. Putem vedea acest lucru cuGet-Member
:
patru metode, dar numai o proprietate.
Metoda 2: Subexpresie
dacă capturăm ieșirea comenzii noastre de potrivire într-o subexpresie, putem accesa proprietățile obiectului folosind notație punctată așa cum am face cu orice variabilă:
$(Get-Process | Where-Object ProcessName -Match "update").cpu380.761615
Acest lucru funcționează și dacă potrivirea noastră a returnat mai multe obiecte., Subexpresia va conține o matrice și PowerShell va primi automat proprietatea cpu de la fiecare obiect din acea matrice.
spre deosebire de filtrul Select-Object
, acesta nu returnează obiectele de proces cu o proprietate cpu. În schimb, se revine o dublă (număr) cu valoarea efectivă:
Metoda 3: Bucla
Ca orice ieșire, putem conducta de meciul nostru într-un ForEach-Object
bucla și de a folosi $_
variabile pentru a accesa proprietățile fiecărui element bucla vede:
Get-Process | Where-Object ProcessName -Match "update" | ForEach-Object {$_.cpu}381.625785
bucla, desigur, va lucra pe mai multe obiecte.,
la fel ca subexpresia, aceasta returnează valoarea reală în locul unui obiect cu o proprietate.
automatizarea fericit!
Adam
aveți nevoie de mai mult decât acest articol? Sunt disponibil să mă consult.de asemenea, ați putea dori să consultați aceste articole similare:
- cum să utilizați Out-String în PowerShell: nu
- Headless PowerShell DSC Script
- PowerShell Install-Module: utilizați Install-Package în loc