• 04/01/2019
  • 6 minuti a leggere
    • c

BREVE DESCRIZIONE

viene Descritto come utilizzare il tag Try Catch e Finally blocchi per handleterminating errori.,

DESCRIZIONE LUNGA

UsaTry,Catch eFinally blocchi per rispondere o gestire gli errori di terminazione negli script. L’istruzioneTrap può anche essere utilizzata per gestire terminatingerrors negli script. Per ulteriori informazioni, vedere about_Trap.

Un errore di terminazione interrompe l’esecuzione di un’istruzione. Se PowerShell non gestisce in qualche modo un errore di terminazione, PowerShell interrompe anche l’esecuzione della funzione o dello script utilizzando la pipeline corrente., In altre lingue,come c#, gli errori di terminazione sono indicati come eccezioni.

Utilizzare il bloccoTry per definire una sezione di uno script in cui si desiderapowershell per monitorare gli errori. Quando si verifica un errore all’interno del blocco Try, l’errore viene prima salvato nella variabile automatica $Error. PowerShell cerca quindi un bloccoCatch per gestire l’errore., Se l’istruzioneTry non ha un bloccoCatch corrispondente, PowerShell continua a cercare un’istruzioneCatch oTrap negli ambiti padre. Dopo il completamento di un bloccoCatch o se non viene trovata alcuna istruzione Catch o Trap, viene eseguito il blocco Finally. Se l’errore non può essere gestito,l’errore viene scritto nel flusso di errore.,

A Catch blocco può includere comandi per il monitoraggio dell’errore o per il recuperoil flusso previsto dello script. Un bloccoCatch può specificare quale errore typesit cattura. Un’istruzioneTry può includere più blocchiCatch per diversi tipi di errori.

A Finally block può essere utilizzato per liberare tutte le risorse che non sono più necessariedal tuo script.,

Try, Catch, and Finally resemble the Try, Catch, and Finallykeywords used in the C# programming language.

SYNTAX

A Try statement contains a Try block, zero or more Catch blocks, and zeroor one Finally block. A Try statement must have at least one Catch blockor one Finally block.,

Quanto segue mostra la sintassi del blocco Try:

try {<statement list>}

La parola chiave Try è seguita da un elenco di istruzioni tra parentesi graffe. Se si verifica un terminatingerror durante l’esecuzione delle istruzioni nell’elenco delle istruzioni, thescript passa l’oggetto error dal blocco Try a un blocco Catchappropriato.

Quanto segue mostra la sintassi del bloccoCatch:

catch *] {<statement list>}

I tipi di errore appaiono tra parentesi., Le parentesi più esterne indicano l’elemento èopzionale.

La parola chiave Catch è seguita da un elenco facoltativo di specifiche dei tipi di errore e da un elenco di istruzioni. Se si verifica un errore di terminazione nel bloccoTry, PowerShell cerca un blocco Catch appropriato. Ifone viene trovato, vengono eseguite le istruzioni nel blocco Catch.

Il bloccoCatch può specificare uno o più tipi di errore. Un tipo di errore è aMicrosoft. NET Framework exception o un’eccezione derivata da a .,Eccezione NETFramework. Un bloccoCatch gestisce gli errori specificati .NETFramework classe di eccezione o di qualsiasi classe che deriva dalla specifiedclass.

Se un bloccoCatch specifica un tipo di errore, tale bloccoCatch gestisce tale tipo di errore. Se un bloccoCatch non specifica un tipo di errore, il bloccoCatchgestisce qualsiasi errore riscontrato nel bloccoTry., Un’istruzioneTry può includere più blocchiCatch per i diversi tipi di errore specificati.

di seguito si riporta Il Finally blocco sintassi:

finally {<statement list>}

Finally parola chiave è seguita da un elenco di istruzioni che viene eseguito ogni volta thescript viene eseguito, anche se il Try dichiarazione di corse senza errore o un errore wascaught in un Catch istruzione.

Si noti che premendo CTRL+C si arresta la pipeline., Gli oggetti che vengono inviati alla pipeline non verranno visualizzati come output. Pertanto, se includi un’istruzione da visualizzare, come “Finalmente il blocco è stato eseguito”, non verrà visualizzato dopo aver premuto CTRL+C, anche se il bloccoFinally è stato eseguito.

la CATTURA di ERRORI

Lo script di esempio seguente mostra un Try blocco con un Catch blocco:

try { NonsenseString }catch { "An error occurred." }

Catch parola chiave deve seguire immediatamente il Try blocco o un altro Catchblocco.,

PowerShell non riconosce “NonsenseString” come cmdlet o altro elemento.L’esecuzione di questo script restituisce il seguente risultato:

An error occurred.

Quando lo script rileva “NonsenseString”, causa un errore di terminazione. Il bloccoCatch gestisce l’errore eseguendo l’elenco di istruzioni all’interno del blocco.

UTILIZZANDO PIÙ ISTRUZIONI CATCH

ATry istruzione può avere un numero qualsiasi diCatch blocchi., Per esempio, i seguenti script ha un Try blocco download MyDoc.doc, e containstwo Catch blocchi:

Il primo Catch blocco gestisce gli errori del Sistema.Net.WebException andSystem.IO.IOException tipi. Il secondo bloccoCatch non specifica un tipo di errore. Il secondo bloccoCatch gestisce eventuali altri errori di terminazione che si verificano.

PowerShell corrisponde ai tipi di errore per ereditarietà. Un bloccoCatch gestisce gli errori specificati .,NET Framework classe di eccezione o di qualsiasi classe che derivesfrom la classe specificata. L’esempio seguente contiene un bloccoCatch che corrisponde a un errore” Comando non trovato”:

catch {"Inherited Exception" }

Il tipo di errore specificato, CommandNotFoundException, eredita dal sistema.Tipo SystemException. L’esempio seguente rileva anche un errore CommandNot Found:

catch {"Base Exception" }

Questo bloccoCatch gestisce l’errore “Command Not Found” e altri errori che ereditano dal tipo SystemException.,

Se si specifica una classe di errore e una delle sue classi derivate, posizionare il bloccoCatchper la classe derivata prima del bloccoCatch per la classe generale.

Utilizzando Trappole in un Try Catch

Quando si verifica un errore fatale in un Try blocco con un Trap definito withinthe Try blocco, anche se c’è una corrispondenza Catch blocco, Trap statementtakes di controllo.,

Se un Trap esiste un alto blocco di Try e non c’è nessuna corrispondenzaCatch blocco nell’ambito corrente, il Trap prenderà il controllo, anche ifany ambito principale ha un corrispondente Catch blocco.

ACCESSO ALLE INFORMAZIONI SULLE ECCEZIONI

All’interno di un bloccoCatch, è possibile accedere all’errore corrente utilizzando$_, noto anche come$PSItem. L’oggetto è di tipo ErrorRecord.,

try { NonsenseString }catch { Write-Host "An error occurred:" Write-Host $_}

L’esecuzione di questo script restituisce il seguente risultato:

An Error occurred:The term 'NonsenseString' is not recognized as the name of a cmdlet, function,script file, or operable program. Check the spelling of the name, or if a pathwas included, verify that the path is correct and try again.

Ci sono proprietà aggiuntive a cui è possibile accedere, come ScriptStackTrace,Exception e ErrorDetails. Per esempio, se si modifica lo script per i seguenti:

try { NonsenseString }catch { Write-Host "An error occurred:" Write-Host $_.ScriptStackTrace}

Il risultato sarà simile al seguente:

An Error occurred:at <ScriptBlock>, <No file>: line 2

LIBERARE RISORSE UTILIZZANDO INFINE

Per liberare risorse da uno script, aggiungere un Finally blocco Try eCatch blocchi., Le istruzioni di bloccoFinally vengono eseguite indipendentemente dal fatto che il bloccoTry riscontri un errore di terminazione. PowerShell esegue il bloccoFinally prima che lo script termini o prima che il blocco corrente esca dall’ambito.

A Finally il blocco viene eseguito anche se si utilizza CTRL+C per interrompere thescript. Un bloccoFinally viene eseguito anche se una parola chiave Exit interrompe lo script all’interno di un bloccoCatch.,

VEDI ANCHE

about_Break

about_Continue

about_Scopes

about_Throw

about_Trap