29Aug

Geek School: Saznajte kako koristiti zadatke u PowerShellu

PowerShell ima četiri vrste poslova - pozadinske radnje, 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 u seriji:

  • Saznajte kako automatizirati sustav Windows s PowerShellom
  • Učenje pomoću Cmdletsa u PowerShell
  • Učenje pomoću objekata u PowerShellu
  • Učenje, filtriranje i uspoređivanje u PowerShell
  • Saznajte kako koristiti remotiranje uPowerShell
  • Korištenje programa PowerShell za dobivanje informacija o računalu
  • Rad s zbirkama u PowerShell

I ostati u tijeku cijele serije cijeli tjedan. 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}

Sada smo slobodni učiniti sve što želimo unutar ljuske dok taj skriptni blok izvršava u pozadini.

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

Objekti posla govore vam o statusu poslova. 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-Job

Međutim, nakon što prestanete raditi, ono što ste dobili do trenutka kada ste ga zaustavili je još uvijek dostupan. 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 posla -Keep

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

Get-Job-naziv GetFileList |Ukloni-posao

Ovo će ga 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 pomoću 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 -KomputerName Flash, Viper -Credential administrator -ScriptBlock{ gci} -AsJob

To je bila jednostavna naredba i trebala je završiti izvršavanje do sadaomogućuje pogled na status našeg posla.

Hmm, izgleda da nije uspjelo. Ovo me dovodi na moju prvu kućicu s poslovima. Kada stvorite novi posao bilo koje vrste u programu PowerShell, 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 ćeneuspjeh. Da biste vidjeli popis dječjih poslova, morate upotrijebiti parametar IncludeChildJob. Ako pogledate bliže, vidjet ćete da je posao doista uspjelo samo na jednom računalu, što nas dovodi na sljedeću šaku. 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-RačunaloName Vipera

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

Get-Job -Id 3 -IncludeChildJob

Get-Job -Id 5 |Primanje posla -Kako

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 gotovima koje sam spomenuo u odjeljku Udaljeni poslovi.

Planirani poslovi

Posljednje tri vrste zadataka koje smo pogledali nisu bile trajne, š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 uporni .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 zadatka izvršavamo sljedeće:

Registriraj-zakazanoJob -Name GetEventLogs -ScriptBlock{ Get-EventLog -LogName Security -Newest 100} -Trigger( New-JobTrigger -Daily -A 17) -ScheduledJobOption( New-ScheduledJobOption-RunElevated)

U toj zapovijedi ima dosta toga, pa ćemo je slomiti.

  • Prvo, dajemo našu zakazanu zadatku ime GetEventLogs.
  • Mi smo tada rekli da kada se pokrene, želimo da pokrenemo sadržaj specificiranog skripta blok, koji u osnovi dobiva najnovije 100 zapisa dnevnika događaja Sigurnost.
  • Zatim ćemo navesti 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, koji možemo odrediti stvaranjem novog objekta ScheduledJobOption i njegovo prosljeđivanje parametru ScheduledJobOption.

Budući da je to nešto drugačiji tip posla, također ćete morati koristiti drugu naredbu za pronalaženje popisa svih zakazanih zadataka na stroju.

Get-ScheduledJob

To je sve što je u njemu.