Interpretare le azioni in caso di errore per i comandi Windows PowerShell
Quando un comando di PowerShell genera un errore, tale errore potrebbe essere di tipo terminante oppure di tipo non terminante. Un errore terminante si verifica quando Windows PowerShell stabilisce che a seguito dell'errore non è possibile continuare l'elaborazione e il comando viene arrestato. Un errore non terminante, di contro, si verifica quando Windows PowerShell stabilisce che è possibile procedere con l'elaborazione nonostante l'errore. In caso di errori che non determinano la terminazione, lo script o la pipeline continueranno ad essere eseguiti. Gli errori non terminanti sono più comuni rispetto a quelli terminanti.
Si consideri il comando seguente:
Get-WmiObject -Class Win32_BIOS -ComputerName LON-SVR1,LON-DC1
Si supponga che nella rete non sia disponibile il computer LON-SVR1. Quando tenterà di eseguire una query in questo computer, il comando Get-WmiObject genererà un errore. Tuttavia, il comando potrà passare al computer successivo, LON-DC1. L'errore, quindi, è di tipo non terminante.
$ErrorActionPreference
In Windows PowerShell è inclusa una variabile globale predefinita denominata $ErrorActionPreference. Quando un comando genera un errore non terminante, il comando controlla il valore il tale variabile per determinare l’azione da eseguire. La variabile può assumere uno dei seguenti quattro valori:
- Il valore Continue è l'impostazione predefinita e indica al comando di visualizzare un messaggio di errore continuando l'esecuzione.
- Il valore SilentlyContinue indica al comando di continuare l'esecuzione senza visualizzare alcun messaggio di errore.
- Il valore Inquire indica al comando di visualizzare un prompt per chiedere all'utente come desidera proseguire.
- Il valore Stop indica al comando di considerare l'errore come terminante e di arrestare l'esecuzione.
Per impostare la variabile $ErrorActionPreference, usare la sintassi seguente:
$ErrorActionPreference = 'Inquire'
Nota
Essere selettivi nell'uso di SilentlyContinue per $ErrorActionPreference. Benché questa opzione sembri quella più idonea affinché gli utenti abbiano una migliore esperienza dello script, potrebbe rendere difficile la risoluzione dei problemi.
Se si intende intercettare un errore all'interno dello script in modo da poterlo gestire, i comandi devono usare l'azione Stop. È possibile intercettare e gestire solo errori che determinano la terminazione.
Parametro -ErrorAction
In tutti i comandi Windows PowerShell è presente il parametro –ErrorAction. L'alias di questo parametro è -EA. Il parametro accetta gli stessi valori di $ErrorActionPreference ed esegue l'override della variabile per tale comando. Se è prevedibile che in un comando si verifichi un errore, usare il parametro –ErrorAction per impostare su Stop l'azione del comando in caso di errore. In questo modo, sarà possibile intercettare e gestire l'errore generato da tale comando nonostante tutti gli altri comandi continuino a usare l'azione specificata in $ErrorActionPreference. Di seguito è riportato un esempio:
Get-WmiObject -Class Win32_BIOS -ComputerName LON-SVR1,LON-DC1 -ErrorAction Stop
L'impostazione di $ErrorActionPreference dovrà essere modificata solo in caso si preveda il verificarsi di un errore all'esterno di un comando Windows PowerShell, ad esempio in caso si esegua un metodo come il seguente:
Get-Process –Name Notepad | ForEach-Object { $PSItem.Kill() }
In questo esempio il metodo Kill() potrebbe generare un errore. Tuttavia, poiché non si tratta di un comando Windows PowerShell, non sarà presente alcun parametro –ErrorAction. In questo caso, si dovrebbe impostare $ErrorActionPreference su Stop prima di eseguire il metodo e reimpostare la variabile su Continue dopo l'esecuzione del metodo.