19Aug

Geek School: apprendimento della formattazione, del filtraggio e del confronto in PowerShell

In questa edizione di Geek School, esaminiamo la formattazione, il filtraggio e il confronto degli oggetti nella pipeline.

Assicurati di leggere gli articoli precedenti della serie:

  • Scopri come automatizzare Windows con PowerShell
  • Imparare ad usare i cmdlet in PowerShell
  • Imparare come utilizzare gli oggetti in PowerShell

E rimanere sintonizzati per il resto della serie per tutta la settimana.

Formattazione predefinita

Quando ho iniziato con PowerShell, ho pensato che tutto fosse magico, ma la verità è che ci vuole solo un po 'di tempo per capire cosa sta succedendo sotto il cofano. Lo stesso vale per il sistema di formattazione di PowerShell. Infatti, se si esegue il cmdlet Get-Service, l'output generato mostra solo 3 proprietà: Status, Name e DisplayName.

Ma se si canalizza Get-Service su Get-Member, si vede che gli oggetti ServiceController hanno molto più di queste tre proprietà, quindi cosa sta succedendo?

La risposta si trova all'interno di un file nascosto che definisce in che modo la maggior parte dei cmdlet incorporati mostra il loro output. Per ottenere una comprensione, digita quanto segue nella shell e premi invio. Blocco note

C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml

Se utilizziamo la funzione Trova del blocco note, possiamo saltare rapidamente alla sezione che descrive l'output del cmdlet Get-Service cercando il ServiceControllergenere.

All'improvviso, è possibile vedere che sotto la cappa PowerShell sta formattando tutti gli oggetti nella pipeline che sono del tipo ServiceController e creando una tabella con tre colonne: Status, Name e DisplayName. Ma cosa succede se il tipo con cui si ha a che fare non ha una voce in quel file, o qualsiasi altro file di formato per quella materia? Bene, in realtà è abbastanza semplice. Se l'oggetto che esce dalla pipeline ha 5 o più proprietà, PowerShell visualizza tutte le proprietà dell'oggetto in una lista;se ha meno di 5 proprietà, le visualizza in una tabella.

Formattazione dei dati

Se non si è soddisfatti della formattazione predefinita di un oggetto o di un tipo, è possibile eseguire il rollover della propria formattazione. Ci sono tre cmdlet che devi sapere per farlo.

  • Format-List
  • Format-Table
  • Format-Wide

Format-Wide prende semplicemente una collezione di oggetti e visualizza una singola proprietà di ogni oggetto. Di default, cercherà una proprietà name;se i tuoi oggetti non contengono una proprietà name, userà la prima proprietà dell'oggetto una volta che le proprietà sono state ordinate alfabeticamente.

Get-Service |Format-Wide

Come si può vedere, ha anche due colonne predefinite, sebbene sia possibile specificare sia la proprietà che si desidera utilizzare, sia il numero di colonne che si desidera visualizzare.

Get-Service |Format-Wide -Property DisplayName -Column 6

Se qualcosa è formattato come tabella per impostazione predefinita, è sempre possibile passare alla visualizzazione elenco utilizzando il cmdlet Format-List. Diamo un'occhiata all'output del cmdlet Get-Process.

Questa visualizzazione tabulare si adatta molto bene a questo tipo di informazioni, ma facciamo finta di volerlo visualizzare in forma di elenco. Tutto quello che dobbiamo fare è collegarlo a Format-List .

Get-Process |Format-List

Come potete vedere ci sono solo quattro elementi visualizzati nell'elenco per impostazione predefinita. Per visualizzare tutte le proprietà dell'oggetto, è possibile utilizzare un carattere jolly.

Get-Process |Format-List -Property *

In alternativa, è possibile selezionare solo le proprietà desiderate.

Get-Process |Format-List -Property name, id

Format-Table, d'altra parte, prende i dati e li trasforma in una tabella. Poiché i nostri dati di Get-Process sono già sotto forma di tabella, possiamo usarli per scegliere facilmente le proprietà che vogliamo vengano visualizzate nella tabella. Ho usato il parametro AutoSize per far rientrare tutti i dati su una singola schermata.

Get-Process |Format-Table name, id -AutoSize

Filtering e confronto

Uno degli aspetti migliori dell'utilizzo di una pipeline basata su oggetti è che è possibile filtrare gli oggetti fuori dalla pipeline in qualsiasi momento utilizzando il cmdlet Where-Object.

Get-Service |Where-Object{ $ _. Status -eq "Running"}

Utilizzo di dove l'oggetto è in realtà molto semplice.$ _ rappresenta l'oggetto pipeline corrente dal quale è possibile scegliere una proprietà da filtrare. Qui, stavano mantenendo solo oggetti in cui la proprietà Status è uguale a Running. Esistono alcuni operatori di confronto che è possibile utilizzare nel blocco di script di filtro:

  • eq( uguale a)
  • neq( non uguale a)
  • gt( maggiore di)
  • ge( maggiore o uguale a)
  • lt( minore di)
  • le( meno di o uguale a)
  • come( stringa di caratteri jolly)

Un elenco completo e ulteriori informazioni possono essere visualizzati nel file della guida concettuale about_comparison, tuttavia ci vuole un po 'di tempo per abituarsi alla sintassi Where-Obeject. Questo è tutto per questo tempo!