ForEach-Object e Where-Object annidati in PowerShell
-
Usa il cmdlet
Where-Object
in PowerShell -
Usa il cmdlet
ForEach-Object
in PowerShell -
Usa
ForEach-Object
eWhere-Object
annidati in PowerShell -
Usa
ForEach-Object
eWhere-Object
annidati con istruzioniif
in PowerShell - Conclusione

Gli cmdlet Where-Object
e ForEach-Object
di PowerShell sono strumenti indispensabili per filtrare e elaborare i dati in modo sistematico ed efficiente. Sfruttando la potenza di questi cmdlet, gli utenti di PowerShell possono manipolare set di dati con precisione e facilità, eseguendo azioni basate su condizioni specifiche e iterando su collezioni senza sforzo.
Questo articolo chiarisce l’uso di Where-Object
e ForEach-Object
, dimostrando come possano essere impiegati individualmente e insieme per svolgere varie attività. Dal filtrare i servizi di Windows all’eseguire calcoli su dati numerici e anche implementare operazioni annidate per scenari più complessi, questi cmdlet offrono un robusto framework per la manipolazione dei dati negli script PowerShell.
Usa il cmdlet Where-Object
in PowerShell
Il Where-Object
è un cmdlet integrato che filtra l’output del comando e mostra le informazioni che desideri vedere. In generale, Where-Object
funziona come un filtro.
Consente inoltre di creare condizioni che possono restituire vero o falso.
Nell’esempio seguente, troveremo tutti i servizi che girano sul nostro computer in modalità automatico
. Il comando per questo scopo è qualcosa di simile al seguente:
Get-Service | Where-Object -FilterScript { $_.StartType -EQ 'Automatic' }
In questo frammento di codice, iniziamo recuperando una collezione di servizi di Windows utilizzando il cmdlet Get-Service
. Questa collezione viene quindi inoltrata al cmdlet Where-Object
, dove viene applicato uno script di filtro a ciascun oggetto servizio nella pipeline.
All’interno dello script di filtro, valutiamo la proprietà StartType
di ciascun oggetto servizio per determinare se è uguale alla stringa "Automatic"
. Se la proprietà StartType
di un servizio corrisponde a questo criterio, viene passata attraverso la pipeline.
Questo script di filtro seleziona efficacemente solo quei servizi che hanno il loro tipo di avvio impostato su "Automatic"
. Il risultato di questa operazione di filtraggio è un sottoinsieme della collezione di servizi originale, contenente solo i servizi configurati per avviarsi automaticamente.
Dopo aver eseguito la riga di comando sopra, otterrai un output simile a quello qui sotto:
Usa il cmdlet ForEach-Object
in PowerShell
Il ForEach-Object
ti permetterà di eseguire un compito specifico per ciascun oggetto specificato. Nel nostro esempio qui sotto, divideremo ogni oggetto per 1024
.
Il codice per il nostro esempio sarà simile al seguente:
3000, 567980, 112432 | ForEach-Object -Process { $_ / 1024 }
In questo frammento di codice, iteriamo su una collezione di tre numeri: 3000
, 567980
e 112432
utilizzando il cmdlet ForEach-Object
. All’interno del blocco di script, eseguiamo un calcolo su ciascun numero dividendolo per 1024
.
Questo calcolo viene eseguito per ogni numero nella collezione singolarmente. Di conseguenza, otteniamo una nuova collezione contenente i risultati dell’operazione di divisione, dove ciascun numero della collezione originale è stato diviso per 1024
.
Dopo aver eseguito la riga di comando sopra, otterrai un output come mostrato di seguito:
Usa ForEach-Object
e Where-Object
annidati in PowerShell
La combinazione degli cmdlet ForEach-Object
e Where-Object
consente operazioni potenti di manipolazione e filtraggio dei dati. L’approccio annidato, in cui un cmdlet viene utilizzato all’interno dell’ambito di un altro, migliora la capacità di elaborare i dati in modo iterativo e selettivo.
Questo metodo è particolarmente utile quando si lavora con array o collezioni di oggetti e si ha bisogno di eseguire azioni basate su criteri specifici.
Esempio:
$MyArray = ("python", "explorer", "edge")
$MyArray | ForEach-Object { Get-Process | Where-Object ProcessName -EQ $_ | Out-Host }
In questo frammento di codice, $MyArray
contiene un elenco di nomi di processo. Il cmdlet ForEach-Object
itera su ciascun nome di processo nell’array.
All’interno del blocco di script, Get-Process
recupera informazioni su tutti i processi in esecuzione e Where-Object
filtra questi processi in base alla condizione che la loro proprietà ProcessName
corrisponda all’attuale nome del processo ($_
). Gli oggetti processo filtrati vengono quindi inviati in output alla console utilizzando Out-Host
.
Output:
Usa ForEach-Object
e Where-Object
annidati con istruzioni if
in PowerShell
Negli script PowerShell, le istruzioni if
annidate forniscono un modo per applicare logica condizionale all’interno dei cicli e di altre strutture di controllo. Quando combinate con i cmdlet ForEach-Object
e Where-Object
, le istruzioni if
annidate abilitano operazioni di filtraggio e elaborazione dei dati complesse.
Questo metodo offre flessibilità e granularità nella gestione dei dati in base a criteri multipli. È particolarmente utile per scenari in cui è richiesto un controllo dettagliato sulla manipolazione dei dati.
Esempio:
$MyArray = @("Value1", "Value2", "Value3")
$MyArray | ForEach-Object {
if ($_ | Where-Object { $_ -eq "Value1" -or $_ -eq "Value3" }) {
$_ | Out-Host
}
}
In questo frammento di codice, $MyArray
contiene un elenco di valori. Il cmdlet ForEach-Object
itera su ciascun valore nell’array.
All’interno dell’istruzione if
annidata, Where-Object
filtra i valori in base alla condizione che siano uguali a "Value1"
o "Value3"
.
Se la condizione è soddisfatta, il valore viene inviato in output alla console utilizzando Out-Host
.
Output:
Conclusione
Con i suoi cmdlet versatili come Where-Object
e ForEach-Object
, PowerShell consente agli utenti di esercitare capacità intricate di elaborazione dei dati con abilità. Sia che si tratti di selezionare elementi specifici da una collezione, applicare logica condizionale o eseguire attività su ciascun elemento iterativamente, PowerShell fornisce gli strumenti necessari per ottimizzare il lavoro e migliorare la produttività.
Domandando questi cmdlet e comprendendo le loro sfumature, gli utenti possono sfruttare il pieno potenziale di PowerShell per una manipolazione dei dati e compiti di scripting efficienti, sbloccando un mondo di possibilità nell’automazione e nell’amministrazione.
Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.
LinkedIn