Håndtere PowerShell-feil som en chef med disse tipsene
Når du først starter skripting i PowerShell, kan det være fristende å pakke opp en rekke kommandoer Powershell Cmdlets som vil forbedre Windows Admin Ferdigheter Powershell Cmdlets som vil forbedre Windows Admin Ferdigheter Powershell er like deler kommandolinjeverktøy og skriptspråk. Det gir deg muligheten til å automatisere datamaskinen din via de samme kommandoene du bruker til å administrere den. Les mer . Men hvis skriptet mislykkes, vet du ikke hvor du skal starte feilsøkingen. For å spare deg fra å kaste bort tid på å prøve å gjette hvorfor skriptet ditt mislyktes, bør du bruke feilhåndtering.
Det er fire deler til PowerShell-feilhåndtering: Feilhandling-parameteren, Prøv / Catch-blokker, parameteren Feilvariabel og logging.
PowerShell-feil Håndtering av den enkle måten
Første gang du vil håndtere feil er når noe stopper skriptet ditt i sporene sine. Hvis feilen ikke påvirker de senere trinnene, kan det være best å hoppe over det og fortsette.
På den annen side er det ikke alltid klart når en gitt cmdlet kaster en avslutningsfeil. Noen cmdlets returnerer en feil, men stopp ikke skriptet ditt. Du kan da ende opp med å vente på at skriptet ditt skal fullføres mens det utkommer nonsens.
Det er her -ErrorAction parameteren kommer inn. Du bruker dette til å tvinge en cmdlet til å håndtere feilen slik du vil. Hvis du endrer et eksisterende skript Øk produktiviteten din med Windows PowerShell-skript øker produktiviteten din med Windows PowerShell-skript Hva om du kan overføre produktiviteten til Linux til Windows? De fleste Linux distros kommer pakket med det kraftige Bash-skallet. PowerShell er en like kraftig terminal for Windows. Les mer, du legger det til slutten av cmdlet-linjen.
Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Reservering -ErrorAction Stopp
Åpenbart, hvis du bruker Get-ChildItem cmdlet på egen hånd, gjør feilen ikke mye for deg. Men hvis du vil gjøre noe med dataene, ville det være bra å stoppe skriptet, slik at du vet at søket mislyktes og hvorfor. Alternativt, hvis du gjør flere søk, endrer du parameteren fra Stoppe til SilentlyContinue, så skriptet fortsetter hvis et søk mislykkes. Hvis du vil se hva feilen er, kan du bruke Fortsette som parameter i stedet.
Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Reservering -ErrorAction SilentlyContinue
Hvis du hellere vil ha muligheten til å kontrollere hva som skjer hver gang skriptet kjører, kan du endre det til Spørre. Når din cmdlet treffer en snag, gir den alternativer: Ja, Ja for alle, Halt kommando, Suspend eller Hjelp.
Dette alternativet er litt mer fleksibelt, men betyr at feilene forårsaker at skriptet ditt venter på input. Det kan ikke være noe du vil ha når du kjører en lang prosess over natten.
Feil Håndtering av programmeringsveien
De ErrorAction parameteren adresserer feilene dine på en ukomplisert måte. Men hvis du er ute etter litt mer kontroll over feil, har PowerShell deg fortsatt dekket. Ved hjelp av Prøv / Catch, Vi kan nå avgrense skriptet når cmdlets returnerer en feil.
Som navnet antyder, Prøv / Catch består av to deler. (Det er teknisk en tredjedel, men vi kommer til det om et minutt.) Den første er Prøve seksjon. Du skal kjøre din normale kode i denne delen. Du skal fremdeles bruke -ErrorAction parameter, men det kan bare settes som Stoppe. Dette flagget sikrer at din cmdlet utløser Å fange-selv om det ikke har en avslutningsfeil.
Prøv Get-Process "Cortana" -ErrorAction Stopp
Prøv kan også forhindre andre cmdlets i å kjøre hvis søket mislykkes. I dette tilfellet, hvis du sendte den Get-Process resultater til Stop-Process, et mislykket søk forhindrer det andre cmdletet i å kjøre.
Så nå som du har opprettet en prøveblokk med cmdlets, hva vil du gjøre når det mislykkes? Bruker Å fange halv, du skal definere dette.
Catch Write-Host "-prosessen ikke funnet"
Som med ErrorAction parameter når du gjør noe litt mer komplisert 3 Smart PowerShell-funksjoner etter oppgradering til Windows 10 3 Klare PowerShell-funksjoner etter oppgradering til Windows 10 Windows 10 gir oss en ny PowerShell, hovedsakelig kommandoprompt på steroider. Denne artikkelen viser hvordan du gjør det ellers umulige med PowerShell. Og det er lettere enn du tror! Les mer Å fange vil være nyttig for mer enn å gi en vanlig språkfeil. (I eksemplet ovenfor blir feilen tvunget ved å bruke appnavnet, og ikke prosessnavnet.) Sørg derfor for at du spiller med Prøve blokkere for å opprette et søk / tiltak du trenger. Du kan bruke Å fange blokk for skriptet ditt for å sende deg e-post hvis det mislykkes.
Den tredje delen kommer til nytte hvis du vil ha noe å løpe, uansett om din cmdlet lykkes eller ikke. For dette kan du bruke Endelig blokkere. Du legger til dette etter Prøv og Fang og logg når en del av skriptet avsluttes.
Feilvariabel og logging
Skriptet ditt kontrollerer nå hvordan det håndterer feil og hvordan det reagerer på dem. Du kan bruke den som en planlagt oppgave eller i det minste kjøre den når du ikke er på skrivebordet. 5 Grunner du bør bruke PowerShell i stedet for batchskripting. 5 grunner til at du bør bruke PowerShell I stedet for batchskripting, PowerShell er hva du får hvis du krysset Kommandoprompt med Batch Scripting, kastet inn noen ekstra funksjoner, og sparket det opp flere hakk. Her er flere grunner til at du bør prøve det. Les mer . Men hvordan kan du undersøke et mislyktes skript? Med -ErrorVariable parameteren din cmdlets feil skriv til en tilpasset variabel. Dette er et alternativ til systemet $ Feil variabel, som inneholder alle feilene fra den nåværende økten.
Din cmdlet trenger litt lengre tid. Definer først en variabel, noe som $ SearchError vil gjøre for eksempelet. Når du ringer SearchError i ErrorVariable parmeter, du bruker ikke dollarskiltet. Selv om du ringer en variabel du opprettet, på grunn av måten parameteren fungerer, kaller du den uten dollarteegnet. Legg deretter til det på slutten av linjen.
Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Reservering -ErrorAction Fortsett -ErrorVariable SearchError
Hvis du legger til en + foran variabelenavnet kan du legge til variabelen i stedet for å erstatte den direkte. Det får deg samme oppførsel som den globale feilvariabelen. I stedet kan du bruke denne utgangen og Prøv / Catch å skrive tilpasset produksjon, og tidsstempel det.
For å gjøre dette arbeidet, opprett en tekstfil rett etter at du har angitt feilvariabelen. Gjør dette med Ny gjenstand cmdlet. Du vil kanskje bruke Spørre alternativ for ErrorAction parameter. Dette lar deg legge til i en eksisterende logg når Ny gjenstand cmdlet mislykkes.
$ SearchLog = New Item "~ \ SearchLog.txt" -type fil -ErrorAction Forespørre
Nå når du bygger din Prøv / Catch blokkere, kan du bruke Å fange å logge på en tekstfil. Du bruker Get-Date å lage tidsstempel. Formateringen kan være vanskelig, så vær sikker på å kopiere det fra eksemplet.
Prøv Get-ChildItem -Path "~ \ Documents \ * .jpg" -Research -ErrorAction Stop -ErrorVariable SearchError Fang Add-Content -Path $ SearchLog -Value "$ (Get-Date-Format dd-MM-yy- hh_mm_ss) Filer ikke funnet returnerte feil: $ SearchError "
Gjenta det som trengs for alle dine cmdlets 15 Avanserte oppgaver PowerShell kan håndtere Windows 10 15 Avanserte oppgaver PowerShell kan håndtere i Windows 10 PowerShell ligner kommandoprompten, men bedre. Det er et kraftig systemadministrasjonsverktøy. Vi har samlet 15 oppgaver, noen enkle, noen komplekse, som drar nytte av magien til PowerShell. Les mer, og du har nå en fin logg over eventuelle feil. Hvis du vil spore ting som kjører, kan du legge til en lignende Add-innhold på slutten av Prøve blokkere. Denne loggingen kjører bare når din Prøve cmdlet lykkes. Du kan da logge dine feil og suksesser med tidsstempler. Med loggingen kan du nå vite alt som skriptet ditt har gjort, suksess eller fiasko.
Kraftens kraft
Bruke PowerShell på kommandolinjen Kommandoprompt vs Windows PowerShell: Hva er forskjellen? Kommandoprompt vs Windows PowerShell: Hva er forskjellen? Windows-brukere kan komme forbi uten å bruke kommandoprompt eller PowerShell. Men med Windows 10 og nye funksjoner rundt hjørnet, kanskje er det på tide vi lærte. Les mer er en kraftig måte å administrere systemet på. Du kan strenge de samme kommandoene sammen på en måte som gir kraftig automatisering. Riktig feilhåndtering er nødvendig for å sikre at skriptene bare gjør det du vil ha dem til. Ved å logge alt, kan du spare tid når du feilsøker.
Er det en tid da feilhåndtering lagret baconet ditt? Er det et PowerShell-skript du har som kan bruke bedre feilhåndtering? Hva er ditt neste PowerShell-prosjekt? Gi oss beskjed i kommentarene.
Utforsk mer om: PowerShell.