Geek școală Formatarea învățării, filtrarea și compararea în PowerShell
Î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 anterioare din seria:
- Aflați cum să automatizați Windows cu PowerShell
- Învățarea de a folosi Cmdlets în PowerShell
- Învățați cum să utilizați obiecte în PowerShell
Și stați pe toată săptămâna pentru restul seriei.
Formatarea implicită
Când am început prima oară cu PowerShell, am crezut că totul este magic, dar adevărul este că durează doar puțin timp pentru a înțelege ce se întâmplă sub capota. Același lucru este valabil și pentru sistemul de formatare PowerShell. De fapt, dacă executați cmdlet-ul Get-Service, rezultatul generat vă arată doar 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 integrate afișează ieșirea lor. Pentru a obține o înțelegere, tastați următoarele în coajă și apăsați enter.
notepad C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml
Dacă folosim funcția de Căutare a Notebook-ului, putem trece repede la secțiunea care detaliază ieșirea din cmdlet-ul Get-Service prin căutarea tipului ServiceController.
Deodată, puteți vedea că sub capota PowerShell se formatează orice obiecte din Conductă care sunt de tip ServiceController și se creează un tabel cu trei coloane: Status, Name și DisplayName. Dar dacă tipul cu care vă confruntați nu are o intrare în acel fișier sau alt fișier format pentru asta? Ei bine, este destul de simplu de fapt. Dacă obiectul care iese din conductă 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
- -Table Format
- Format-Wide
Format-Wide ia 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, aceasta implică, de asemenea, 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 -Disponibilitatea proprietății -Coloană 6
Dacă ceva este formatat ca tabelă în mod prestabilit, 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ă-i dăm drumul Format-List.
Get-Process | Format-List
După cum puteți vedea, în listă există numai patru elemente afișate în mod implicit. Pentru a vizualiza toate proprietățile obiectului, puteți folosi un caracter wildcard.
Get-Process | Format-listă-proprietate *
Alternativ, puteți selecta doar proprietățile pe care le doriți.
Get-Process | Format-List-Nume proprietate, id
-Table Format, pe de altă parte, ia datele și o transformă într-o masă. Dat fiind că 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-Process | Format-Nume 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 $ _. Stare -eq "Rularea"
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 de filtrare:
- eq (Equal To)
- neq (nu este egal cu)
- gt (mai mare decât)
- ge (mai mare decât egal)
- (Mai puțin decât)
- le (mai puțin decât sau egal)
- cum ar fi (Match Wild String)
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 timp!