If-Koubou

Geek School: Saznajte kako koristiti zadatke u PowerShellu

Geek School: Saznajte kako koristiti zadatke u PowerShellu (Kako da)

PowerShell ima četiri vrste poslova - Pozadinski poslovi, daljinski poslovi, WMI poslovi i planirani poslovi. Pridružite nam se dok saznamo što jesu i kako ih možemo koristiti.

Obavezno pročitajte prethodne članke serije:

  • Saznajte kako automatizirati sustav Windows pomoću programa PowerShell
  • Učenje pomoću Cmdletsa u PowerShellu
  • Učenje kako koristiti objekte u PowerShellu
  • Oblikovanje učenja, filtriranje i uspoređivanje u PowerShellu
  • Saznajte kako koristiti Remoting u PowerShellu
  • Upotreba programa PowerShell za dobivanje informacija o računalu
  • Rad s zbirkama u PowerShellu

I ostanite u tijeku cijele serije cijeli tjedan.

Pozadinski poslovi

Do sada sve što sam vam pokazao u PowerShellu bio je sinkroniziran, što znači da upisujemo nešto u ljusku i stvarno ne možemo puno učiniti sve dok naredba ne završi. Tu dolaze pozadinski poslovi. Za početak pozadine posao jednostavno prolazi skriptni blok u cmdlet Start-Job.

Početak-posao -Name GetFileList -Scriptblock Get-ChildItem C: \ -Recurse

Sad možemo slobodno raditi sve što želimo unutar ljuske dok taj blok skripta izvodi u pozadini.

Kada pokrenete novi posao, PowerShell stvara novi posao koji predstavlja taj posao. Popis svih poslova možete dobiti u bilo kojem trenutku pokretanjem cmdeta Get-Job.

Objekti posla vam govore o statusu posla. Na primjer, u gore opisanom snimku zaslona vidimo da imamo BackgroundJob zvan GetFileList koji je još uvijek pokrenut, ali je već počeo vraćati podatke. Ako u bilo kojem trenutku odlučite da posao već traje, možete ga jednostavno zaustaviti cijevima u Stop-Job.

Get-Job-naziv GetFileList | Stop-Posao

Međutim, nakon što prestanete s poslom, sve podatke koji ste primili sve dok to mjesto koje ste ga zaustavili još uvijek nije dostupno. Ima je gotcha. U PowerShellu, kada dobijete rezultate za posao, oni se brišu. Da bi oni ostali, morate navesti parametar čuvati prekidač primatelja.

Get-Job-naziv GetFileList | Primanje-Posao -Keep

Kada završite s poslom, najbolje je ukloniti ga. Da biste uklonili posao, jednostavno ga cijepite cmdlet Remove-Job.

Get-Job-naziv GetFileList | Uklonite-Posao

To će je ukloniti s popisa poslova koje dobije Get-Job.

Udaljeni poslovi

Prije nekoliko sati smo pogledali kako možemo koristiti remotiranje za izvršavanje naredbi PowerShell na udaljenom računalu koristeći Invoke-Command, ali jeste li znali da možete koristiti Invoke-Command da započnete remoting posao u pozadini? Da biste to učinili, jednostavno dodajte parametar -AsJob na kraj naredbe:

Invoke-Command -ComputerName Flash, Viper -Prijenosnik administratora -ScriptBlock gci -AsJob

To je bila jednostavna naredba i trebala je dovršiti izvršenje do sada, tako da pogledamo naš status posla.

Hmm, izgleda da nije uspjelo. Ovo me dovodi na moju prvu kućicu s poslovima. Kada stvorite novi posao bilo koje vrste u PowerShellu, on stvara jedan roditeljski posao uz jedno dijete za svako računalo na kojem radite. Kada koristite cmdlet Get-Job, prikazuje se samo glavni poslovi, a stanje državnog vlasništva je najgori scenarij, što znači da čak i ako se naredba nije uspjela izvoditi samo na jedan od stotinu računala, država roditeljskih poslova reći će neuspjeh. Da biste vidjeli popis dječjih poslova, morate upotrijebiti parametar IncludeChildJob.

Ako pogledate bliže, vidjet ćete da je posao doista propustio samo na jednom računalu, što nas dovodi na sljedeću gothu. Kada pokušate dobiti rezultate za posao, ako navedete ime ili ID radnog mjesta roditelja, PowerShell će vratiti podatke sa svih dječjih poslova. Problem je u tome što ako je došlo do pogreške u jednom od dječjih poslova, bit ćemo ostavljeni s nekim crvenim tekstom.

Postoje dva načina zaokretanja. Prvo, ako znate koja računala želite rezultate, možete jednostavno upotrijebiti parametar ComputerName od Recieve -Job cmdlet.

Get-Job -Id 3 | Primanje-Posao -Keep -KomputerName Vipera

Alternativno, rezultate dobivene od određenog dječjeg posla možete dobiti koristeći svoj ID radnog mjesta.

Get-Job -Id 3 -IncludeChildJob

Get-Job -Id 5 | Primanje-Posao -Keep

WMI poslovi

WMI poslovi mnogo su isti kao i udaljeni poslovi, pri čemu je potreban samo parametar -AsJob koji se dodaje cmdletu Get-WmiObject.

Nažalost, to znači da oni također podliježu istim skupinama koje sam spomenuo u odjeljku Udaljeni poslovi.

Planirani poslovi

Posljednje tri vrste poslova koje smo gledali nisu bile uporni, što znači da su dostupne samo u trenutačnoj sesiji. Uglavnom, to znači da ako započnete posao, a zatim otvorite drugu PowerShell konzolu i pokrenete Get-Job, nećete vidjeti nikakve poslove. Međutim, vratite se na konzolu s kojeg ste isključili posao, moći ćete vidjeti njegov status. Ovo je za razliku od zakazanih radnih mjesta koja su ustrajni, U osnovi, zakazani posao je blok skripte koji radi na rasporedu. U prošlosti, isti utjecaj mogao je postići pomoću Windows Task Scheduler, što je zapravo ono što se događa ispod nape. Za izradu novog zakazanog posla učinit ćemo sljedeće:

Register-ScheduledJob -Name GetEventLogs -ScriptBlock Get-EventLog -LogName Security -Newest 100 -Trigger (New-JobTrigger -Daily -A 17) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)

Dosta se toga događa u toj zapovijedi pa ćemo ga slomiti.

  • Prvo, dajemo našem zakazanom zadatku ime GetEventLogs.
  • Zatim nam kažemo da kada se aktivira, želimo da pokrenemo sadržaj navedenog skriptnog bloka koji u osnovi dobiva najnovije 100 zapisa dnevnika događaja Sigurnost.
  • Zatim ćemo odrediti okidač.Budući da parametar okidača uzima aktivni okidač kao ulaz, koristili smo zagradnu naredbu za generiranje okidača koji će izaći svaki dan u 5PM.
  • Budući da se radi o zapisniku događaja, moramo se izvoditi kao administrator, što možemo odrediti izradom novog ciljanog objekta i dostavljanjem parametra ScheduledJobOption.

Budući da je riječ o neznatno različitoj vrsti posla, morat ćete upotrijebiti i drugu naredbu za pronalaženje popisa svih zakazanih zadataka na stroju.

Get-ScheduledJob

To je sve.