If-Koubou

Școala Geek: Formatarea învățării, filtrarea și compararea în PowerShell

Școala Geek: Formatarea învățării, filtrarea și compararea în PowerShell (Cum să)

Î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:

  • 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 liniștit pentru restul seriei toată săptămâna.

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, 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.

Formatarea datelor dvs.

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-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ă 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

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 $ _. 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:

  • 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 cu)
  • 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 moment!