LastExitCode in PowerShell
-
Uso di
$?in un ambiente PowerShell -
$LastExitCodecome 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.
