În această ediție a Școlii Geek, ne uităm la formatarea, filtrarea și compararea obiectelor în Pipe.
Asigurați-vă că citiți articolele anterioare din seria:
Și stați liniștit pentru restul seriei toată săptămâna.
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, 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 integrate afișează ieșirea lor. Pentru a obține o înțelegere, tastați următoarele în shell și apăsați enter.
Notebook-ul C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml
Dacă folosim funcția de căutare a Notepad-ului, putem să treceți rapid la secțiunea care detaliază ieșirea din cmdlet-ul Get-Service prin căutarea tipului ServiceController.
Dintr-o dată, puteți observa 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 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.
Dacă nu sunteți mulțumit de formatul implicit al unui obiect sau al unui tip, puteți rula formatul propriu. Există trei cmdleturi pe care trebuie să le știi pentru a face acest lucru.
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ă sunt afișate numai patru elemente în mod implicit. Pentru a vizualiza toate proprietățile obiectului, puteți utiliza un caracter de tip "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
Format-Table, 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
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 $ _. Starea -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:
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!