Il cmdlet Select-Object di PowerShell ti consente di selezionare agilmente oggetti e proprietà da un gruppo di oggetti di input. Ma a volte devi semplicemente sapere di più. ExpandProperty è uno switch per Select-Object che espande i dettagli su una particolare proprietà.
Scopri il potere dello switch PowerShell Expand Property (-ExpandProperty
) in questo tutorial guidato da esempi.
Prerequisiti
Questo tutorial sarà una dimostrazione pratica. Se desideri seguirci, tutto ciò di cui hai bisogno è una macchina Windows con PowerShell 5.1 e versioni successive. Questo articolo utilizza una macchina Windows 10 con PowerShell 5.1.
Estrarre i valori degli oggetti di proprietà con PowerShell Expand Property
Accedi alla tua macchina Windows e avvia un terminale PowerShell. In questa sezione, ti familiarizzerai con il cmdlet Select-Object
e il suo switch ExpandProperty
.
1. Esegui il cmdlet Get-Service per ottenere un elenco di tutti i servizi sul tuo sistema. Inoltra l’output al cmdlet Select-Object per selezionare e visualizzare solo la proprietà del nome di ogni oggetto di servizio, come mostrato di seguito.
Dovresti ora vedere una singola colonna di oggetti che rappresentano un elenco di nomi di servizi sul tuo sistema, come nella schermata troncata qui sotto.

2. Esegui il cmdlet Get-Member alla fine del precedente pipeline per confermare il tipo di oggetti restituiti da select-object come di seguito. Conoscere il tipo di oggetto aiuta a scrivere funzioni o cmdlet per estendere le tue pipeline.
Consulta lo screenshot qui sotto e noterai che, nonostante lo switch -Property produca ciò che sembra essere un elenco di stringhe, queste sono l’elenco Selezionato degli oggetti System.ServiceProcess.ServiceController.

3. Sostituisci il cmdlet Get-Members con mkdir per creare automaticamente una cartella per ogni servizio. Lo switch -first 5 limita il numero di oggetti da restituire. A sua volta, la funzione mkdir creerà solo cinque cartelle basate sugli oggetti nella pipeline.
Dovresti vedere un output simile allo screenshot qui sotto, che indica il tentativo riuscito.

4. Rimuovi le cartelle sostituendo mkdir con rmdir come nello snippet qui sotto. Attiva lo switch -Verbose per mostrare output dettagliati nel tuo terminale.
Il cmdlet rmdir si aspetta delle stringhe e non può gestire la rappresentazione hashtable degli oggetti ServiceController. Il tuo tentativo dovrebbe fallire con diversi errori, come nello screenshot qui sotto.

5. Cambia l’interruttore -Property con l’interruttore -ExpandProperty come nello snippet seguente. Facendo ciò ti permette di ottenere il valore di una proprietà come stringa quando tutto ciò di cui hai bisogno è una stringa.
Unito a rmdir, dovresti vedere che il tuo tentativo di rimuovere automaticamente le cartelle avviene senza errori, come nello screenshot qui sotto.

Creare un Set di Oggetti Selezionati con Proprietà Specifiche
Per abbreviare gli snippet di codice nelle sezioni, crea una variabile per i primi 20 servizi sulla tua macchina come segue.
Esegui il comando Get-Service
, seleziona i primi 20
oggetti tramite il cmdlet Select-Object
, e memorizza gli oggetti in una variabile chiamata $testServices
. Seleziona solo le proprietà Name
, Status
, e DependentServices
come segue.
L’interruttore PowerShell Expand Property può espandere solo una proprietà alla volta, a differenza dell’interruttore Property, che può selezionare più di una proprietà contemporaneamente.
Esegui il nome della variabile, `$testServices`, per visualizzare la struttura dei suoi contenuti.
Dovresti vedere una tabella che mostra le proprietà dei servizi che hai selezionato, simile allo screenshot qui sotto.

Espandendo una Proprietà di Collezione con PowerShell Espandi Proprietà
A PowerShell object can have properties that are collections of objects, also known as collection properties. In this section, you will learn how to use PowerShell Expand Property to expand a collection property to view its members’ properties.
Esegui il cmdlet Select-Object
sulla variabile $testServices
ed espandi la proprietà DependentServices
di ogni servizio.
Dato che DependentServices
è una proprietà di collezione, l’output è una lista dei servizi in tutte le collezioni popolate, come mostrato di seguito. Nota i duplicati nella lista a causa della concatenazione dei risultati dal DependentServices
espanso.

Combinazione di Proprietà con PowerShell Espandi Proprietà per Output Categorizzato
Ora hai una lista di servizi dipendenti, ma come fai a sapere da quale servizio dipendono? In questa sezione, imparerai a utilizzare lo switch -Property
per categorizzare una proprietà espansa.
Esegui il comando qui sotto per categorizzare le proprietà DependentServices
per Name
.
Dato che i servizi dipendenti hanno già una proprietà Name
, lo step di categorizzazione fallisce, come mostrato di seguito.
L’errore qui sotto ti informa che la lista iniziale di servizi (in $testServices) ha già una proprietà Nome in conflitto con una proprietà Nome nella proprietà DependentServices espansa.

Un workaround consiste nel creare Proprietà Calcolate per rinominare la proprietà identificatore come segue.
Salva l’output del comando precedente modificato per specificare una proprietà calcolata chiamata Dipende Da come la proprietà identificatore in una variabile chiamata $depServ. Dipende Da conterrà il valore Nome per ogni servizio in $testService.
Il nome della proprietà, Dipende Da
, è stato scelto arbitrariamente in questo tutorial e può essere qualsiasi espressione a tua scelta.
Passa l’oggetto in $depServ
attraverso Select-Object
per selezionare le proprietà del servizio dipendente Nome
, Stato
, e Dipende Da
.
Ora puoi capire quali servizi dipendono dai servizi in $testServices
, come mostrato di seguito.

Combina Format-List con PowerShell Expand Property per la Verbosità
PowerShell potrebbe limitare quali proprietà dell’oggetto mostrare, specialmente in output tabellare, e lo switch -ExpandProperty
potrebbe avere lo stesso problema. Potresti mostrare le proprietà espandibili in un elenco invece che come soluzione alternativa.
Esegui il cmdlet Get-Process
di seguito per recuperare tutti i moduli
che il processo explorer
utilizza. Attiva lo switch -ExpandProperty
per mostrare le proprietà dei moduli.
L’output sullo schermo dovrebbe assomigliare alla seguente schermata, automaticamente troncato per mostrare solo tre proprietà.

Pipea gli oggetti al cmdlet Format-List
per visualizzare tutti i valori degli oggetti modulo in un elenco più gestibile.
Come mostrato di seguito, l’output elenca tutte le proprietà e i loro valori. Puoi ulteriormente salvare i dati in un file o passarli a un altro cmdlet per ulteriori elaborazioni.

Conclusion
Avendo raggiunto con successo questo punto, hai visto come trarre beneficio dallo switch di proprietà di espansione di PowerShell (-ExpandProperty) del cmdlet Select-Object. PowerShell offre una serie di utili cmdlet per molte attività comuni. Puoi arricchire le tue nuove conoscenze imparando come visualizzare rapidamente i file con PowerShell Cat.
Source:
https://adamtheautomator.com/powershell-expand-property/