Un errore in uno script PowerShell impedirà il completamento con successo. L’utilizzo della gestione degli errori con i blocchi try catch consente di gestire e rispondere a questi errori di terminazione. In questo post tratterò le basi dei blocchi try/catch e come trovare e gestire specifici messaggi di eccezione.

Comprendere la sintassi

La sintassi del blocco try catch è molto semplice., È composto da due sezioni racchiuse tra parentesi graffe con la prima identificata come blocco try e la seconda come blocco catch.

try { # Statement to try}catch { # What to do with terminating errors}

Il blocco try può avere tutte le istruzioni che voglio; tuttavia, consiglierei di tenerlo il meno possibile, probabilmente solo una singola istruzione. Il punto di gestione degli errori è lavorare con un’istruzione alla volta e gestire tutto ciò che si verifica con essa.

Ecco un esempio di errore nella console PowerShell., Qui sto creando un nuovo file utilizzando il cmdlet New-Item e specificare una cartella inesistente per il Percorso:

Se questo era in uno script, l’output a schermo sarebbe sprecare un po ‘ di spazio e il problema potrebbe non essere immediatamente visibile. Usando un blocco try catch, posso iniziare a manipolare l’output dell’errore e renderlo più admin friendly.

Ecco il nostro stesso comando New-Item in un blocco try catch. Si noti che sulla riga 2 ho dovuto aggiungere il parametro ErrorAction con un valore di Stop al comando., Non tutti gli errori sono considerati “terminanti”, quindi a volte ho bisogno di aggiungere questo bit di codice per terminare correttamente nel blocco catch.

Ora invece di un blocco di testo rosso dall’aspetto arrabbiato, ho un semplice messaggio di avviso che si è verificato un problema. Il nome del percorso inesistente insieme a forcing-ErrorAction Stop rilascia la logica nel blocco catch e visualizza il mio avviso personalizzato.

Usando la variabile Error Error

Mentre è più leggibile, questo non è molto utile., Tutto quello che so è che il comando non è stato completato con successo, ma non so perché. Invece di visualizzare il mio messaggio personalizzato, posso visualizzare il messaggio di errore specifico che si è verificato invece dell’intero blocco di eccezione di testo rosso. Quando si verifica un errore nel blocco try, viene salvato nella variabile denominata Error Error. La variabile Error Error contiene un array di errori recenti e posso fare riferimento all’errore più recente nell’array all’indice 0.,

L’output di avviso è ora più descrittivo mostrando che il comando non è riuscito perché non riusciva a trovare parte del percorso. Questo messaggio era una parte del nostro messaggio di errore originale, ma ora è più conciso.

Usando i messaggi di eccezione

Posso anche usare più blocchi catch nel caso in cui voglio gestire errori specifici in modo diverso. Qui visualizzerò due diversi messaggi personalizzati, uno per se il percorso non esiste e uno per se nel nome viene utilizzato un carattere illegale., Si noti che nello screenshot seguente ho eseguito lo script due volte con due comandi diversi nel blocco try. Ogni comando, blocco cattura e output finale sono indicati dalle frecce arancione e verde.

Guardando le righe 14-16, c’è un terzo blocco catch senza un messaggio di eccezione. Questo è un blocco catch” catch-all ” che verrà eseguito se l’errore non corrisponde a qualsiasi altra eccezione di blocco catch., Se sto eseguendo questo script e vedo il messaggio nell’ultimo blocco catch, so che l’errore non è correlato a un carattere illegale nel nome del file o parte del percorso non valida.

Ora come conoscevo i messaggi di eccezione da utilizzare nei primi due blocchi di cattura? Questo può essere trovato guardando le diverse informazioni allegate alla variabile Error Error. Dopo che si verifica un comando non riuscito, posso eseguire Error Error.Eccezione.GetType().FullName per visualizzare il messaggio di eccezione per l’ultimo errore che si è verificato.,

Tornando alla console PowerShell, eseguo nuovamente il comando New-Item con un percorso inesistente, quindi eseguo il mio comando Error Error per trovare il messaggio di eccezione.

Il testo rosso immediatamente successivo al comando non riuscito contiene anche il messaggio di eccezione ma non contiene il modulo da cui proviene. Guardando la variabile Error Error mostra il messaggio completo da utilizzare per un blocco catch.,

L’utilizzo dei blocchi try / catch fornisce ulteriore potenza nella gestione degli errori in uno script e nell’esecuzione di azioni diverse in base all’errore. Il blocco catch può visualizzare più di un semplice messaggio di errore. Può contenere la logica che risolverà l’errore e continuerà a eseguire il resto dello script.