Sei fuori strada qui.
Hai già un bel messaggio di errore grande. Perché mai vorresti scrivere codice che controlli $?
esplicitamente dopo ogni singolo comando ? Questo è enormemente macchinoso e soggetto a errori. La soluzione corretta è interrompere il controllo$?
.
Usa invece il meccanismo integrato di PowerShell per far saltare in aria per te. Lo abiliti impostando la preferenza di errore al livello più alto:
$ErrorActionPreference = 'Stop'
L'ho messo in cima a ogni singola sceneggiatura che ho scritto e ora non devo controllare $?
. Questo rende il mio codice molto più semplice e affidabile.
Se ti imbatti in situazioni in cui hai davvero bisogno di disabilitare questo comportamento, puoi o catch
l'errore o passare un'impostazione a una particolare funzione usando il common -ErrorAction
. Nel tuo caso, probabilmente vuoi che il tuo processo si fermi al primo errore, lo rilevi e poi lo registri.
Si noti che questo non gestisce il caso in cui gli eseguibili esterni falliscono (codice di uscita diverso da zero, convenzionalmente), quindi è comunque necessario controllare $LASTEXITCODE
se si invoca uno qualsiasi. Nonostante questa limitazione, l'impostazione consente di risparmiare molto codice e fatica.
Affidabilità aggiuntiva
Potresti anche prendere in considerazione l'utilizzo della modalità rigorosa :
Set-StrictMode -Version Latest
Ciò impedisce a PowerShell di procedere silenziosamente quando si utilizza una variabile inesistente e in altre situazioni strane. (Vedere il -Version
parametro per i dettagli su ciò che limita.)
La combinazione di queste due impostazioni rende PowerShell molto più di un linguaggio veloce, il che rende la programmazione molto più semplice.