ARGOMENTO
    about_Try_Catch_Finally

DESCRIZIONE BREVE
    Descrive come utilizzare i blocchi Try, Catch e Finally per 
    gestire gli errori fatali.


DESCRIZIONE DETTAGLIATA
    Utilizzare i blocchi Try, Catch e Finally per rispondere o gestire 
    gli errori fatali negli script. Anche l'istruzione Trap può essere 
    utilizzata per gestire gli errori fatali negli script. Per ulteriori 
    informazioni, vedere about_Trap.


    Un errore fatale arresta l'esecuzione di un'istruzione. In Windows 
    PowerShell, se un errore fatale non viene gestito in qualche modo, 
    la funzione o lo script vengono anche arrestati mediante la pipeline 
    corrente. Negli altri linguaggi, ad esempio C#, gli errori fatali 
    vengono definiti eccezioni. Per ulteriori informazioni sugli errori, 
    vedere about_Errors.


    Utilizzare il blocco Try per definire una sezione di uno script 
    nella quale si desidera che vengano monitorati gli errori. Quando  
    si verifica un errore nel blocco Try, l'errore viene innanzitutto 
    salvato nella variabile automatica $Error. Viene quindi cercato un 
    blocco Catch per gestire l'errore. Se l'istruzione Try non dispone di 
    un blocco Catch corrispondente, si continua a cercare un blocco Catch 
    adatto o un'istruzione Trap negli ambiti padre. Una volta completato 
    un blocco Catch oppure se non viene trovato un blocco Catch o 
    un'istruzione Trap appropriata, viene eseguito il blocco Finally. Se 
    l'errore non può essere gestito, viene scritto nel flusso di errore.


    Un blocco Catch può includere comandi per la registrazione 
    dell'errore o per il recupero del flusso previsto dello script. 
    Un blocco Catch può specificare quali tipi di errori intercetta. 
    Un'istruzione Try può includere più blocchi Catch per tipi diversi di 
    errori.


    Un blocco Finally può essere utilizzato per liberare risorse non più 
    necessarie allo script. 


    Try, Catch e Finally sono analoghi alle parole chiave Try, Catch 
    e Finally utilizzate nel linguaggio di programmazione C#.


  Sintassi
      Un'istruzione Try contiene un blocco Try, zero o più blocchi 
      Catch e zero o un blocco Finally. Un'istruzione Try deve 
      disporre almeno di un blocco Catch o e di un blocco Finally.


      Di seguito viene illustrata la sintassi del blocco Try:

          try {<elenco istruzioni>}


      La parola chiave Try viene seguita da un elenco di istruzioni tra 
      parentesi graffe. Se si verifica un errore fatale mentre le istruzioni 
      nell'elenco di istruzioni sono in esecuzione, lo script passa 
      l'oggetto errore dal blocco Try a un blocco Catch appropriato. 


      Di seguito viene illustrata la sintassi del blocco Catch: 

          catch [[<tipo di errore>][',' <error type>]*] {<elenco istruzioni>}


      I tipi di errore vengono riportati tra parentesi quadre. Le 
      parentesi quadre più esterne indicano che l'elemento è facoltativo.


      La parola chiave Catch viene seguita da un elenco facoltativo di 
      specifiche del errore tipo e da un elenco di istruzioni. Se si verifica  
      un errore fatale nel blocco Try, viene cercato un blocco Catch 
      appropriato. Se viene trovato, vengono eseguite le istruzioni nel 
      blocco Catch.


      Il blocco Catch può specificare uno o più tipi di errore. Un tipo di 
      errore è un'eccezione Microsoft .NET Framework o un'eccezione derivata  
      da un'eccezione .NET Framework. Un blocco Catch gestisce gli errori 
      della classe di eccezioni .NET Framework o di qualsiasi classe 
      derivata dalla classe specificata.


      Se un blocco Catch specifica un tipo di errore, tale blocco 
      Catch gestisce tale tipo di errore. Se un blocco Catch non 
      specifica un tipo di errore, tale blocco Catch gestisce 
      qualsiasi errore rilevato nel blocco Try. Un'istruzione Try può 
      includere più blocchi Catch per i tipi diversi di errori 
      specificati. 


      Di seguito viene illustrata la sintassi del blocco Finally:

          finally {<elenco istruzioni>}


      La parola chiave Finally è seguita da un elenco di istruzioni 
      eseguito ogni volta che viene eseguito lo script, anche se 
      l'istruzione Try viene eseguita senza errori o se un errore viene 
      intercettato in un'istruzione Catch. 


      Notare che premendo CTRL+C si arresta la pipeline. Gli oggetti 
      inviati alla pipeline non saranno visualizzati come output. 
      Pertanto, se si include un'istruzione da visualizzare, ad 
      esempio "Blocco Finally eseguito", non sarà visualizzata dopo avere 
      premuto CTRL+C, anche se il Finally è stato eseguito.


  Intercettamento di errori
      Nello script di esempio seguente è riportato un blocco Try con 
      un blocco Catch:

          try { NonsenseString }
          catch { "Si è verificato un errore." }


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


      Windows PowerShell non riconosce "NonsenseString" come un 
      cmdlet o altro elemento. L'esecuzione di questo script 
      restituisce il risultato seguente:

          Si è verificato un errore.


      Quando lo script rileva "NonsenseString", causa un errore fatale. Il 
      blocco Catch gestisce l'errore eseguendo l'elenco di istruzioni nel 
      blocco.


  Utilizzo di più istruzioni Catch
      Un'istruzione Try può disporre di qualsiasi numero di blocchi 
      Catch. Ad esempio, lo script seguente contiene un blocco Try 
      che scarica il file MyFile.doc e contiene due blocchi Catch:

          try
          {
             $wc = new-object System.Net.WebClient 
             $wc.DownloadFile("http://www.contoso.com/MyDoc.doc") 
          }
          catch [System.Net.WebException],[System.IO.IOException] 
          {
              "Impossibile scaricare MyDoc.doc da http://www.contoso.c
              om." 
          }
          catch
          {
              "Si è verificato un errore che non è stato possibile 
              risolvere." 
          }


      Il primo blocco Catch gestisce gli errori dei tipi 
      System.Net.WebException e System.IO.IOException. Il secondo 
      blocco Catch non specifica un tipo di errore. Il secondo blocco 
      Catch gestisce gli altri errori fatali che si verificano.


      Vengono rilevati i tipi di errori per ereditarietà. Un blocco Catch 
      gestisce gli errori della classe di eccezioni .NET Framework o di 
      qualsiasi classe derivata dalla classe specificata. L'esempio 
      seguente contiene un blocco Catch che intercetta un errore "Command 
      Not Found":

          catch [System.Management.Automation.CommandNotFoundException] 
          {"Eccezione ereditata" }


      Il tipo di errore specificato, CommandNotFoundException, 
      eredita dal tipo System.SystemException. Anche l'esempio seguente 
      intercetta un errore Command Not Found:

          catch [System.SystemException] {"Eccezione di base" }


      Questo blocco Catch gestisce l'errore "Command Not Found" e 
      altri errori che ereditano dal tipo SystemException.


      Se si specifica una classe di errore e una delle classi 
      derivate, inserire il blocco Catch per le classi derivate prima 
      del blocco Catch per la classe generale.


  Liberare risorse mediante il blocco Finally
      Per liberare le risorse utilizzate da uno script, aggiungere un 
      blocco Finally dopo i blocchi Try e Catch. Le istruzioni del blocco 
      Finally vengono eseguite indipendentemente dal fatto che il blocco 
      Try rilevi un errore fatale. Il blocco Finally viene eseguito prima 
      che lo script venga terminato o prima che il blocco corrente esca 
      dall'ambito. 


      Il blocco Finally viene eseguito anche se si utilizza CTRL+C 
      per arrestare lo script. Un blocco Finally anche se una parola 
      chiave Exit arresta lo script all'interno di un blocco Catch.


VEDERE ANCHE
    about_Errors
    about_Trap




Argomenti della Guida