Questo articolo è stato aggiornato per il 2023!
Gli script possono prendere decisioni. Come? Utilizzando un concetto chiamato logica condizionale. L’istruzione if di PowerShell e i costrutti if/else sono i modi comuni per definire le condizioni.
Quando scrivi script PowerShell, lo fai con uno specifico compito o scopo in mente. Ma, un’operazione può avere azioni multiple possibili basate su una o più condizioni. Questa situazione è dove entra in gioco il costrutto If di PowerShell.
In questo articolo, imparerai il costrutto If-Else di PowerShell e comprenderai la sua sintassi e come funziona. Imparerai anche alcuni modi in cui puoi utilizzare l’istruzione If di PowerShell per aggiungere la gestione della logica condizionale nei tuoi script dagli esempi.
Comprensione della sintassi dell’istruzione If di PowerShell
Il costrutto if-else di PowerShell valuta una o più espressioni condizionali. Di seguito vedrai la sintassi dell’istruzione If. Questo stile è spesso chiamato controllo del flusso.
Come puoi vedere dalla sintassi sopra, ogni test è racchiuso tra parentesi ()
. I test possono utilizzare diversi operatori, come gli operatori di confronto e operatori logici,
Le liste delle istruzioni contengono il codice destinato ad essere eseguito se il risultato del test si valuta a vero.
Quindi, ci sono tre possibili dichiarazioni in un gruppo di istruzioni If. Queste sono le dichiarazioni IF, ELSEIF e ELSE.
- L’istruzione
if
contiene il primo test da valutare, seguito dall’elenco della prima dichiarazione racchiusa tra parentesi graffe{}
. L’istruzione PowerShell if è l’unica istruzione richiesta per essere presente. - L’istruzione
elseif
è dove si aggiungono le condizioni. È possibile aggiungere più istruzioni ElseIf quando si hanno più condizioni. PowerShell valuterà ciascuna di queste condizioni in sequenza. - L’istruzione
else
non accetta alcuna condizione. L’elenco delle istruzioni in questa istruzione contiene il codice da eseguire se tutte le condizioni precedenti testate sono false.
Capire il flusso logico dell’istruzione If di PowerShell
Per comprendere meglio come funziona l’If-Else di PowerShell, familiarizzare con il suo flusso logico. Il diagramma qui sotto illustra il flusso di base dell’If-Else di PowerShell.

Quando viene eseguita l’istruzione if, PowerShell esamina ogni condizione valutando se il codice restituisce true o false. Un riepilogo del comportamento è il seguente:
- PowerShell valuta la condizione in Test 1.
- Se il risultato di Test 1 restituisce true, verrà eseguito il codice all’interno dell’elenco dell’istruzione If, quindi PowerShell esce dall’istruzione If.
- Se il risultato di Test 1 restituisce false, PowerShell continua a valutare la condizione (Test n) nella successiva istruzione ElseIf.
- Se il risultato di Test n restituisce false, PowerShell continua a valutare la condizione (Test n) nel successivo statement ElseIf, se esiste un altro statement ElseIf -OPPURE-
- Se il risultato del Test n restituisce false, il codice nello statement Else viene eseguito e PowerShell uscirà dallo statement If -OPPURE-
- Se il risultato del Test n è true, il codice nello statement ElseIf viene eseguito e PowerShell uscirà dallo statement If.
Utilizzo dello Statement If-Else di PowerShell
Le sezioni successive sono vari esempi di come viene utilizzato lo statement If di PowerShell durante la scrittura di script. Le tecniche che imparerai possono guidarti nell’uso dello statement If nel caso tu incontri una situazione reale che richieda il suo utilizzo.
Condizione If-Else Singola
Iniziando con il più basilare, troviamo il singolo statement If di PowerShell. Dovresti utilizzare un singolo statement if quando c’è solo una condizione da testare.
Nell’esempio seguente si verifica se il valore della variabile $num
è maggiore di 10. Se il risultato è true, verrà visualizzato il messaggio "$num è maggiore di 10"
. Se il risultato è false, PowerShell non fa nulla perché c’è solo una condizione da testare.
Se controlli solo per un valore specifico, come
if ($Value) { }
, allora PowerShell testerà se il$Value
non è$Null
,0
,$False
, una stringa vuota o un array vuoto.
Incollando il codice sopra in PowerShell otterrai il risultato mostrato di seguito.

Ora, puoi aggiungere l’istruzione Else se vuoi aggiungere un’azione predefinita “fallback” anziché lasciare che PowerShell non faccia nulla quando il risultato del test è falso.
Nell’esempio sottostante, il codice nell’istruzione Else verrà eseguito se il valore della variabile $num
NON è maggiore di 10.
Eseguendo il codice modificato in PowerShell otterrai l’output mostrato di seguito.

A partire da PowerShell 7.0, è stata introdotta una nuova sintassi per l’istruzione If utilizzando un operatore ternario. Le singole istruzioni If possono fare buon uso di questa nuova sintassi.
Utilizzando lo stesso esempio sopra, ecco come apparirebbe il codice con l’operatore ternario.

Test per $Null in un’istruzione If di PowerShell
Potresti pensare che il test per una condizione $Null
sia semplice. Ma, il lato su cui si colloca il valore $Null
è importante poiché potrebbe non produrre lo stesso risultato in ogni condizione. È una pratica consigliata mettere sempre la condizione $Null
a sinistra come segue.
Se metti il test $Null
sul lato destro e il valore sul lato sinistro è una lista, come ad esempio un array, allora $Null
agirà come un filtro. Come puoi vedere dall’esempio sotto, se $Null
è posto sul lato sinistro, otterrai risultati booleani consistenti.
$List = @(1,2,2,3,4)
$List -NE $Null
$List -EQ $Null
$Null -NE $Null
$Null -EQ $Null

Condizioni multiple If-Else con ElseIf
Quando si valutano più condizioni, è necessario aggiungere una o più istruzioni ElseIf. Ogni istruzione ElseIf contiene l’espressione di test e il relativo codice da eseguire.
Lo script sottostante, quando eseguito, continuerà a richiedere il nome di un frutto fino a quando non verrà emesso il tasto CTRL+C
, o l’utente inserisce la lettera “X
“.
Quindi, l’istruzione If esaminerà ogni condizione in sequenza fino a trovare una corrispondenza. Se l’input non corrisponde a nessuna delle condizioni, verrà eseguito il codice all’interno dell’istruzione Else.
Di seguito è riportata una dimostrazione del comportamento dello script sopra descritto durante l’esecuzione in PowerShell.

Segnalazione dello stato dello spazio disco libero
La segnalazione dello spazio disco libero è un compito comune per gli amministratori di sistema. Il modo solito di segnalare le informazioni sullo spazio dei dischi fissi su una macchina Windows ruota attorno al codice sottostante.
Le informazioni restituite dal codice sopra mostreranno qualcosa di simile a quanto mostrato nella prossima schermata.

Come puoi vedere, l’output sopra mostra la lettera del disco, i valori dello spazio libero e altre proprietà. Anche se l’output sopra è corretto, non è intuitivo. Il modo in cui le informazioni sono presentate non indica se lo spazio disco è in uno stato critico, di avviso o normale.
Utilizzo di un’istruzione If di PowerShell per migliorare il codice
A more intuitive output can be achieved using the PowerShell If-Else statement by adding conditions to check if the free space is over or below certain thresholds. And these thresholds will define the status of the free disk space.
Lo script di esempio sottostante esegue le seguenti operazioni:
- Utilizzando il valore della variabile
$Critical
, definire la soglia a cui la percentuale di spazio libero verrà contrassegnata come critica. - Utilizzando il valore della variabile
$Avvertimento
, definisci la soglia a cui la percentuale di spazio libero verrà contrassegnata come avviso. - Ottenere tutte le informazioni sui dischi fissi dalla macchina locale
- Loop attraverso tutte le informazioni sui dischi per determinare lo spazio libero e contrassegnarne lo stato.
- Se la percentuale di spazio libero è superiore al valore della variabile
$Avvertimento
, lo stato dello spazio su disco viene contrassegnato come normale. - Se la percentuale di spazio libero è superiore al valore della variabile
$Critico
, lo stato dello spazio su disco viene contrassegnato come avviso. - Se la percentuale di spazio libero è inferiore o uguale al valore della variabile
$Critico
, lo stato dello spazio su disco viene contrassegnato come critico.
- Se la percentuale di spazio libero è superiore al valore della variabile
- Comporre le proprietà dell’oggetto
'Lettera dell'unità'
,'Nome dell'unità'
,'Spazio totale (GB)'
,'Spazio libero (GB)'
,'Spazio libero (%)'
e'Stato'
. - Restituisci il rapporto finale.
Copia il codice qui sotto e salva lo script con il nome di file Get-DiskSpace.ps1
. Non dimenticare di modificare i valori delle variabili $Critical
e $Warning
per testare con soglie diverse.
Puoi anche assegnare il risultato della condizione if/else a una variabile, ad esempio
$Status = if ($percentFree -gt $Warning) { 'Normale' }
per potenzialmente creare una condizione più breve.
Una volta salvato lo script, testalo chiamando il suo nome in PowerShell. Qui di seguito è mostrata una dimostrazione di esempio di come funziona questo script.

Come puoi vedere dall’output, lo stato di ogni disco è determinato dalla percentuale di spazio disco libero, che è stato il risultato dell’uso di più condizioni con If-Else di PowerShell.
If-Else Multipli e Annidati
Supponiamo di avere un’istruzione if-else con una condizione definita nel blocco else
. Quando viene eseguita l’istruzione if-else, il blocco else
viene invocato se il codice all’interno del blocco if
restituisce false.
All’interno del blocco else
, è necessario eseguire un altro test condizionale. Di conseguenza, è necessaria un’altra istruzione If-Else. Questo scenario è chiamato If-Else nidificato. L’istruzione If-Else nidificata è comunemente utilizzata se l’If-Else interno dipende dal risultato dell’operazione nell’If-Else esterno.
Utilizzare più If-Else nidificati può essere piuttosto confuso. Il punto chiave è ricordare il posizionamento della struttura e assicurarsi di indentare il proprio codice. Indentare il codice aiuterà a riconoscere e separare facilmente le istruzioni If-Else.
Esempio di istruzioni If-Else multiple/nidificate
Lo script di esempio di seguito mostra come più If-Else nidificati possano dipendere dal risultato l’uno dell’altro. La logica del codice di seguito è la seguente.
- Se
$SendEmail
è$false
, lo script non farà nulla ed uscirà. - Se
$SendEmail
è$true
, allora le variabili$From
e$To
non devono essere vuote o nulle. Altrimenti, il$abortFlag
sarà impostato su 1. - Se
$SendEmail
è$true
e$CCEnabled
è$true
, allora la variabile$CC
non deve essere vuota o nulla. Altrimenti, il$abortFlag
sarà impostato su 1. - Se il
$SendEmail
è$true
e il$BCCEnabled
è$true
, allora la variabile$BCC
non deve essere vuota o nulla. Altrimenti, il$abortFlag
sarà impostato su 1. - Se il valore di
$abortFlag
è 1, lo script terminerà in questo punto e non proseguirà. - Se il valore di
$abortFlag
è 0, lo script continua fino alla fine.
Copia il codice qui sotto e salvalo come Send-MyMail.ps1
. Non modificare ancora nessun valore.
Una volta salvato il file, eseguilo in PowerShell, come mostrato di seguito. La dimostrazione qui sotto mostra il risultato dello script quando i valori delle variabili non vengono modificati.

Successivamente, modifica lo script e aggiorna correttamente tutte le variabili, come questo frammento di codice qui sotto.
Dopo aver modificato le variabili, salva lo script ed eseguilo di nuovo. Dovrebbe mostrarti lo stesso risultato, come visto di seguito.

Ora, modifica le variabili e prova diverse combinazioni per testare come il If-Else nidificato sarà influenzato. Modificare e testare da soli ti aiuterà a comprendere ulteriormente la logica.
Riepilogo
In questo articolo, hai appreso la costruzione della logica condizionale – la costruzione If Statement di PowerShell. La dichiarazione If-Else consente agli scripter di formulare logiche condizionali e di indirizzare le azioni dei loro script in base ai risultati dei test.
Con gli esempi in questo articolo, dovresti aver imparato modi e tecniche per utilizzare la dichiarazione If-Else nella creazione di un codice basato su decisioni. If-Else può essere semplice utilizzando una singola condizione e diventa più complesso mentre si approfondisce nelle dichiarazioni If-Else nidificate.
Cosa ne pensi dell’istruzione If-Else? È qualcosa che pensi useresti sempre di più dopo aver letto questo articolo? Quali altri scopi puoi considerare dove puoi applicare le conoscenze acquisite qui?