ForEach-Object e Where-Object annidati in PowerShell

  1. Usa il cmdlet Where-Object in PowerShell
  2. Usa il cmdlet ForEach-Object in PowerShell
  3. Usa ForEach-Object e Where-Object annidati in PowerShell
  4. Usa ForEach-Object e Where-Object annidati con istruzioni if in PowerShell
  5. Conclusione
ForEach-Object e Where-Object annidati in PowerShell

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:

powershell nested foreach-object where-object - output 1

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:

powershell foreach-object nidificato where-object - output 2

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:

powershell foreach-object annidato where-object - output 3

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:

powershell foreach-oggetto annidato where-oggetto - output 4

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.

Ti piacciono i nostri tutorial? Iscriviti a DelftStack su YouTube per aiutarci a creare altre guide video di alta qualità. Iscriviti
MD Aminul Islam avatar MD Aminul Islam avatar

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

Articolo correlato - PowerShell Object