In questo articolo, esamineremo i cicli For di PowerShell, i cicli While, i cicli Do-While e i cicli Do-Until. Spiegherò come sono costruiti i cicli PowerShell e come definire le condizioni per entrare o uscire da un ciclo.
Ciclo For di PowerShell
Il ciclo For è un ciclo di conteggio, ed è principalmente usato quando è necessario ripetere un’attività un certo numero di volte, processare una collezione o specificare elementi tramite un numero di indice. Si ripete finché la condizione di test è valutata come true ed esce quando è false.

La sintassi per un ciclo For è la seguente:
for (<Init>; <Condition>; <Repeat>) { <Script Block> }
- Il blocco <Init> esegue un comando o un insieme di comandi prima che il ciclo inizi. Solitamente, è il luogo in cui si inizializza la variabile di conteggio.
- Nella sezione <Condition>, si valuta il test condizionale. Se è true, si entra nel ciclo ed esegue i comandi nel blocco di script. Poi, la condizione viene valutata nuovamente fino a quando non risulta false.
- Il segnaposto <Repeat> esegue uno o più comandi, separati da virgole in ogni iterazione del ciclo. Solitamente, viene usato per modificare la variabile di conteggio.
Se desideri ripetere una specifica operazione cinque volte, utilizza il seguente esempio:
Scopri quali dati sensibili sono memorizzati dove, valuta il rischio associato ad essi e implementa misure di protezione dei dati basate su policy con DataSecurity Plus, il software di protezione dei dati di ManageEngine. Inizia oggi stesso con una prova gratuita completamente funzionale di 30 giorni.
for ($var = 1; $var -le 5; $var++) { Write-Host The value of Var is: $var } Write-Host End of for loop.

Qui, la variabile viene inizializzata con un valore di 1, che è inferiore a 5, quindi entri nel ciclo ed esegui il blocco di script. Ad ogni iterazione, il valore della variabile viene incrementato di 1 e valutato rispetto alla condizione fino a quando il risultato è false.
Poiché la condizione viene valutata all’inizio, se il risultato è false, il blocco di comando non verrà eseguito:
for ($var = 6; $var -le 5; $var++) { Write-Host The value of Var is: $var } Write-Host End of for loop.

Se necessario, puoi utilizzare operatori logici per specificare ulteriori condizioni. In questo caso, abbiamo aggiunto condizioni multiple. E poiché l’operatore logico -and restituisce true solo quando entrambe le condizioni sono true, il ciclo si interrompe quando l’espressione $var -ne 3 raggiunge uno stato false.
for ($var = 1; $var -le 5 -and $var -ne 3; $var++) { Write-Host The value of Var is: $var } Write-Host End of for loop.

Come già detto, puoi eseguire uno o più comandi nei segnaposto <Init> e <Repeat>. Nell’esempio qui sotto, abbiamo una variabile $var1 con un valore iniziale di 1, che incrementa, e il suo valore viene valutato per verificare se è minore o uguale a 5.
Tuttavia, abbiamo anche una seconda variabile, $var2. Ha un valore iniziale di 5, che viene decrementato ma non valutato come parte della condizione.
for (($var1 = 1), ($var2 = 5); $var1 -le 5; ($var1++), ($var2--)) { Write-Host The value of Var1 is: $var1 Write-Host The value of Var2 is: $var2 } Write-Host End of for loop.

Come definire le condizioni del ciclo PowerShell
In PowerShell, i comandi vengono eseguiti in sequenza. Ma a volte potresti dover ripetere un comando o un insieme di comandi fino a quando non viene soddisfatta una determinata condizione. Questo è chiamato un loop.
Per definire le condizioni per entrare o uscire da un ciclo in PowerShell, è necessario utilizzare operatori di confronto. Ti permetteranno di confrontare valori o trovare un valore che corrisponda a un determinato modello. Il risultato è un valore Booleano ( true o false), che viene valutato dalla logica del ciclo.
Puoi utilizzare gli operatori di confronto per confrontare i valori numerici:
Operation | Result |
2 -eq 2 | True |
2 -eq 5 | False |
3 -gt 7 | True |
5 -lt 3 | False |
Puoi anche confrontare i valori delle stringhe con gli operatori di confronto:
Scopri quali dati sensibili sono archiviati e dove, valuta il rischio associato ad essi e implementa misure di protezione dei dati basate su policy con DataSecurity Plus, il software di protezione dei dati di ManageEngine. Inizia oggi stesso con una versione di prova gratuita e completamente funzionale di 30 giorni.
Operation | Result |
‘PowerShell’ -eq ‘powershell’ | True |
‘PowerShell’ -eq ‘cmd’ | False |
‘PowerShell’ -like ‘power*’ | True |
‘PowerShell’ -notlike ‘*shell’ | False |
Ciclo Foreach di PowerShell
Il ciclo Foreach viene utilizzato per iterare attraverso gli elementi di una collezione. In questo scenario, non si ha una condizione da valutare, ma il ciclo si ripete finché tutti gli elementi nella collezione non sono stati processati.
<Figure Foreach_Diagram.png> The syntax for a Foreach loop is the following: foreach ($<item> in $<collection) { <Script Block> }
Qui, si inizia con l’istruzione foreach, seguita da parentesi con una variabile e una collezione da iterare. Poi viene eseguito il blocco di script. La variabile viene creata automaticamente e le viene assegnato un valore dal vettore prima di ogni esecuzione del ciclo.
Di nuovo, per eseguire il ciclo cinque volte, sarà necessaria una collezione con cinque elementi. In questo caso, saranno i valori interi da 1 a 5:
$collection = 1..5 foreach ($item in $collection) { Write-Host The value of Item is: $item } Write-Host End of foreach loop

La variabile viene inizializzata con il primo valore della collezione, che è 1, quindi viene eseguito il blocco di script. Alla successiva iterazione, la variabile viene assegnata con il successivo elemento nell’array, che è 2. Il blocco di script verrà processato nuovamente fino a quando tutti gli elementi nella collezione non saranno stati processati.
Per esempio, se si desidera elaborare i primi cinque servizi che lavorano sul computer, il ciclo apparirà come segue:
foreach ($service in (Get-Service | Select-Object -First 5)) { Write-Host Service name is: $service.name and status is $service.status }

È importante capire che c’è una differenza tra il ciclo Foreach e il comando Foreach-Object. È facile confonderli. Un ciclo Foreach inizia sempre con un’istruzione Foreach, mentre il comando Foreach-Object seguirà un comando con un pipeline in quanto processa gli oggetti inviati attraverso di essa.
Ciclo While di PowerShell
Lo While statement in PowerShell viene utilizzato per creare un ciclo che esegue un comando o un insieme di comandi se la condizione si valuta a true. Controlla la condizione prima di eseguire il blocco di script. Finché la condizione è true, PowerShell eseguirà il blocco di script fino a quando la condizione non restituirà false.

La sintassi per un ciclo while è la seguente:
while (<Condition>){<Script Block>}
Per esempio, se si ha una variabile chiamata var con un valore iniziale di 1 e si desidera ripetere il ciclo cinque volte, il ciclo dovrebbe seguire questa struttura:
Scopri quali dati sensibili sono memorizzati dove, valuta il rischio ad essi associato e implementa misure di protezione dei dati basate su policy con DataSecurity Plus, il software di protezione dei dati di ManageEngine. Inizia oggi stesso con una versione di prova completamente funzionale gratuita di 30 giorni.
$var = 1 while ($var -le 5) { Write-Host The value of Var is: $var $var++ } Write-Host End of While loop.

Nell’esempio sopra, la variabile viene inizializzata al di fuori del ciclo e incrementata nel blocco di script. Il cmdlet Write-Host viene utilizzato per visualizzare il valore della variabile in ogni ciclo del ciclo.
È importante notare che se la condizione è inizialmente false, allora il loop non verrà attivato. Nel nostro esempio, se avessimo un valore per la variabile (var = 6), il comando di loop non avrebbe funzionato affatto e il blocco di script non sarebbe stato eseguito.
$var = 6 while ($var -le 5) { Write-Host The value of Var is: $var $var++ } Write-Host End of While loop.

Puoi utilizzare condizioni più complesse utilizzando operatori logici. Ad esempio, se desideri che la variabile sia inferiore a 5 e diversa da 3, il loop apparirebbe così:
$var = 1 while ($var -le 5 -and $var -ne 3) { Write-Host The value of Var is: $var $var++ } Write-Host End of While loop.

Come già accennato, quando si utilizza l’operatore logico -and, il risultato è true solo quando entrambi i test condizionali sono valutati come true. In questo caso, quando alla variabile viene assegnato il valore 3, la seconda condizione diventa false: ciò porta a un risultato false, fermando il loop.
Loop Do-While di PowerShell
A Do-While loop is a variant of the While loop, and the main difference is that the script block is executed before the condition is checked. This means that even if the start condition is false, the script block will be executed at least once.

La sintassi per un loop Do-While è la seguente:
do { <script block> } while (<condition>)
Quindi, se utilizzassimo lo stesso esempio di prima, il codice sarebbe simile a questo:
$var = 1 do { Write-Host The value of Var is: $var $var++ } while ($var -le 5) Write-Host End of Do-While loop.

Eseguiamo un loop Do-While con un valore per la variabile var = 6. Qui, il loop verrà comunque eseguito una volta prima di verificare che la condizione fosse false.
$var = 6 do { Write-Host The value of Var is: $var $var++ } while ($var -le 5) Write-Host End of Do-While loop.

Anche l’uso degli operatori logici è possibile. Se utilizziamo lo stesso esempio di prima, vedrai che il loop si interrompe quando il valore della variabile è 3 perché volevamo che la variabile fosse inferiore a 5 e diversa da 3:
Conoscere quali dati sensibili sono memorizzati dove, valutare il rischio associato ad essi e implementare misure di protezione dei dati basate su politiche con DataSecurity Plus, il software di protezione dei dati di ManageEngine. Inizia oggi stesso con una prova gratuita di 30 giorni completamente funzionale.
$var = 1 do { Write-Host The value of Var is: $var $var++ } while ($var -le 5 -and $var -ne 3) Write-Host End of Do-While loop.

PowerShell Do-Until loop
Il Do-Until loop funziona allo stesso modo del Do-While loop: esegue prima il blocco di script e poi valuta la condizione. La differenza qui è che mentre il Do-While loop entra nel loop con una condizione vera, il Do-Until loop cerca una condizione falsa per entrare nel loop.

La sintassi per un Do-Until loop è la seguente:
do { <script block> } until (<condition>)
Come vedi, la struttura sembra quasi identica a un Do-While loop. Tuttavia, vediamo cosa accadrebbe se continuassimo a utilizzare il nostro esempio precedente:
$var = 1 do { Write-Host The value of Var is: $var $var++ } until ($var -le 5) Write-Host End of Do-Until loop.

Poiché il test condizionale risulta vero, il Do-Until loop non viene attivato perché abbiamo bisogno di un risultato falso per entrare nel loop. In questo caso, se si desidera ripetere il loop 5 volte, l’operatore logico deve essere cambiato in maggiore di (-gt), che fornirà un risultato falso per le prime 5 iterazioni:
$var = 1 do { Write-Host The value of Var is: $var $var++ } until ($var -gt 5) Write-Host End of Do-Until loop.

Ancora una volta, poiché abbiamo bisogno che la condizione iniziale sia falsa per entrare e rimanere nel loop, ciò potrebbe influire anche sugli operatori logici se dovessimo definire un’espressione più complessa.
Nell’esempio seguente, dobbiamo utilizzare l’operatore -or affinché il ciclo si ripeta finché la variabile non è maggiore di 5 (risultato falso richiesto) o pari a 3. Non avremmo potuto utilizzare l’operatore -and, che avrebbe richiesto che la variabile fosse contemporaneamente maggiore di 5 e uguale a 3, poiché avrebbe provocato un ciclo infinito.
$var = 1 do { Write-Host The value of Var is: $var $var++ } until ($var -gt 5 -or $var -eq 3) Write-Host End of Do-Until loop.

Come controllare i cicli in PowerShell
Puoi controllare il flusso dell’esecuzione in un ciclo utilizzando parole chiave per interrompere il ciclo senza valutare la condizione o saltare l’iterazione corrente del ciclo. Anche se queste parole chiave possono essere utili a volte, non sono sempre raccomandate poiché possono rendere lo script più difficile da leggere.
Dichiarazione break
Il break interrompe ed esce immediatamente dal ciclo corrente senza eseguire il resto del codice nel blocco di script del ciclo, e senza valutare la condizione specificata. Questo consente a PowerShell di continuare ad eseguire il resto del codice.
La parola chiave break si comporta allo stesso modo indipendentemente dal tipo di ciclo utilizzato. Utilizzando uno degli esempi sopra, conteremo da 1 a 5 ed usciremo dal ciclo se la variabile di conteggio è pari a tre. Ma questa volta, aggiungeremo un break anziché utilizzare gli operatori logici nella condizione di test.
Scopri quali dati sensibili sono archiviati dove, valuta il rischio ad essi associato e implementa misure di protezione dei dati basate su policy con DataSecurity Plus, il software di protezione dei dati di ManageEngine. Inizia oggi stesso con una versione di prova completamente funzionale gratuita di 30 giorni.
Per fare ciò, verrà utilizzato l’istruzione if statement per definire i criteri di uscita.
For ($var = 1; $var -le 5; $var++) { if ($var -eq 3) {break} Write-Host The value of Var is: $var } Write-Host End of for loop.

Quando il valore della variabile di conteggio è uguale a 3, l’istruzione if viene attivata ed eseguito il break. Poiché il break viene posizionato prima del comando Write-Host nel blocco di script, quest’ultimo non verrà elaborato. Il ciclo si interrompe e lo script continua ad eseguire il codice rimanente.
L’istruzione continue
L’istruzione continue ti consente di saltare la parte restante del codice, riportandoti all’inizio del ciclo senza uscirne.
Come nell’esempio precedente, verrà utilizzato un ciclo For, ma questa volta invece di uscire dal ciclo quando la variabile di conteggio raggiunge 3, PowerShell salterà il codice rimanente per l’iterazione corrente e procederà con il ciclo fino a quando il test condizionale non sarà falso.
for ($var = 1; $var -le 5; $var++) { if ($var -eq 3) {Continue} Write-Host The value of Var is: $var } Write-Host End of for loop.

Come potreste aver notato, quando il valore della variabile è uguale a 3, viene attivata la clausola if, eseguendo l’istruzione continue. Quindi salta il resto del codice all’interno del ciclo senza interromperlo.
Conclusione
PowerShell supporta vari tipi di cicli e è davvero importante capire come possono aiutarti a semplificare i tuoi script e ripetere certe azioni in modo coerente. Abbiamo trattato estesamente suggerimenti e trucchi di PowerShell su Petri, quindi assicurati di controllare le nostre altre guide su come scrivere script PowerShell e come utilizzare l’opzione ForEach Parallel.
Articolo correlato:
Source:
https://petri.com/how-to-use-powershell-for-while-loops/