- 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 Finally
keywords 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 Catch
appropriato.
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 bloccoCatch
gestisce 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 Catch
blocco.,
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 bloccoCatch
per 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
Lascia un commento