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

Sommario:

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

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

Video: Geek School: apprendimento della formattazione, del filtraggio e del confronto in PowerShell
Video: PowerShell Remoting - YouTube 2024, Aprile
Anonim
In questa edizione di Geek School, esaminiamo la formattazione, il filtraggio e il confronto degli oggetti nella pipeline.
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 a utilizzare i cmdlet in PowerShell
  • Apprendimento Come utilizzare gli oggetti in PowerShell

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

Formattazione predefinita

Quando ho iniziato per la prima volta 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?
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.
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.

notepad C:WindowsSystem32WindowsPowerShellv1.0DotNetTypes.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 tipo ServiceController.

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, allora è abbastanza semplice in realtà. 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.
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, allora è abbastanza semplice in realtà. 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.

Formattare i tuoi 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
Image
Image

Format-Wide prende semplicemente una collezione di oggetti e visualizza una singola proprietà di ciascun 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 puoi vedere, anche il valore predefinito è di due colonne, sebbene sia possibile specificare sia la proprietà che si desidera utilizzare, sia il numero di colonne che si desidera visualizzare.
Come puoi vedere, anche il valore predefinito è di due colonne, 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.
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.
Image
Image

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

Get-Process | Format-List

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

Get-Process | Format-List –Property *

In alternativa, puoi selezionare solo le proprietà che desideri.
In alternativa, puoi selezionare solo le proprietà che desideri.

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

Image
Image

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

Image
Image

Filtro 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”}

Usare 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:
Usare 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 di o uguale a)
  • lt (meno di)
  • le (minore o uguale a)
  • Mi piace (Wildcard String Match)

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!

Consigliato: