- Differenze tra errori terminali e non terminali in PowerShell
- Utilizzo avanzato di Try/Catch/Fally e variabili come $Error e $ErrorActionPreference
- Come controllare e personalizzare i messaggi di errore per una diagnosi migliore
- Cattura di eccezioni specifiche utilizzando i tipi e utilizzando Write-Error
PowerShell è uno degli strumenti più potenti e versatili per automatizzare le attività negli ambienti Windows . Tuttavia, come ogni linguaggio di scripting, non è esente da errori ed eccezioni . Comprendere come questi errori vengono segnalati, gestiti e trattati è fondamentale per creare script robusti, chiari e facili da sottoporre a debug.
In questo articolo, ci immergeremo a capofitto nel mondo degli errori e delle eccezioni in PowerShell . Imparerai non solo a identificare correttamente i diversi tipi di errore, ma anche a lavorare efficacemente con strutture come Try/Catch/Finally , a utilizzare variabili chiave come $Error o $ErrorActionPreference e a padroneggiare tecniche avanzate come il lancio e la gestione delle eccezioni con tipi specifici.
Errori di PowerShell: concetti chiave
Quando si utilizza PowerShell, gli errori sono una parte integrante dello sviluppo quotidiano degli script. Un errore è essenzialmente qualsiasi condizione imprevista che si verifica durante l'esecuzione del codice. Ma non tutti gli errori sono uguali, né vengono gestiti allo stesso modo.
Possiamo classificare gli errori in due tipi principali : errori terminanti ed errori non terminanti.
- Errori di terminazione: sono errori critici che fermarsi immediatamente l'esecuzione dello script o del cmdlet. Questi errori possono essere catturati utilizzando le strutture
try/catch. - Errori non fatali: non interrompere lo script. PowerShell li segnala semplicemente in rosso e li salva in
$Errore continua a eseguire il resto del codice.
Ad esempio, se si tenta di accedere a un file inesistente, PowerShell in genere segnala l'errore ma continua l'elaborazione a meno che non si specifichi diversamente. Per ulteriori informazioni sulla gestione avanzata degli errori, consultare il nostro articolo sulla gestione degli errori in PowerShell.
La variabile $Error e come utilizzarla
PowerShell conserva una cronologia degli errori nella variabile automatica $Error, che funge da elenco in cui vengono memorizzati tutti gli errori verificatisi durante la sessione.
Alcune informazioni chiave su questa variabile:
$ErrorÈ sempre l'errore più recente.- Contiene oggetti di tipo ErrorRecord, non solo messaggi di testo.
- Massimo 256 errori memorizzati per impostazione predefinita, configurabile tramite
$MaximumErrorCount.
Esempio di utilizzo:
# Ver el último error
$Error
# Limpiar la lista de errores
$Error.Clear()
Tieni presente che, essendo una variabile globale, qui vengono memorizzati gli errori dell'intera sessione , non solo quelli generati dal tuo script. Pertanto, è consigliabile non farvi eccessivo affidamento o cancellarla se intendi lavorare con nuovi record.
Puoi anche usare VariabileErrore in alternativa, che cattura gli errori in variabili specifiche per ogni cmdlet, senza influenzare il globale $Error.
Parametri e preferenze per la gestione degli errori
PowerShell offre diversi modi per decidere come devono comportarsi gli errori . I due più rilevanti sono:
- Parametro
-ErrorAction: È possibile utilizzarlo quando si richiama un cmdlet per decidere come agire in caso di errore. - La variabile globale
$ErrorActionPreference: Imposta la politica di errore generale per l'intero ambiente o script.
I valori che puoi utilizzare sono:
- Continua (predefinito): visualizza l'errore e continua l'esecuzione.
- SilenziosamenteContinua: Non mostra l'errore ma lo salva in
$Error. - Fermare: Tratta gli errori come fatali e fermare lo script, consentendo loro di essere catturati con
try/catch. - Informarsi: Chiedi all'utente cosa fare.
- ignorare (da PowerShell 3.0): ignora completamente l'errore, senza salvarlo né visualizzarlo.
Esempio pratico:
$ErrorActionPreference = "Stop" # Todos los errores serán tratados como fatales
Get-ChildItem "C:\RutaInexistente" -ErrorAction SilentlyContinue
Questo ci offre un'incredibile flessibilità nel decidere quali tipi di errori vale la pena interrompere e quali no . Per maggiori dettagli sulla gestione degli errori negli script, consulta la nostra guida sull'esecuzione di script in PowerShell.
Utilizzo di Try, Catch e Finally
A partire da PowerShell 2.0, possiamo utilizzare i blocchi try/catch/finally per gestire gli errori in modo strutturato.
La sua sintassi è la seguente:
Try {
# Código que podría fallar
}
Catch {
# Código para manejar esa excepción
}
Catch {
# Código para manejar errores genéricos
}
Finally {
# Código que siempre se ejecuta al final, falle o no
}
Il blocco Try esegue del codice che potrebbe potenzialmente generare un errore. Se si verifica un errore irreversibile (che interrompe l'esecuzione), il codice salta al blocco Catch corrispondente. Se non viene specificato alcun tipo di eccezione, qualsiasi errore viene intercettato.
Il blocco Finally è facoltativo ma utile quando è necessario liberare risorse, chiudere connessioni o eseguire operazioni di pulizia.
Esempio reale:
Try {
Get-Content "C:\ArchivoInexistente.txt" -ErrorAction Stop
}
Catch {
Write-Error "No se pudo abrir el archivo: $($_.Exception.Message)"
}
Finally {
Write-Output "Finalizado"
}
All'interno di Catch è possibile utilizzare variabili automatiche $_ o $PSItem per ottenere i dettagli dell'errore, come il suo messaggio, tipo, stack trace, ecc. Se vuoi saperne di più su come migliorare gli script e gestire eccezioni specifiche, consulta il nostro articolo su correzioni di bug in Windows 10.
...
Saper gestire correttamente gli errori in PowerShell è fondamentale per creare script professionali e impedire che attività critiche vengano bloccate da problemi di poco conto. Padroneggiare strutture come Try/Catch/Finally, comprendere le variabili automatiche offerte da PowerShell e imparare a lavorare con le eccezioni tipizzate sono passi fondamentali per migliorare la qualità del codice.
Inoltre, strumenti come Errore di scrittura, combinato con parametri quali -ErrorAction, ci danno il controllo completo su quando e come visualizzare gli errori, consentendoci di personalizzarli nei dettagli e di contribuire a offrire un'esperienza migliore a chi esegue i nostri script.
Scrittore appassionato del mondo dei byte e della tecnologia in generale. Adoro condividere le mie conoscenze attraverso la scrittura, ed è quello che farò in questo blog, mostrarti tutte le cose più interessanti su gadget, software, hardware, tendenze tecnologiche e altro ancora. Il mio obiettivo è aiutarti a navigare nel mondo digitale in modo semplice e divertente.
