Oglas

Kao što naziv govori, PowerShell je puno moćniji od standardnog Windows naredbenog retka. S tom snagom dolazi i veća mogućnost zbunjujućih pogrešaka. Ako vam scenarij iznenada zakaže, možda ne znate odakle početi tražiti što je pošlo po zlu. Ovdje je korisno rukovanje pogreškama PowerShela.

Ako poznajete druge jezike, vjerojatno znate osnove rukovanja pogreškama, ali postoje neki aspekti specifični za PowerShell koji ćete morati znati. U PowerShell-u postoje četiri dijela upravljanja pogreškama: parametar Error Action (Pogreška radnje), Try / Catch blokovi, parametar Error Variable i evidentiranje.

Pogreška PowerShell-a Rukovanje lakim putem

Prvi korak u upravljanju pogreškama PowerShell-a je rješavanje nečega što zaustavlja vašu skriptu u njezinim pjesmama. Ako neuspjeh ne utječe na ostatak vaše skripte, možda bi bilo najbolje samo reći PowerShellu da zanemari pogreške i krene dalje.

S druge strane, nije uvijek jasno kada neki cmdlet baca krajnju grešku. Neki cmdleti vraćaju pogrešku, ali ne zaustavljaju vašu skriptu. Ovo bi moglo ostaviti da čekate da se vaša skripta dovrši, dok ona proizvodi gluposti.

instagram viewer

Ovdje je -ErrorAction uđe parametar. Ovim se forsirate na cmdlet da radi s pogreškom na način koji želite. Ako modificirate postojeću skriptu, dodajete je na kraju retka cmdlet.

Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Stop

Očito ako koristite Get-ChildItem cmdlet samostalno, ova pogreška ne čini mnogo za vas. Međutim, ako želite učiniti bilo što s podacima, bilo bi dobro zaustaviti skriptu, tako da znate da pretraživanje nije uspjelo i zašto. Alternativno, ako obavljate više pretraživanja, promijenite parametar iz Stop do SilentlyContinue, pa se skripta nastavlja ako pretraživanje ne uspije. Ako želite vidjeti u čemu je pogreška, možete to koristiti Nastaviti umjesto parametra.

Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction SilentlyContinue

Ako biste radije imali mogućnost kontrole onog što se događa svaki put kada se skripta pokrene, možete je promijeniti u Upit. Kada vaš cmdlet udari u njušku, daje opcije: Da, Da za sve, Zaustavite naredbu, Obustaviti, ili Pomozite.

Jednostavno rukovanje pogreškama PowerShell korištenjem ErrorAction

Ova je opcija malo fleksibilnija, ali znači da pogreške uzrokuju da scenarij čeka vaš unos. To je u redu ako upotrebljavate PowerShell za slanje e-pošte Kako poslati e-poštu pomoću Windows PowerShell-aŽelite li poslati e-poštu izbirljiv način? Evo kako možete poslati e-poštu putem Windows PowerShell-a. Čitaj više ili nekog drugog jednostavnog zadatka, ali možda to nije nešto što želite kada provodite dugačak postupak preko noći.

Pogreška PowerShell-a Rukovanje snažnim putem

ErrorAction parametar rješava vaše pogreške na jednostavan način. Međutim, ako tražite malo više kontrole nad pogreškama, PowerShell vam je i dalje obuhvaćen. koristeći Pokušaj uhvatiti, sada možemo razgranati skriptu kada cmdleti vrate grešku.

Pogreška pri rukovanju u programu PowerShell pomoću pokušaja / ulova

Kao što ime sugerira, Pokušaj uhvatiti sastoji se od dva dijela. (Tehnički postoji trećina, ali do toga ćemo doći za minutu.) Prvo je Probati odjeljak. U ovom ćete dijelu pokrenuti svoj uobičajeni kod. I dalje ćete koristiti -ErrorAction parametar, ali može se postaviti samo kao Stop. Ova zastava osigurava da vaš cmdlet aktivira Ulov—Čak i ako nema grešku u zatvaranju.

Pokušajte {Get-Process "Cortana" -ErrorAction Stop. }

Pokušajte također možete spriječiti pokretanje drugih cmdleta ako pretraživanje ne uspije. U ovom slučaju, ako ste slali Get-Process rezultata do Stop-Proces, neuspješno pretraživanje sprječava pokretanje drugog cmdleta.

Dakle, sada kad ste napravili pokušajni blok cmdleta, što želite učiniti kad ne uspije? Koristiti Ulov pola, to ćete definirati.

Hatch {Write-host "Proces nije pronađen" }

Kao i kod ErrorAction parametar, kad radite nešto malo složenije Ulov bit će korisno za više nego davanje običnog jezika, pogotovo kad radite nešto malo složenije. (U gornjem primjeru, neuspjeh je prisiljen upotrebom naziva aplikacije, a ne naziva procesa.) Stoga se pobrinite da se igrate sa Probati blok za stvaranje pretraživanja / radnje koja vam je potrebna. Možete koristiti Ulov blokirajte vašu skriptu ako vam ne pošalje poruku e-pošte.

Treći dio vam je koristan ako želite da se nešto pokrene bez obzira da li vaš cmdlet uspijeva ili ne. Za to možete koristiti Konačno blok. To dodajete nakon Isprobajte i uhvatite i prijavite se kad odjeljak skripte završi.

Varijabla pogreške i evidentiranje

Vaša skripta sada kontrolira kako postupa s greškama i kako na njih reagira. Možete ga koristiti kao zakazan zadatak ili ga barem pokrenuti kada niste za svojim stolom. Međutim, kako možete istražiti neuspjelu skriptu? Sa -ErrorVariable parametrirajte pogreške greške u cmdletu u prilagođenu varijablu.

Ovo je alternativa sustavu $ Greška varijabla, koja sadrži sve pogreške iz trenutne sesije.

Vaša cmdlet mora malo duže. Prvo definirajte varijablu, nešto slično $ SearchError učinit će za primjer. Kad nazovete SearchError u ErrorVariable parmetar, ne upotrebljavate znak dolara.

Iako zovete varijablu koju ste stvorili, zbog načina na koji parametar radi nazivate ga bez znaka dolara. Zatim dodajte to na kraj retka.

Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Continue -ErrorVariable SearchError

Ako dodate a + ispred naziva varijable možete je dodati varijabli, a ne izravno je zamijeniti. Zbog toga dobivate isto ponašanje kao i varijabla globalne pogreške. Umjesto toga, možete koristiti ovaj izlaz i Pokušaj uhvatiti napisati prilagođeni izlaz i vremenski žig.

Zabilješka pogreške PowerShell-a

Da biste ovo učinili, kreirajte tekstualnu datoteku odmah nakon što postavite varijablu pogreške. Učinite to s Nova stvar cmdlet. Možda želite koristiti Upit mogućnost za ErrorAction parametar. To vam omogućuje dodavanje u postojeći dnevnik kada Nova stvar cmdlet ne uspijeva.

$ SearchLog = Nova stavka "~ \ SearchLog.txt" datoteka tipa -ErrorAction Upit

Sad kad izgradite svoj Pokušaj uhvatiti blok, možete koristiti Ulov za prijavu u tekstualnu datoteku. Ti koristiš Get-datum za stvaranje vremenske oznake. Oblikovanje može biti lukavo pa obavezno to kopirajte iz primjera.

Pokušajte {Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Stop -ErrorVariable SearchError. } Uhvatite {Add-Content -Path $ SearchLog -Value "$ (Get-Date -Format dd-MM-yy-hh_mm_ss) Datoteke nisu pronađene vraćene pogreške: $ SearchError" }

Ponovite to prema potrebi za sve svoje cmdlete i sada imate lijep dnevnik svih grešaka. Ako želite pratiti stvari koje uspješno rade, možete dodati slično Add-Sadržaj na kraju Probati blok.

Ova se prijava pokreće samo kada Probati cmdlet uspijeva. Zatim možete zabilježiti svoje pogreške i uspjehe pomoću vremenskih oznaka. Zapisivanje sada daje vam do znanja sve što je vaš scenarij učinio, uspjeh ili neuspjeh.

PowerShell nije vaša jedina opcija

Iako je PowerShell koristan alat za mnoštvo Windows zadataka, to može biti teško naučiti. Također nije prikladno za sve. Ako radite održavanje sustava na računalu ili provjera integriteta datoteke, PowerShell je zgodan. S druge strane, ako želite pokrenuti skriptu za preuzimanje datoteka s interneta ili neki općenitiji zadatak, imate druge mogućnosti.

Na primjer, ako potječete iz Unix ili Linux pozadine, možda će vam biti ugodnije koristiti bash školjku. Zahvaljujući Windows podsustavu za Linux, sada možete lako koristiti bash i ostale Linux alate na svom Windows 10 računalu. Ako vam zvuči savršeno, ne tražite dalje od našeg vodiča pokretanje bash školjke na Windows 10 Kako nabaviti Linux Bash Shell na sustavu Windows 10Trebate koristiti Linux nema vremena za prebacivanje na drugo računalo ili pokretanje VM-a? Pokrenite Linux u sustavu Windows 10 umjesto terminala Bash shell! Čitaj više .

Kris Wouk je pisac, glazbenik i kako god se zove kada netko pravi videozapise za web.