Hantera PowerShell Fel som en chef med dessa tips
När du först börjar skripta i PowerShell kan det vara frestande att paketera upp en serie kommandon Powershell Cmdlets som kommer att förbättra dina Windows-administrativa färdigheter Powershell Cmdlets som kommer att förbättra dina Windows-administrativa färdigheter Powershell är lika delar kommandoradsverktyg och skriptspråk. Det ger dig möjligheten att automatisera din dator via samma kommandon som du använder för att administrera den. Läs mer . Men om ditt skript misslyckas vet du inte var du ska börja felsökning. För att spara dig från att slösa tid på att försöka gissa varför ditt skript misslyckades, ska du använda felhantering.
Det finns fyra delar i PowerShell-felhantering: felaktighetsparametern, försök / fångstblock, parametern Felvariabel och loggning.
PowerShell-fel Hantera det enkla sättet
Första gången du vill hantera fel är när något stoppar ditt skript i spåren. Om felet inte påverkar dina senare steg kan det vara bäst att hoppa över det och fortsätta.
Å andra sidan är det inte alltid klart när en given cmdlet slår ett avslutningsfel. Vissa cmdlets returnerar ett fel men stoppar inte ditt skript. Du kan då sluta vänta på att ditt skript ska slutföra medan det utmatar nonsens.
Det är här -ErrorAction parametern kommer in. Du använder detta för att tvinga en cmdlet att hantera felet på det sätt du vill ha. Om du ändrar ett befintligt skript Öka din produktivitet med Windows PowerShell-skript ökar produktiviteten med Windows PowerShell-skript Vad händer om du kan överföra produktiviteten till Linux till Windows? De flesta Linux distros kommer packade med det kraftfulla Bash-skalet. PowerShell är en lika kraftfull terminal för Windows. Läs mer, du lägger till det i slutet av cmdlet-raden.
Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Reservering -ErrorAction Stop
Självklart, om du använder Get-ChildItem cmdlet på egen hand, gör felet inte mycket för dig. Men om du vill göra någonting med data, är det bra att stoppa manuset, så du vet att sökningen misslyckades och varför. Alternativt, om du gör flera sökningar, ändra parametern från Sluta till SilentlyContinue, så fortsätter manuset om en sökning misslyckas. Om du vill se vad felet är, kan du använda Fortsätta som parameter istället.
Get-ChildItem -Path "~ \ Documents \ * .jpg" -Reservering -ErrorAction SilentlyContinue
Om du hellre skulle ha möjlighet att kontrollera vad som händer varje gång ditt skript körs kan du ändra det till Fråga. När din cmdlet träffar en snag, ger det alternativ: Ja, Ja för alla, Håll kommando, Stopp eller Hjälp.
Det här alternativet är lite mer flexibelt men innebär att fel gör att ditt skript väntar på din inmatning. Det kanske inte är något du vill ha när du kör en lång process över natten.
Fel vid hantering av programmeringsväg
De ErrorAction parameter adresserar dina fel på ett okomplicerat sätt. Men om du letar efter lite mer kontroll över fel har PowerShell dig fortfarande täckt. Använder sig av Försök fånga, Vi kan nu filialera skriptet när cmdlets returnerar ett fel.
Som namnet antyder, Försök fånga består av två delar. (Det är tekniskt en tredje, men vi kommer att få det på en minut.) Den första är Prova sektion. Du kommer att köra din normala kod i det här avsnittet. Du kommer fortfarande att använda -ErrorAction parameter, men den kan bara ställas in som Sluta. Denna flagga säkerställer att din cmdlet utlöser Fånga-även om det inte har ett avslutningsfel.
Prova Get-Process "Cortana" -ErrorAction Stop
Försök kan också förhindra att andra cmdlets körs om sökningen misslyckas. I det här fallet, om du skickade Get-Process resultat till Stop-Process, en misslyckad sökning förhindrar att den andra cmdleten körs.
Så nu som du har skapat ett försök block av cmdlets, vad vill du göra när det misslyckas? Använda Fånga Halva, du kommer att definiera detta.
Catch Write-Host "-processen hittades inte"
Som med ErrorAction parameter när du gör något lite mer komplicerat 3 Snabba PowerShell-funktioner efter uppgradering till Windows 10 3 Snabba PowerShell-funktioner efter uppgradering till Windows 10 Windows 10 ger oss en ny PowerShell, i huvudsak kommandotolk på steroider. Den här artikeln visar hur du gör det annars omöjligt med PowerShell. Och det är lättare än du tror! Läs mer Fånga kommer att vara användbart för mer än att ge ett vanligt språkfel. (I exemplet ovan tvingas felet genom att använda appnamnet och inte processnamnet.) Se så till att du spelar med Prova blockera för att skapa en sökning / åtgärd du behöver. Du kan använda Fånga blockera ditt skript för att maila dig om det misslyckas.
Den tredje delen kommer till nytta om du vill ha något att springa oavsett om din cmdlet lyckas eller inte. För detta kan du använda Till sist blockera. Du lägger till detta efter Prova och fånga och logga när en del av ditt skript slutar.
Felvariabler och loggning
Skriptet kontrollerar nu hur det hanterar fel och hur det svarar på dem. Du kan använda den som en schemalagd uppgift eller åtminstone köra den när du inte är på skrivbordet. 5 Anledningar att du ska använda PowerShell i stället för batchskripting 5 Anledningar att du ska använda PowerShell I stället för batchskriptning PowerShell är vad du skulle få om du Korsade Kommandotolken med Batch Scripting, kastade in några extra funktioner och sparkade upp det hela flera skåror. Här är flera skäl att du ska försöka. Läs mer . Hur kan du undersöka ett misslyckat skript? Med -ErrorVariable parametern din cmdlets fel skriver till en anpassad variabel. Detta är ett alternativ till systemet $ Error variabel, som innehåller alla fel från den aktuella sessionen.
Din cmdlet behöver bli lite längre. Definiera först en variabel, något liknande $ SearchError kommer att göra för exemplet. När du ringer SearchError i ErrorVariable parmeter, du använder inte dollarteckenet. Även om du ringer en variabel du skapade, på grund av hur parametern fungerar kallar du den utan dollartecken. Lägg sedan till det i slutet av raden.
Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Fortsätt -ErrorVariable SearchError
Om du lägger till en + framför variabelnamnet kan du lägga till variabeln istället för att ersätta den direkt. Det får du samma beteende som den globala felvariabeln. Istället kan du använda den här utmatningen och Försök fånga att skriva anpassad produktion och tidstämpla den.
För att göra detta arbete, skapa en textfil direkt efter att du ställt in felsvariabeln. Gör det här med Nytt föremål cmdlet. Du kanske vill använda Fråga alternativ för ErrorAction parameter. Detta låter dig lägga till en befintlig logg när Nytt föremål cmdlet misslyckas.
$ SearchLog = New Item "~ \ SearchLog.txt" -typ fil -ErrorAction Förfrågan
Nu när du bygger din Försök fånga block, kan du använda Fånga att logga in i en textfil Du använder Get-Date för att skapa tidsstämpeln. Formateringen kan vara en knepig så var noga med att kopiera den från exemplet.
Försök Get-ChildItem -Path "~ \ Documents \ * .jpg" -Recurse -ErrorAction Stop -ErrorVariable SearchError Fånga Add-Content -Path $ SearchLog -Value "$ (Get-Date -Format dd-MM-yy- hh_mm_ss) Filerna hittades inte returnerade fel: $ SearchError "
Repetera det som behövs för alla dina cmdlets 15 Avancerade uppgifter PowerShell kan hantera Windows 10 15 Avancerade uppgifter PowerShell kan hantera Windows 10 PowerShell liknar kommandotolken, men bättre. Det är ett kraftfullt systemadministrationsverktyg. Vi har sammanställt 15 uppgifter, några enkla, lite komplexa, som dra nytta av MagicShells magi. Läs mer, och du har nu en bra logg om eventuella fel. Om du vill spåra saker som körs med framgång kan du lägga till en liknande Add-innehåll i slutet av Prova blockera. Denna loggning körs endast när din Prova cmdlet lyckas. Du kan sedan logga in dina fel och framgångar med tidstämplar. Med loggningen kan du nu veta allt som ditt skript har gjort, framgång eller misslyckande.
Kraftens kraft
Använda PowerShell på kommandoraden Command Prompt vs. Windows PowerShell: Vad är skillnaden? Command Prompt vs Windows PowerShell: Vad är skillnaden? Windows-användare kan klara sig utan att använda kommandotolken eller PowerShell. Men med Windows 10 och nya funktioner runt hörnet kanske det är dags att vi lärde oss. Read More är ett kraftfullt sätt att hantera ditt system. Du kan stränga samma kommandon på ett sätt som möjliggör kraftfull automation. Korrekt felhantering är nödvändig för att säkerställa att dina skript bara gör vad du vill att de ska. Om du loggar på allt kan du spara tid när du felsöker.
Finns det en tid då felhantering räddade din bacon? Finns det ett PowerShell-skript du har som kan använda bättre hantering av fel? Vad är ditt nästa PowerShell-projekt? Låt oss veta i kommentarerna.
Utforska mer om: PowerShell.