LastExitCode in PowerShell
-
Uso di
$?
in un ambiente PowerShell -
$LastExitCode
come gestore degli errori in PowerShell - Conclusione

Comprendere le complessità della gestione degli errori in PowerShell è essenziale per una scripting efficace. Tra i vari strumenti disponibili, $LastExitCode
si distingue come un potente meccanismo per catturare il codice di uscita dei comandi esterni.
Questo articolo approfondisce l’uso sfumato di $LastExitCode
, esplorando la sua applicazione in diversi scenari, dal controllo degli errori di base all’esecuzione dinamica dei comandi. Padroneggiando $LastExitCode
, gli utenti di PowerShell possono migliorare la robustezza e l’affidabilità dei loro script.
Uso di $?
in un ambiente PowerShell
È importante comprendere il comando $?
prima di utilizzarlo qui. In PowerShell, $?
è una variabile automatica che aiuta a determinare il successo o il fallimento dell’ultima operazione e può essere utilizzata come gestore degli errori.
In base all’ultimo comando eseguito, restituisce un valore booleano, True
o False
. Se l’ultimo comando eseguito nello script è stato eseguito con successo, restituisce true
; altrimenti, restituisce false
.
Una esecuzione di questo comando è mostrata nel codice di esecuzione qui sotto.
Remove-Item -Path "example.txt"
if ($?) {
Write-Host "File removed successfully."
}
else {
Write-Host "Failed to remove file."
}
In questo esempio, tentiamo prima di rimuovere un file chiamato example.txt
. Dopo aver eseguito il comando Remove-Item
, usiamo la variabile $?
nella dichiarazione if
per controllare se l’operazione è stata eseguita con successo.
Se $?
valuta a True
, stampiamo un messaggio di successo; altrimenti, stampiamo un messaggio di fallimento.
C’è una differenza tra il $LastExitCode
e il $?
. Tuttavia, è anche utilizzato per la gestione degli errori.
$LastExitCode
come gestore degli errori in PowerShell
C’è una differenza nella gestione degli errori utilizzata quando il comando è interno e quando il comando è esterno.
Utilizzerai il $LastExitCode
quando il comando è esterno. Questo perché questo comando si applica solo a script e comandi esterni.
Lo scopo principale di $LastExitCode
è fornire feedback sul successo o sul fallimento dei comandi esterni eseguiti all’interno di una sessione di PowerShell. Accedendo a $LastExitCode
, gli utenti possono determinare se l’ultimo comando eseguito ha avuto successo o ha incontrato un errore.
Esempio:
# Execute an external command (ping)
ping example.test
# Check the value of $LastExitCode
$exitCode = $LastExitCode
# Output the exit code
Write-Host "Exit code: $exitCode"
In questo esempio, tentiamo di pingare un host chiamato example.test
. Dopo aver eseguito il comando ping
, memorizziamo il valore di $LastExitCode
in una variabile chiamata $exitCode
.
Infine, emettiamo il codice di uscita utilizzando il cmdlet Write-Host
. Questo approccio ci consente di accedere e utilizzare direttamente il codice di uscita dell’ultimo comando eseguito all’interno del nostro script PowerShell.
Output:
$LastExitCode
Con Invoke-Expression
come gestore degli errori in PowerShell
In PowerShell, il cmdlet Invoke-Expression
consente l’esecuzione di comandi o script memorizzati in variabili stringa. Quando combinato con $LastExitCode
, fornisce un modo per catturare il codice di uscita dei comandi eseguiti dinamicamente.
Esempio:
# Define a command as a string
$command = "ping example.test"
# Execute the command using Invoke-Expression
Invoke-Expression -Command $command
# Capture the exit code using $LastExitCode
$exitCode = $LastExitCode
# Output the exit code
Write-Host "Exit code: $exitCode"
In questo esempio, definiamo un comando (ping example.test
) come una variabile stringa $command
. Utilizziamo quindi Invoke-Expression
per eseguire il comando memorizzato in $command
.
Dopo l’esecuzione, catturiamo il codice di uscita utilizzando $LastExitCode
e lo memorizziamo nella variabile $exitCode
. Infine, emettiamo il codice di uscita sulla console.
Output:
Quando lo script precedente era true
, l’output di $LastExitCode
sarebbe sempre 0.
Ma, quando non ha successo, sarebbe 1 o un altro intero restituito dallo script esterno perché il comando $LastExitCode
non è binario, a differenza del comando $?
.
$LastExitCode
Con controlli condizionali come gestore degli errori in PowerShell
Le istruzioni condizionali ci consentono di prendere decisioni basate sul successo o sul fallimento dei comandi all’interno di uno script PowerShell. Vediamo come possiamo sfruttare $LastExitCode
all’interno di queste dichiarazioni per implementare una gestione degli errori robusta e una logica condizionale.
Esempio:
# Execute an external command (ping)
ping example.test
# Check the value of $LastExitCode
if ($LastExitCode -eq $null) {
Write-Host "No exit code available. An external command might not have been executed."
}
else {
Write-Host "Exit code: $LastExitCode"
}
In questo esempio, tentiamo di pingare un host chiamato example.test
. Dopo aver eseguito il comando ping
, controlliamo il valore di $LastExitCode
.
Se $LastExitCode
è null, indica che il comando ping
potrebbe non essere stato eseguito, possibilmente a causa di un nome host non valido o di un problema di rete. Altrimenti, stampiamo il codice di uscita, fornendo informazioni sul successo o sul fallimento del comando ping
.
Output:
Conclusione
Questo articolo ha fornito una panoramica completa sull’utilizzo di $LastExitCode
come gestore degli errori nella scrittura di script PowerShell. Abbiamo esaminato il suo uso in vari contesti, incluso il controllo degli errori di base con $?
, la gestione degli errori per comandi esterni con $LastExitCode
, l’esecuzione dinamica dei comandi con Invoke-Expression
e i controlli condizionali.
Padroneggiando queste tecniche, gli utenti di PowerShell possono migliorare le loro capacità di scripting, garantendo una robusta rilevazione e gestione degli errori nei loro script. Per approfondire ulteriormente la tua comprensione, considera di esplorare argomenti avanzati come la cattura degli errori e la gestione di scenari di errore specifici.
Con una solida comprensione delle tecniche di gestione degli errori in PowerShell, sarai ben equipaggiato per sviluppare script affidabili e resilienti per varie attività di automazione.
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.