Gestisci errori PowerShell come un boss con questi suggerimenti
Quando si avvia lo scripting per la prima volta in PowerShell, può essere interessante tentare di impacchettare una serie di comandi Cmdlet di PowerShell che miglioreranno le funzionalità di amministrazione di Windows Cmdlet di PowerShell che miglioreranno le abilità di amministrazione di Windows Powershell è lo strumento da riga di comando e il linguaggio di scripting delle parti uguali. Ti dà la possibilità di automatizzare il tuo computer tramite gli stessi comandi che usi per amministrarlo. Leggi di più . Tuttavia, se il tuo script fallisce, non saprai da dove iniziare la risoluzione dei problemi. Per evitare di perdere tempo a cercare di indovinare perché il tuo script ha fallito, dovresti usare la gestione degli errori.
Vi sono quattro parti nella gestione degli errori di PowerShell: il parametro Azione errore, i blocchi Try / Catch, il parametro Variabile errore e la registrazione.
PowerShell Error Handling the Easy Way
La prima volta che si desidera gestire gli errori è quando qualcosa ferma il copione nelle sue tracce. Se l'errore non influisce sui passaggi successivi, potrebbe essere meglio saltarlo e andare avanti.
D'altra parte, non è sempre chiaro quando un determinato cmdlet genera un errore di terminazione. Alcuni cmdlet restituiscono un errore ma non interrompono il tuo script. Puoi quindi finire per aspettare che il tuo script si completi mentre esce senza senso.
Questo è dove il -ErrorAction entra in parametro. Lo usi per forzare un cmdlet a gestire l'errore nel modo desiderato. Se stai modificando uno script esistente Aumenta la produttività con Windows Gli script di PowerShell aumentano la produttività con gli script di Windows PowerShell E se potessi portare la produttività di Linux a Windows? La maggior parte delle distribuzioni Linux viene fornita con la potente shell di Bash. PowerShell è un terminale altrettanto potente per Windows. Leggi altro, lo aggiungi alla fine della linea del cmdlet.
Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Stop
Ovviamente, se stai usando il Get-ChildItem cmdlet da solo, l'errore non fa molto per te. Tuttavia, se vuoi fare qualcosa con i dati, sarebbe bene interrompere lo script, quindi sai che la ricerca non è riuscita e perché. In alternativa, se stai facendo più ricerche, cambia il parametro da Stop a SilentlyContinue, quindi lo script continua se una ricerca fallisce. Se vuoi vedere qual è l'errore, puoi usare Continua come parametro invece.
Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction SilentlyContinue
Se preferisci avere l'opzione di controllare cosa succede ogni volta che il tuo script viene eseguito, puoi cambiarlo Chiedere informazioni. Quando il cmdlet raggiunge un ostacolo, offre opzioni: Sì, Sì per tutti, Interrompi comando, Sospendi o Guida.
Questa opzione è un po 'più flessibile, ma significa che gli errori fanno sì che lo script aspetti il tuo input. Potrebbe non essere qualcosa che desideri quando esegui un processo lungo durante la notte.
Errore durante la gestione del modo di programmazione
Il ErrorAction parametro affronta i tuoi errori in modo semplice. Tuttavia, se stai cercando un po 'più di controllo sugli errori, PowerShell ti ha ancora coperto. utilizzando Prova a prendere, ora possiamo diramare lo script quando i cmdlet restituiscono un errore.
Come suggerisce il nome, Prova a prendere è composto da due parti. (C'è tecnicamente un terzo, ma ci arriveremo in un minuto.) Il primo è il Provare sezione. In questo capitolo eseguirai il tuo codice normale. Stai ancora andando a usare il -ErrorAction parametro, ma può essere impostato solo come Stop. Questo flag garantisce che il cmdlet attivi il file Catturare-anche se non ha un errore di terminazione.
Prova Get-Process "Cortana" -ErrorAction Stop
Prova può anche impedire l'esecuzione di altri cmdlet se la ricerca non riesce. In questo caso, se stai inviando il Get-Process risultati a Stop-Process, una ricerca non riuscita impedisce l'esecuzione del secondo cmdlet.
Quindi ora che hai creato un blocco try di cmdlet, cosa vuoi fare quando fallisce? Usando il Catturare metà, lo definirai.
Catch Write-Host "Process Not Found"
Come con il ErrorAction parametro, quando si sta facendo qualcosa di un po 'più complesso 3 Funzioni intelligenti di PowerShell dopo l'aggiornamento a Windows 10 3 Funzioni di PowerShell intelligenti Dopo l'aggiornamento a Windows 10 Windows 10 ci porta un nuovo PowerShell, essenzialmente Prompt di comando con steroidi. Questo articolo mostra come fare altrimenti impossibile con PowerShell. Ed è più facile di quanto pensi! Leggi di più Catturare sarà utile per più di un semplice fallimento del linguaggio. (Nell'esempio sopra, l'errore è forzato usando il nome dell'app, e non il nome del processo.) Quindi assicurati di giocare con Provare blocco per creare una ricerca / azione di cui hai bisogno. Puoi usare il Catturare blocco per il tuo script per email se non riesce.
La terza parte è utile se si desidera eseguire qualcosa indipendentemente dal fatto che il proprio cmdlet abbia esito positivo o meno. Per questo, puoi usare il Finalmente bloccare. Aggiungilo dopo Try and Catch e accedi quando una sezione del tuo script termina.
La variabile di errore e la registrazione
Il tuo script ora controlla come gestisce gli errori e come risponde a loro. Puoi usarlo come operazione pianificata, o almeno eseguirlo quando non sei alla tua scrivania 5 Ragioni per cui dovresti usare PowerShell invece di script batch 5 Ragioni per cui dovresti usare PowerShell invece di script batch PowerShell è ciò che otterrai se ha attraversato il prompt dei comandi con Batch Scripting, ha aggiunto alcune funzionalità extra e ha dato un calcio a tutte le tacche. Qui ci sono diversi motivi per cui dovresti provarlo. Leggi di più . Tuttavia, come si può indagare su uno script fallito? Con il -ErrorVariable parametrizza gli errori del tuo cmdlet scrivendo su una variabile personalizzata. Questa è un'alternativa al sistema $ Error variabile, che contiene tutti gli errori della sessione corrente.
Il tuo cmdlet deve essere un po 'più lungo. Innanzitutto, definisci una variabile, qualcosa di simile $ SearchError farà per l'esempio. Quando chiami SearchError nel ErrorVariable parmeter, non usi il simbolo del dollaro. Anche se stai chiamando una variabile che hai creato, a causa del modo in cui il parametro funziona, la chiami senza il simbolo del dollaro. Quindi aggiungilo alla fine della linea.
Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Continue -ErrorVariable SearchError
Se aggiungi un + di fronte al nome della variabile, è possibile aggiungere alla variabile piuttosto che sostituirla a titolo definitivo. Questo ti dà lo stesso comportamento della variabile di errore globale. Invece, puoi usare questo output e Prova a prendere scrivere un output personalizzato e stamparlo.
Per fare in modo che funzioni, crea un file di testo subito dopo aver impostato la variabile di errore. Fallo con il Nuovo oggetto cmdlet. Potresti voler usare il Chiedere informazioni opzione per il ErrorAction parametro. Questo ti consente di aggiungere a un registro esistente quando il file Nuovo oggetto il cmdlet non riesce.
$ SearchLog = New-Item "~ \ SearchLog.txt" -tipo file -ErrorAction Richiedi
Ora quando costruisci il tuo Prova a prendere blocco, puoi usare il Catturare per accedere a un file di testo. Usate Get-Date per creare il timestamp. La formattazione può essere complicata, quindi assicurati di copiarla dall'esempio.
Prova Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Stop -ErrorVariable SearchError Catch Add-Content -Path $ SearchLog -Value "$ (Get-Date -Format dd-MM-yy- hh_mm_ss) File non trovato errore restituito: $ SearchError "
Ripeti tutto ciò che è necessario per tutti i cmdlet 15 Attività avanzate PowerShell può gestire in Windows 10 15 Attività avanzate PowerShell può gestire in Windows 10 PowerShell è simile al prompt dei comandi, ma è meglio. È un potente strumento di amministrazione del sistema. Abbiamo compilato 15 compiti, alcuni semplici, alcuni complessi, che traggono vantaggio dalla magia di PowerShell. Leggi di più, e ora hai un bel registro di eventuali errori. Se vuoi tenere traccia delle cose che funzionano con successo puoi aggiungere un simile Aggiungi contenuto alla fine di Provare bloccare. Questa registrazione viene eseguita solo quando il tuo Provare cmdlet ha esito positivo. Puoi quindi registrare i tuoi errori e i tuoi successi con i timestamp. La registrazione ora ti consente di sapere tutto ciò che il tuo script ha fatto, successo o fallimento.
Il potere del codice
Utilizzo di PowerShell nella riga di comando Prompt dei comandi e Windows PowerShell: qual è la differenza? Prompt dei comandi e Windows PowerShell: qual è la differenza? Gli utenti Windows possono cavarsela senza usare il prompt dei comandi o PowerShell. Ma con Windows 10 e nuove funzionalità dietro l'angolo, forse è ora che impariamo. Leggi altro è un modo efficace per gestire il tuo sistema. Puoi mettere insieme gli stessi comandi in un modo che consenta una potente automazione. La corretta gestione degli errori è necessaria per garantire che gli script eseguano solo ciò che si desidera. La registrazione di tutto può farti risparmiare tempo durante la risoluzione dei problemi.
C'è un tempo in cui la gestione degli errori ha salvato il bacon? Esiste uno script PowerShell che potrebbe utilizzare una migliore gestione degli errori? Qual è il tuo prossimo progetto PowerShell? Fateci sapere nei commenti.
Scopri di più su: PowerShell.