Esaminare e usare il ciclo ForEach negli script di Windows PowerShell
Quando si esegue l'invio tramite pipe, i comandi nella pipeline vengono applicati a ogni oggetto. In alcuni casi, potrebbe essere necessario usare il cmdlet ForEach-Object per elaborare i dati nella pipeline. Quando si archiviano i dati in una matrice, il costrutto ForEach consente di elaborare ogni elemento nella matrice.
Il costrutto ForEach usa la sintassi seguente:
ForEach ($user in $users) {
Set-ADUser $user -Department "Marketing"
}
Nell'esempio precedente è presente una matrice denominata $users
che contiene oggetti utente di Active Directory Domain Services. Il costrutto ForEach elabora i comandi di Windows PowerShell tra le parentesi graffe una volta per ogni oggetto. Quando i comandi vengono elaborati, $user
è la variabile che contiene ogni elemento della matrice. Nella prima iterazione $user
contiene $users[0]
e nella seconda interazione $user
contiene $user[1]
. Il ciclo continua fino a quando tutti gli elementi della matrice non sono stati elaborati una volta.
In uno script, il costrutto ForEach è il modo più comune per elaborare gli elementi inseriti in una matrice. È facile da usare perché non è necessario conoscere il numero di elementi da elaborare.
Nell'esempio precedente è presente un solo comando tra parentesi graffe, ma è possibile aggiungere molti comandi, che verranno elaborati per ogni ciclo. Il rientro dei comandi tra le parentesi graffe è una convenzione per semplificare la revisione dello script. Il rientro non è un requisito tecnico, ma è una procedura consigliata.
La denominazione delle variabili nel ciclo ForEach deve essere significativa. Nella maggior parte dei casi, si identifica chiaramente la variabile usata nel ciclo come singola istanza della matrice. Per una matrice denominata $users
, ad esempio, la variabile usata nel ciclo può essere $user
. È possibile notare esempi di variabili con una singola lettera corrispondente alla lettera iniziale della matrice. Ciò tuttavia è appropriato solo nel codice semplice, dove è facile stabilire la correlazione.
Prestazioni parallele
In PowerShell 7 il parametro -Parallel è stato aggiunto al cmdlet ForEach-Object . Ciò consente alla pipeline di elaborare più oggetti contemporaneamente. L'elaborazione simultanea di più oggetti può offrire prestazioni migliori rispetto a un ciclo ForEach standard. È consigliabile considerare questo aspetto se si usa PowerShell 7. Nell'esempio seguente viene illustrato come usare ForEach-Object con il parametro -Parallel .
$users | ForEach-Object -Parallel { Set-ADUser $user -Department "Marketing" }
Per impostazione predefinita, il parametro -Parallel consente di elaborare cinque elementi alla volta. È possibile modificarlo in modo che sia più grande o più piccolo usando il parametro -ThrottleLimit .