Gli script possono prendere decisioni. Come? Utilizzando un concetto chiamato logica condizionale. L’istruzione PowerShell if e i costrutti if / else sono i modi comuni per definire le condizioni.
Quando si scrivono script PowerShell, lo si fa con un compito specifico o attività in mente. Tuttavia, un’operazione può avere più di una possibile azione basata su una o più condizioni. Questa situazione è dove entra in gioco il costrutto PowerShell If-Else.,
In questo articolo, imparerai cos’è il costrutto di PowerShell If-Else, capirai la sua sintassi e come funziona. Imparerai anche dagli esempi alcuni dei diversi modi in cui puoi usare PowerShell If-Else per aggiungere la gestione della logica condizionale nei tuoi script.
Sommario
Comprensione della sintassi PowerShell If-Else
Il costrutto PowerShell if-else valuta una o più espressioni condizionali. Di seguito vedrai la sintassi dell’istruzione If. Questo stile è talvolta chiamato controllo di flusso.,
if (<test1>) {<statement list 1>}
Come puoi vedere dalla sintassi sopra, ogni test è racchiuso tra parentesi()
. I test possono utilizzare diversi operatori come operatori di confronto e operatori logici,
Gli elenchi di istruzioni contengono il codice da eseguire se il risultato del test è true.
Quindi, ci sono tre possibili istruzioni in un gruppo di istruzioni If. Queste sono le dichiarazioni IF, ELSEIF e ELSE.,
- L’istruzione
if
contiene il primo test da valutare, seguito dal primo elenco di istruzioni racchiuso 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 più condizioni. PowerShell valuterà ciascuna di queste condizioni in sequenza. - La dichiarazione
else
non accetta alcuna condizione., L’elenco di istruzioni in questa istruzione contiene il codice da eseguire se tutte le condizioni precedenti testate sono false.
Comprensione del flusso logico PowerShell If-Else
Per comprendere ulteriormente come funziona PowerShell If-Else, è necessario familiarizzare con il suo flusso logico. Lo schema seguente illustra il flusso di base del PowerShell If-Else.,
Quando viene eseguita l’istruzione if, PowerShell esegue ogni condizione valutando se il codice restituisce true o false. Di seguito è riportato un riepilogo del comportamento:
- PowerShell valuta la condizione nel Test 1.
- Se il risultato del Test 1 restituisce true, verrà eseguito il codice all’interno dell’elenco delle istruzioni If, quindi PowerShell esce dall’istruzione If.,
- Se il risultato del Test 1 restituisce false, PowerShell continua a valutare la condizione (Test n) nella successiva istruzione ElseIf.
- Se il risultato del Test n restituisce false, PowerShell continua a valutare la condizione (Test n) nella successiva istruzione ElseIf, se esiste un’altra istruzione ElseIf-O-
- Se il risultato del Test n restituisce false, il codice nell’istruzione Else viene eseguito. Quindi, PowerShell uscirà dall’istruzione If-O –
- Se il risultato del Test n restituisce true, viene eseguito il codice nell’istruzione ElseIf. Quindi, PowerShell uscirà dall’istruzione If.,
Utilizzo dell’istruzione PowerShell If-Else
Le sezioni successive sono alcuni esempi di come utilizzare l’istruzione PowerShell If-Else durante la scrittura di script. Le tecniche che imparerai possono guidarti nell’uso dell’istruzione If se dovessi incontrare una situazione di vita reale che richiede il suo uso.
Singola condizione If-Else
A partire dalla più elementare è la singola istruzione If. Dovresti usare una singola istruzione if quando c’è solo una condizione da testare.
L’esempio seguente verifica se il valore della variabile$num
è maggiore di 10., Se il risultato è vero, il risultato che dice "$num is greater than 10"
verrà visualizzato sullo schermo. Se il risultato è falso, PowerShell non fa nulla perché c’è solo una condizione da testare.
$num = 11if ($num -gt 10) { "$num is greater than 10"}
Incollare il codice sopra in PowerShell ti darà il risultato mostrato di seguito.,
Ora, se si desidera aggiungere un valore predefinito di “ripiego” azione, piuttosto che lasciare che PowerShell fare nulla quando il risultato del test è falso, è possibile aggiungere l’istruzione Else.
Nell’esempio seguente, il codice nell’istruzione Else verrà eseguito se il valore della variabile $num
NON è maggiore di 10.
$num = 9if ($num -gt 10){ "$num is greater than 10"}else{ "$num is NOT greater than 10"}
L’esecuzione del codice modificato in PowerShell fornisce 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.
Usando lo stesso esempio sopra, questo è il modo in cui il codice sarebbe simile all’operatore ternario.,
$num = 11$num -gt 10 ? "$num is greater than 10" : "$num is NOT greater than 10"
Molteplici Condizioni If-Else con ElseIf
Quando non ci sono più le condizioni per valutare, è necessario aggiungere uno o più istruzioni ElseIf. Ogni istruzione ElseIf contiene l’espressione di test e il proprio codice da eseguire.,
Lo script qui sotto, una volta eseguito, continuerà a richiedere un nome di frutta fino a quando non viene emessa la sequenza di tastiCTRL+C
, o l’utente inserisce la lettera “X
“.
Quindi, l’istruzione If passerà attraverso 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 la dimostrazione di come si comporta lo script sopra durante l’esecuzione in PowerShell.,
Reporting Free Disk Space Status
Free disk space reporting is one task that is common for amministratori di sistema. Il solito modo di riportare le informazioni sullo spazio dei dischi fissi su una macchina Windows ruota attorno al codice sottostante.
Get-CimInstance -ClassName CIM_LogicalDisk | Where-Object {$_.DriveType -eq 3}
Le informazioni che il codice sopra restituirà saranno simili a quelle mostrate in questa schermata successiva.,
Come puoi vedere, l’output sopra mostra la lettera di unità e i valori dello spazio libero, insieme ad altre proprietà. Mentre l’output sopra va bene, non è intuitivo. Il modo in cui vengono presentate le informazioni non indica se lo spazio su disco è in uno stato critico o di avviso o normale.,
Utilizzando un’istruzione PowerShell If per migliorare il codice
Utilizzando l’istruzione PowerShell If-Else, è possibile ottenere un output più intuitivo aggiungendo condizioni per verificare se lo spazio libero è superiore o inferiore a determinate soglie. E queste soglie definiranno lo stato dello spazio libero su disco.
Lo script di esempio seguente esegue quanto segue:
- 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
$Warning
, definire la soglia a cui la percentuale di spazio libero verrà contrassegnata come avviso. - Ottieni tutte le informazioni sul disco fisso dalla macchina locale
- Passa in rassegna tutte le informazioni sul disco per determinare lo spazio libero e contrassegnare il suo stato.
- Se la percentuale di spazio libero è superiore al valore della variabile
$Warning
, lo stato dello spazio su disco viene contrassegnato come normale., - Se la percentuale di spazio libero è superiore al valore della variabile
$Critical
, lo stato dello spazio su disco viene contrassegnato come avviso. - Se la percentuale di spazio libero è minore o uguale al valore della variabile
$Critical
, lo stato dello spazio su disco viene contrassegnato come critico.
- Se la percentuale di spazio libero è superiore al valore della variabile
- Scrivi le proprietà dell’oggetto
'Drive Letter'
'Drive Name'
'Total Space (GB)'
'Free Space (GB)'
'Free Space (%)'
e'Status'
., - Restituisce il report finale
Copia il codice sottostante e salva lo script con il nome del fileGet-DiskSpace.ps1
. Non dimenticare di modificare i valori delle variabili$Critical
e$Warning
se vuoi testare con soglie diverse.
Una volta salvato lo script, testarlo chiamando il suo nome in PowerShell. Di seguito è riportata la dimostrazione di esempio di come funziona questo script.,
Come si può vedere dall’output, lo stato per ogni disco è determinato dalla percentuale di spazio libero su disco, che è stato il risultato dell’utilizzo di più condizioni con PowerShell If-Else.
Multiplo e annidato If-Else
Supponiamo di avere un’istruzione if-else con una condizione definita nel bloccoelse
., Quando viene eseguita l’istruzione if-else, il blocco else
viene richiamato se il codice all’interno del blocco if
restituisce false.
All’interno del bloccoelse
, è necessario eseguire un altro test condizionale. Di conseguenza, hai bisogno di un’altra dichiarazione If-Else. Questo scenario è chiamato If-Else nidificato. L’istruzione If-Else annidata viene comunemente utilizzata se l’If-Else interno dipende dal risultato dell’operazione nell’If-Else esterno.
L’utilizzo di istruzioni If-Else multiple e nidificate può essere piuttosto confuso., Il punto chiave è ricordare il posizionamento dello scaffold e assicurarsi di indentare il codice. Indentare il codice ti aiuterà a riconoscere e separare facilmente le tue istruzioni If-Else.
Esempio di istruzioni If-Else multiple/Nidificate
Lo script di esempio seguente mostra come multiple e nidificate If-Else possono dipendere l’una dal risultato dell’altra. La logica del codice sottostante è la seguente.
- Se
$SendEmail
è$false
, lo script non farà nulla e uscirà., - Se
$SendEmail
è$true
, le variabili$From
e$To
non devono essere vuote o nulle. In caso contrario,$abortFlag
sarà impostato su 1. - Se il
$SendEmail
è$true
e il$CCEnabled
è$true
, allora il$CC
variabile non deve essere vuoto o null. In caso contrario,$abortFlag
sarà impostato su 1., - Se
$SendEmail
è$true
e$BCCEnabled
è$true
, quindi$BCC
variabile non deve essere vuota o null. In caso contrario,$abortFlag
sarà impostato su 1. - Se il valore
$abortFlag
è 1, lo script uscirà a questo punto e non continuerà. - Se il valore
$abortFlag
è 0, lo script continua fino alla fine.
Copiare il codice qui sotto e salvarlo come Send-MyMail.ps1
. Non modificare ancora alcun valore.,
Una volta salvato il file, eseguilo in PowerShell come mostrato di seguito. La dimostrazione seguente mostra il risultato dello script quando i valori delle variabili rimangono invariati.
Successivamente, modificare lo script e aggiornare tutte le variabili correttamente come questo frammento di seguito.
Dopo aver modificato le variabili, salvare lo script ed eseguirlo di nuovo. Dovrebbe mostrare lo stesso risultato, come si vede di seguito.,
Ora, modificare le variabili e provare diverse combinazioni per verificare come l’If-Else saranno interessati. Modificare e testare da soli ti aiuterebbe a capire ulteriormente la logica.
Sommario
In questo articolo, hai imparato a conoscere il costrutto logico condizionale – il costrutto PowerShell If-Else., L’utilizzo dell’istruzione If-Else consente agli scripter di formulare la logica condizionale e dirigere le azioni dei loro script in base ai risultati dei test.
Con gli esempi mostrati in questo articolo, dovresti aver imparato modi e tecniche su come utilizzare l’istruzione If-Else durante la creazione di un codice basato sulle decisioni. If-Else può essere semplice usando una singola condizione e diventa più complesso mentre si scava più a fondo nelle istruzioni If-Else annidate.
Cosa ne pensi dell’istruzione If-Else? È questo qualcosa che si pensa che si sarebbe utilizzando sempre di più dopo aver letto questo articolo?, Quali altri scopi puoi pensare a dove puoi applicare le conoscenze che hai acquisito qui?
Ulteriori letture
- Informazioni su If
- Torna alle origini: il ciclo di PowerShell foreach