19Aug
În această ediție a Școlii Geek, ne uităm la formatarea, filtrarea și compararea obiectelor din conducte.
Asigurați-vă că citiți articolele precedente din seria:
- Aflați cum să automatizați Windows cu PowerShell
- Învățați să utilizați cmdlets în PowerShell
- Învățați cum să utilizați obiecte în PowerShell
Și stați bine reglate pentru restul seriilor toată săptămâna.
Formatare implicită
Când am început prima oară cu PowerShell, am crezut că totul era magic, dar adevărul este că durează doar puțin timp pentru a înțelege ce se întâmplă sub capotă.Același lucru este valabil și pentru sistemul de formatare PowerShell. De fapt, dacă executați cmdlet-ul Get-Service, ieșirea generată vă arată numai 3 proprietăți: Status, Name și DisplayName.
Dar dacă conduceți Get-Service la Get-Member, veți vedea că obiectele ServiceController au mult mai mult decât aceste trei proprietăți, deci ce se întâmplă?
Răspunsul se află într-un fișier ascuns care definește modul în care majoritatea cmdlet-urilor încorporate afișează ieșirea lor. Pentru a obține o înțelegere, tastați următoarele în shell și apăsați enter. Notepad
C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml
Dacă folosim funcția de căutare a Notepad-ului, putem trece repede la secțiunea care detaliază ieșirea din cmdlet-ul Get-Service prin căutarea ServiceControllertip.
Deodată, puteți observa că sub capota PowerShell se formatează orice obiecte din conducte care sunt de tipul ServiceController și se creează un tabel cu trei coloane: Status, Name și DisplayName. Dar dacă tipul de care aveți de-a face nu are o intrare în acel fișier sau alt fișier de format pentru asta? Ei bine, este foarte simplu de fapt. Dacă obiectul care iese din conducte are 5 sau mai multe proprietăți, PowerShell afișează toate proprietățile obiectului într-o listă;dacă are mai puțin de 5 proprietăți, le afișează într-un tabel.
Formatarea datelor
Dacă nu sunteți mulțumit de formatarea implicită a unui obiect sau de tip, puteți rula formatul propriu. Există trei cmdleturi pe care trebuie să le știi pentru a face acest lucru.
- Format-List
- Format-Tabel
- Format-Wide
Format-Wide ia pur și simplu o colecție de obiecte și afișează o singură proprietate a fiecărui obiect.În mod implicit, va căuta o proprietate de nume;dacă obiectele dvs. nu conțin o proprietate de nume, va folosi prima proprietate a obiectului odată ce proprietățile au fost sortate în ordine alfabetică.
Get-Service |
Format-Wide După cum puteți vedea, este implicit, de asemenea, la două coloane, deși puteți specifica atât proprietatea pe care doriți să o utilizați, cât și câte coloane doriți să fie afișate.
Get-Service |Format-Wide -Property DisplayName -Coloana 6
Dacă ceva este formatat ca tabelă în mod implicit, puteți oricând să îl comutați în vizualizarea listei utilizând cmdletul Format-List. Să aruncăm o privire la ieșirea din cmdlet-ul Get-Process.
Această vizualizare tabelară se potrivește foarte bine acestui tip de informații, dar să presupunem că dorim să o vizualizăm în formă de listă.Tot ce trebuie să facem este să-l conducem în Format-List .
Get-ProcessLista de formate
După cum puteți vedea, în listă există doar patru elemente afișate în mod implicit. Pentru a vizualiza toate proprietățile obiectului, puteți utiliza un caracter de tip "wildcard".
Get-ProcessFormat-List-Property *
Alternativ, puteți selecta doar proprietățile dorite.
Get-ProcessFormatul-listă-numele de proprietate, id
format-tabel, pe de altă parte, ia datele și transformă-l într-un tabel. Din moment ce datele noastre din Get-Process sunt deja sub forma unui tabel, putem să le folosim pentru a alege cu ușurință proprietățile pe care le dorim afișate în tabel. Am folosit parametrul AutoSize pentru a face toate datele să se potrivească pe un singur ecran.
Get-ProcessFormatul-nume de tabel, id -AutoSize
Filtrarea și compararea
Unul dintre cele mai bune lucruri despre utilizarea unei conducte bazate pe obiecte este că puteți filtra obiecte din conductă în orice etapă utilizând cmdletul Where-Object.
Get-Service |Unde-Obiect{ $ _. Status -eq "Running"}
Utilizarea obiectului unde este foarte simplu.$ _ reprezintă obiectul curent al conductei, din care puteți alege o proprietate pe care doriți să filtrați. Aici s-au păstrat numai obiecte în care proprietatea Status este egală cu Running. Există câțiva operatori de comparație pe care le puteți utiliza în blocul de script-uri de filtrare:
- eq( Equal To)
- neq( Nu este egal cu)
- gt( mai mare decât
- ge)
- lt( Less Than)
- le( mai puțin decât sau egal cu)
- ( Wildcard String Match)
O listă completă și mai multe informații pot fi vizualizate în fișierul de ajutor conceptual about_comparison, totuși nu este nevoie de ceva timp să vă obișnuiți cu sintaxa Where-Object. Asta e tot pentru acest moment!