ARGOMENTO
    about_Trap

DESCRIZIONE BREVE
    Descrive una parola chiave che gestisce un errore fatale.


DESCRIZIONE DETTAGLIATA
    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 
    nella pipeline corrente. Negli altri linguaggi, ad esempio C#, 
    gli errori fatali vengono definiti eccezioni.


    La parola chiave Trap specifica un elenco di istruzioni da 
    eseguire quando si verifica un errore fatale. Le istruzioni Trap 
    gestiscono gli errori fatali e consentono di proseguire anziché 
    arrestare l'esecuzione dello script o della funzione.


  Sintassi

      L'istruzione Trap ha la sintassi seguente:

          trap [[<tipo di errore>]] {<elenco istruzioni>}


      La l'istruzione Trap specifica un elenco di istruzioni da 
      eseguire quando si verifica un errore fatale. La parola chiave 
      Trap può specificare facoltativamente un tipo di errore. Un 
      tipo di errore richiede l'uso di parentesi. 


      Uno script o un comando può disporre di più istruzioni Trap. Le 
      istruzioni Trap possono essere incluse in qualsiasi punto dello 
      script o del comando. 


  Intercettazione di tutti gli errori fatali

      Quando si verifica un errore fatale non gestito in un altro 
      modo in uno script o comando, viene cercata un'istruzione Trap 
      che gestisce l'errore. Se è presente un'istruzione Trap, viene 
      proseguita l'esecuzione dello script o del comando 
      nell'istruzione Trap.
 

      L'esempio seguente è un'istruzione Trap molto semplice:

          trap {"Rilevato errore."}


      Questa istruzione Trap intercetta qualsiasi errore fatale. 
      L'esempio seguente è una funzione che contiene questa 
      istruzione Trap:

          function TrapTest {
              trap {"Rilevato errore."}
              nonsenseString
              }


      Questa funzione include una stringa priva di significato che 
      provoca un errore. L'esecuzione di questa funzione restituisce 
      quanto segue:

          C:\PS> TrapTest
          Rilevato errore.


      L'esempio seguente include un'istruzione Trap che visualizza 
      l'errore tramite la variabile automatica $_:

          function TrapTest {
              trap {"Rilevato errore: $_"}
              nonsenseString
              }


      L'esecuzione di questa versione della funzione restituisce 
      quanto segue:

          C:\PS> TrapTest
          Rilevato errore: Termine 'nonsenseString' non riconosciuto 
          come nome di cmdlet, funzione, programma eseguibile o file 
          script. Controllare l'ortografia del nome o verificare che 
          il percorso sia incluso e corretto, quindi riprovare. 


      Le istruzioni Trap possono essere anche più complesse. 
      Un'istruzione Trap può includere più condizioni o chiamate di 
      funzione. Può registrare, verificare o anche eseguire un altro 
      programma.


   Intercettazione degli errori fatali specificati

      L'esempio seguente è un'istruzione Trap che intercetta il tipo 
      di errore CommandNotFoundException:

          trap [System.Management.Automation.CommandNotFoundException]
               {"Trap errore comando"}


      Quando una funzione o un script incontra una stringa che non 
      corrisponde a un comando noto, questa istruzione Trap 
      visualizza l'errore "Trap errore comando". Dopo l'esecuzione di 
      qualsiasi istruzione nell'elenco dell'istruzione Trap, 
      l'oggetto errore viene scritto nel flusso di errore, quindi 
      viene proseguito lo script.


      In Windows PowerShell vengono utilizzati i tipi di eccezione di 
      Microsoft .NET Framework. Nell'esempio seguente viene 
      specificato il tipo di errore di System.Exception:

          trap [System.Exception] {"An error trapped"}


      Il tipo di errore CommandNotFoundException eredita dal tipo 
      System.Exception. Questa istruzione intercetta un errore creato 
      da un comando sconosciuto. Intercetta anche gli altri tipi di 
      errore.


      In uno script possono essere presenti più istruzioni Trap. Ogni 
      errore può essere intercettato da una sola istruzione Trap. Se 
      si verifica un errore e sono disponibili più istruzioni Trap, 
      viene utilizzata l'istruzione Trap con il tipo di errore più 
      specifico che corrisponde all'errore. 


      L'esempio di script seguente contiene un errore. Lo script 
      include un'istruzione Trap generale che intercetta qualsiasi 
      errore fatale e un'istruzione Trap specifica che specifica il tipo 
      CommandNotFoundException.

          trap {"Trap altro errore fatale" } 
          trap [System.Management.Automation.CommandNotFoundException] 
               {"Trap errore comando"} nonsenseString


      L'esecuzione di questo script produce il risultato seguente:

          Trap errore comando
          Termine 'nonsenseString' non riconosciuto come nome di 
          cmdlet, funzione, programma eseguibile o file script. 
          Controllare l'ortografia del nome o verificare che il 
          percorso sia incluso e corretto, quindi riprovare.
          At C:\PS>testScript1.ps1:3 char:19
          +   nonsenseString <<<< 


      Poiché Windows PowerShell non riconosce "nonsenseString" come 
      un cmdlet o altro elemento, restituisce un errore 
      CommandNotFoundException. Questo errore fatale viene 
      intercettato dall'istruzione Trap specifica.


      L'esempio dello script seguente contiene le stesse istruzioni 
      Trap con un errore diverso:

          trap {"Trap altro errore fatale" } 
          trap [System.Management.Automation.CommandNotFoundException] 
               {"Trap errore comando"}
          1/$null


      L'esecuzione di questo script produce il risultato seguente:

          Trap altro errore fatale
          Attempted to divide by zero.
          At C:PS> errorX.ps1:3 char:7
          +   1/ <<<< $null


      Il tentativo di dividere per zero non crea un errore 
      CommandNotFoundException. Al contrario, tale errore viene 
      intercettato dall'altra istruzione Trap che intercetta 
      qualsiasi errore fatale. 


  Intercettazione di errori e ambito

      Se si verifica un errore fatale nello stesso ambito 
      dell'istruzione Trap, dopo avere eseguito le istruzioni Trap, 
      l'esecuzione continua dall'istruzione dopo l'errore. Se 
      l'istruzione Trap è in un ambito diverso dall'errore, 
      l'esecuzione continua dall'istruzione successiva nello stesso 
      ambito dell'istruzione Trap.
 

      Ad esempio, se si verifica un errore in una funzione e 
      l'istruzione Trap è nella funzione, lo script continua 
      dall'istruzione successiva. Lo script seguente, ad esempio, 
      contiene un errore e un'istruzione Trap:

          function function1 {
              trap { "Errore: " }
              NonsenseString
              "function1 completata"
              }


      Successivamente nello script, l'esecuzione di Function1 produce 
      il risultato seguente: 

          function1
          Errore: 
          Termine 'NonsenseString' non riconosciuto come nome di 
          cmdlet, funzione, programma eseguibile o file script. 
          Controllare l'ortografia del nome o verificare che il 
          percorso sia incluso e corretto, quindi riprovare.
          At C:\PS>TestScript1.ps1:3 char:19
          +   NonsenseString <<<<

          function1 completata 
 

      L'istruzione Trap nella funzione intercetta l'errore. Dopo 
      avere visualizzato il messaggio, viene ripresa l'esecuzione 
      della funzione. Notare che Function1 non viene completata.


      Confrontare questo con l'esempio seguente che presenta lo 
      stesso errore e l'istruzione Trap. In questo esempio, 
      l'istruzione Trap viene eseguita fuori della funzione:

          function function2 {
              NonsenseString
              "function2 completata"
              }

          trap { "Errore: " }
              . . .
          function2


      Successivamente nello script, l'esecuzione di Function2 produce 
      il risultato seguente:

          Errore: 
          Termine 'NonsenseString' non riconosciuto come nome di 
          cmdlet, funzione, programma eseguibile o file script. 
          Controllare l'ortografia del nome o verificare che il 
          percorso sia incluso e corretto, quindi riprovare.
          At C:\PS>TestScript2.ps1:4 char:19
          +   NonsenseString <<<<


      In questo esempio, il comando "function2 completata" non è 
      stato eseguito. Anche se entrambi gli errori fatali si 
      verificano in una funzione, se l'istruzione Trap è esterna alla 
      funzione, Windows PowerShell non torna nelle funzione dopo 
      l'esecuzione dell'istruzione Trap.


  Utilizzo delle parole chiave Break e Continue

      È possibile utilizzare le parole chiave Break e Continue in 
      un'istruzione Trap per determinare se l'esecuzione di uno 
      script o un comando prosegue dopo un errore fatale. 


      Se si include un'istruzione Break nell'elenco di istruzioni 
      Trap, viene interrotta la funzione o lo script. La funzione di 
      esempio seguente utilizza la parola chiave Break in 
      un'istruzione Trap:

          C:\PS> function break_example {
              trap {"Trap errore"; break;}
              1/$null
              "Funzione completata."
              }

          C:\PS> break_example
          Trap errore
          Attempted to divide by zero.
          At line:4 char:7


      Poiché l'istruzione Trap include la parola chiave Break, 
      l'esecuzione della funzione non prosegue e la riga "Funzione 
      completata" non viene eseguita.


      Se si include un'istruzione Continue in un'istruzione Trap, 
      l'esecuzione viene ripresa dopo l'istruzione che ha provocato 
      l'errore, come in assenza della parola chiave Break o Continue. 
      Con la parola chiave Continue, tuttavia, non viene scrive un 
      errore nel flusso di errore. 


      La funzione di esempio seguente utilizza la parola chiave 
      Continue in un'istruzione Trap:

          C:\PS> function continue_example {
              trap {"Trap errore"; continue;} 
              1/$null
              "Funzione completata."}

          C:\PS> continue_example
          Trap errore
          Funzione completata. 


      La funzione riprende dopo che viene intercettato l'errore e 
      l'istruzione "Funzione completata" viene eseguita. Non viene 
      scritto alcun errore nel flusso di errore. 


VEDERE ANCHE
    about_Break
    about_Continue
    about_Throw
    about_Try_Catch_Finally
    about_Scopes






Argomenti della Guida