
Harry James
0
4727
584
Når du først starter scripting i PowerShell, kan det være fristende at pakke en række kommandoer Powershell Cmdlets, der forbedrer dine Windows Admin Skills Powershell Cmdlets, der forbedrer dit Windows Admin Skills Powershell er lige dele kommandolinjeværktøj og scriptingsprog. Det giver dig muligheden for at automatisere din computer via de samme kommandoer, du bruger til at administrere den. . Hvis dit script mislykkes, ved du ikke, hvor du skal starte fejlfinding. For at redde dig selv fra at spilde tid på at prøve at gætte, hvorfor dit script mislykkedes, skal du bruge fejlhåndtering.
Der er fire dele til PowerShell-fejlhåndtering: Parameteren Fejlhandling, Try / Catch-blokke, parameteren Fejlvariabel og logging.
PowerShell-fejl ved håndtering af den nemme måde
Den første gang du vil håndtere fejl er, når noget stopper dit script i dets spor. Hvis fejlen ikke påvirker dine senere trin, kan det være bedst bare at springe den over og gå videre.
På den anden side er det ikke altid klart, når en given cmdlet kaster en afslutningsfejl. Nogle cmdlets returnerer en fejl, men stopper ikke dit script. Du kan derefter ende med at vente på, at dit script skal afsluttes, mens det udsender vrøvl.
Det er her, -ErrorAction parameter kommer ind. Du bruger denne til at tvinge en cmdlet til at håndtere fejlen, som du ønsker. Hvis du ændrer et eksisterende script Øg din produktivitet med Windows PowerShell-scripts Øg din produktivitet med Windows PowerShell-scripts Hvad hvis du kunne bringe Linux-produktiviteten over til Windows? De fleste Linux-distros leveres pakket med det kraftige Bash-shell. PowerShell er en lige så kraftig terminal til Windows. , føjer du den til slutningen af cmdlet-linjen.
Get-ChildItem-path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Stop
Naturligvis, hvis du bruger Get-ChildItem cmdlet alene, gør fejlen ikke meget for dig. Hvis du imidlertid vil gøre noget med dataene, ville det være godt at stoppe scriptet, så du ved, at søgningen mislykkedes, og hvorfor. Alternativt, hvis du foretager flere søgninger, skal du ændre parameteren fra Hold op til SilentlyContinue, så scriptet fortsætter, hvis en søgning mislykkes. Hvis du vil se, hvad fejlen er, kan du bruge Blive ved som parameter i stedet.
Get-ChildItem-path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction SilentlyContinue
Hvis du hellere har mulighed for at kontrollere, hvad der sker, hver gang dit script kører, kan du ændre det til Forhøre. Når din cmdlet rammer en ulempe, giver den muligheder: Ja, ja for alle, stop kommando, suspender eller hjælp.
Denne indstilling er lidt mere fleksibel, men betyder fejl, der får dit script til at vente på dit input. Det er måske ikke noget, du ønsker, når du kører en lang proces natten over.
Fejl ved håndtering af programmeringsmåden
Det ErrorAction parameter adresserer dine fejl på en ukompliceret måde. Hvis du imidlertid leder efter en lidt mere kontrol over fejl, har PowerShell dig stadig dækket. Ved brug af Prøv / Catch, Vi kan nu forgrene scriptet, når cmdlets returnerer en fejl.
Som navnet antyder, Prøv / Catch består af to dele. (Der er teknisk set en tredjedel, men vi kommer til det om et minut.) Den første er Prøve afsnit. Du vil køre din normale kode i dette afsnit. Du vil stadig bruge -ErrorAction parameter, men det kan kun indstilles som Hold op. Dette flag sikrer, at din cmdlet udløser Fangst-selvom det ikke har en afslutningsfejl.
Prøv Get-Process "Cortana" -ErrorAction Stop
Try kan også forhindre, at andre cmdlets kører, hvis søgningen mislykkes. I dette tilfælde, hvis du sendte Get-Proces resultater til Stop-Proces, en mislykket søgning forhindrer den anden cmdlet i at køre.
Så nu, hvor du har oprettet en prøveblok med cmdlets, hvad vil du gøre, når det mislykkes? Bruger Fangst halvdelen, du vil definere dette.
Fang Skriv-vært "Process ikke fundet"
Som med ErrorAction parameter, når du laver noget mere kompliceret 3 Clever PowerShell-funktioner efter opgradering til Windows 10 3 Clever PowerShell-funktioner Efter opgradering til Windows 10 Windows 10 bringer os en ny PowerShell, i det væsentlige Kommandoprompt om steroider. Denne artikel viser dig, hvordan du gør det ellers umulige med PowerShell. Og det er lettere, end du tror! Fangst vil være nyttigt til mere end at give en almindelig sprogfejl. (I eksemplet ovenfor tvinges fejlen ved hjælp af appnavnet og ikke procesnavnet.) Så sørg for, at du spiller med Prøve bloker for at oprette en søgning / handling, du har brug for. Du kan bruge Fangst bloker for, at dit script kan e-maile dig, hvis det mislykkes.
Den tredje del er praktisk, hvis du vil have noget at køre uanset om din cmdlet lykkes eller ej. Til dette kan du bruge Langt om længe blok. Du tilføjer dette efter Try and Catch og log, når et afsnit af dit script slutter.
Fejlvariablen og logging
Dit script styrer nu, hvordan det håndterer fejl, og hvordan det reagerer på dem. Du kan bruge den som en planlagt opgave, eller i det mindste køre den, når du ikke er ved skrivebordet. 5 grunde til, at du skal bruge PowerShell i stedet for batch-scripting 5 grunde til, at du skal bruge PowerShell i stedet for batch-scripting, PowerShell er, hvad du ville få, hvis du krydsede kommandoprompten med batch scripting, kastede nogle ekstra funktioner og sparkede det hele op ad flere hak. Her er flere grunde til at du skal prøve det. . Hvordan kan du dog undersøge et mislykket script? Med -ErrorVariable parameter din cmdlets fejl skriv til en brugerdefineret variabel. Dette er et alternativ til systemet $ Fejl variabel, der indeholder alle fejlene fra den aktuelle session.
Din cmdlet skal være lidt længere. Først skal du definere en variabel, noget som $ SearchError gør for eksempel. Når du ringer SearchError i ErrorVariable parmeter, du bruger ikke dollartegnet. Selvom du ringer til en variabel, du oprettede, på grund af den måde, parameteren fungerer på, kalder du den uden dollartegnet. Derefter tilføjes det til slutningen af linjen.
Get-ChildItem-path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Fortsæt -ErrorVariable SearchError
Hvis du tilføjer en + foran variabelnavnet kan du tilføje variablen i stedet for at erstatte den direkte. Det giver dig den samme opførsel som den globale fejlvariabel. I stedet kan du bruge denne output og Prøv / Catch at skrive brugerdefineret output og tidsstempel det.
For at gøre dette arbejde skal du oprette en tekstfil lige efter du har indstillet fejlvariablen. Gør dette med Ny-element cmdlet. Du ønsker måske at bruge Forhøre mulighed for ErrorAction parameter. Dette giver dig mulighed for at føje til en eksisterende log, når Ny-element cmdlet mislykkes.
$ SearchLog = New-Item "~ \ SearchLog.txt" -typefil -ErrorAction Forespørgsel
Nu når du bygger din Prøv / Catch blokere, kan du bruge Fangst at logge på en tekstfil. Du bruger Get-Date at oprette tidsstemplet. Formateringen kan være en vanskelig, så husk at kopiere den fra eksemplet.
Prøv 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) Filer ikke fundet returnerede fejl: $ SearchError "
Gentag det efter behov for alle dine cmdlets 15 Avancerede opgaver PowerShell kan håndtere i Windows 10 15 Avancerede opgaver PowerShell Can håndtere i Windows 10 PowerShell ligner kommandoprompten, men bedre. Det er et kraftfuldt systemadministrationsværktøj. Vi har samlet 15 opgaver, nogle enkle, nogle komplekse, der drager fordel af magien fra PowerShell. , og du har nu en dejlig log over eventuelle fejl. Hvis du vil spore ting, der kører med succes, kan du tilføje en lignende Add-indhold i slutningen af Prøve blok. Denne logning kører kun, når din Prøve cmdlet lykkes. Du kan derefter logge dine fejl og succeser med tidsstempler. Logningen lader dig nu vide alt hvad dit script har gjort, succes eller fiasko.
Kodens magt
Brug af PowerShell på kommandolinjen Kommandoprompt vs. Windows PowerShell: Hvad er forskellen? Kommandoprompt vs. Windows PowerShell: Hvad er forskellen? Windows-brugere kan klare sig uden at bruge hverken kommandoprompten eller PowerShell. Men med Windows 10 og nye funktioner rundt om hjørnet, er det måske på tide, vi lærte. er en effektiv måde at administrere dit system på. Du kan strenge de samme kommandoer sammen på en måde, der tillader kraftig automatisering. Korrekt fejlhåndtering er nødvendig for at sikre, at dine scripts kun gør det, du vil have dem til. Ved at logge alt kan du spare tid ved fejlfinding.
Er der et tidspunkt, hvor fejlhåndtering gemte din bacon? Er der et PowerShell-script, du har, der kan bruge en bedre fejlhåndtering? Hvad er dit næste PowerShell-projekt? Fortæl os det i kommentarerne.