Geek School Saznajte kako koristiti poslove u PowerShell
PowerShell ima četiri tipa poslova - pozadinske poslove, udaljene poslove, WMI poslove i zakazane poslove. Pridružite nam se kad saznamo što su i kako ih možemo koristiti.
Svakako pročitajte prethodne članke iz serije:
- Saznajte kako automatizirati sustav Windows pomoću programa PowerShell
- Učenje korištenja Cmdletova u PowerShell-u
- Učenje korištenja objekata u programu PowerShell
- Učenje oblikovanja, filtriranja i uspoređivanja u programu PowerShell
- Naučite kako koristiti daljinski rad u programu PowerShell
- Upotreba PowerShell-a za dobivanje informacija o računalu
- Rad s zbirkama u programu PowerShell
Ostanite u tijeku cijeli tjedan.
Pozadinski poslovi
Do sada je sve što sam vam pokazao u programu PowerShell sinkrono, što znači da nešto utipkamo u ljusku i ne možemo mnogo učiniti dok ta naredba ne završi s izvršavanjem. Ovdje se pojavljuju pozadinski poslovi. Da biste pokrenuli pozadinu, posao jednostavno proslijedi blok skripte na Start-Job cmdlet.
Start-Job-Ime GetFileList -Scriptblock Get-ChildItem C: \ t
Sada smo slobodni učiniti što god želimo unutar ljuske dok se taj blok skripta izvršava u pozadini.
Kada započnete novi posao, PowerShell stvara novi objekt zadatka koji predstavlja taj posao. Popis svih poslova možete dobiti u bilo kojem trenutku pokretanjem cmdleta Get-Job.
Objekti zadatka vam govore o statusu poslova. Na primjer, u gornjem screenshotu možemo vidjeti 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 traje predugo, možete ga jednostavno zaustaviti tako da ga odvedete u Stop-Job.
Get-Job-Ime GetFileList | Stop-Posao
Međutim, nakon što ste prestali s radom, bez obzira na podatke koje ste primili sve do trenutka kada ste prestali, to je još uvijek dostupno. Ipak, postoji nešto što se može shvatiti. U programu PowerShell, nakon što dobijete rezultate za posao, brišu se. Da bi oni ostali, morate navesti parametar prekidača zadržavanja u Receive-Jobu.
Get-Job-Ime GetFileList | Primanje-zadatak
Kada završite posao, najbolje je ukloniti ga. Da biste uklonili posao, jednostavno ga odvedite do cmdleta Remove-Job.
Get-Job-Ime GetFileList | Uklonite-Posao
To će ga ukloniti s popisa zadataka koje vraća Get-Job.
Udaljeni poslovi
Prije nekoliko lekcija, pogledali smo kako možemo koristiti remoting za izvršavanje naredbi PowerShell na udaljenom računalu pomoću Invoke-Command, ali jeste li znali da također možete koristiti Invoke-Command da biste pokrenuli remoting posao u pozadini? Da biste to učinili, jednostavno dodajte parametar -AsJob na kraj svoje naredbe:
Invoke-Command -ProgramIme Flash, Viper-ovlašteni administrator -ScriptBlock gci -AsJob
To je bila jednostavna naredba i trebala je dovršiti do sada tako da pogledamo status naših poslova.
Hmm, izgleda da nije uspio. To me dovodi do prvog posla s poslom. Kada u PowerShell kreirate novi posao bilo koje vrste, on stvara jedan nadređeni posao uz jedan dječji zadatak za svako računalo na kojem radite. Kada koristite cmdlet Get-Job, on samo prikazuje roditeljske poslove, a svojstvo stanja je najgori mogući scenarij, što znači da čak i ako se naredba nije mogla pokrenuti samo na jednom od stotinu računala, stanje roditeljskih poslova će reći neuspjeh. Da biste vidjeli popis dječjih zadataka morate koristiti parametar IncludeChildJob.
Ako pogledate bliže, vidjet ćete da je posao uistinu bio neuspješan samo na jednom računalu, što nas dovodi do sljedećeg problema. Kada pokušate dobiti rezultate za posao, ako navedete ime ili ID roditeljskog posla, PowerShell će vratiti podatke sa svih dječjih zadataka. Problem je u tome što ako postoji greška u jednom od dječjih poslova, ostaje nam crveni tekst.
Postoje dva načina da se to zaobiđe. Prvo, ako znate koja računala želite postići rezultate, jednostavno možete upotrijebiti parametar ComputerName u cmdletu Receive -Job.
Get-Job -Id 3 | Primajte-posao-držite-ime računala Viper
Alternativno, rezultate možete dobiti od određenog dječjeg posla koristeći njegov id posla.
Get-Job -Id 3 -UključiDijete Djeca
Get-Job -Id 5 | Primanje-zadatak
WMI poslovi
WMI Poslovi su gotovo isti kao i Daljinski, što zahtijeva dodavanje samo parametra -AsJob u Get-WmiObject cmdlet.
Nažalost, to znači da podliježu istim zahtjevima koje sam spomenuo u odjeljku Udaljeni poslovi.
Planirani poslovi
Posljednje tri vrste poslova koje smo gledali nisu postojane, što znači da su dostupne samo u vašoj trenutnoj sesiji. U osnovi, to znači da ako započnete posao, a zatim otvorite drugu PowerShell konzolu i pokrenete Get-Job, nećete vidjeti nikakav posao. Međutim, vratite se na konzolu s koje ste izbacili posao, moći ćete vidjeti njegov status. To je u suprotnosti s raspoređenim radnim mjestima koja su uporni. U osnovi, raspoređeni posao je blok skripte koji se izvodi na rasporedu. U prošlosti je isti učinak mogao biti postignut pomoću Windows Task Schedulera, što je zapravo ono što se događa ispod haube. Da biste izradili novi zakazani posao, učinimo sljedeće:
Register-ScheduledJob -Name GetEventLogs -ScriptBlock Get-EventLog -LogName Security -Newest 100 -Trigger (New-JobTrigger -Daily -At 5pm) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)
U toj zapovijedi ima dosta toga što se događa, pa ga razgradimo.
- Prvo, dajemo našem Planiranom poslu ime GetEventLogs.
- Zatim mu kažemo da, kada se pokrene, želimo da pokrene sadržaj navedenog bloka skripti, koji u osnovi dobiva najnovije 100 unosa dnevnika sigurnosnih događaja.
- Zatim određujemo okidač. Budući da parametar okidača uzima objekt okidača kao ulaz, upotrijebili smo zaglavljenu naredbu za generiranje okidača koji će se isključiti svaki dan u 17:00.
- Budući da imamo posla s dnevnikom događaja, moramo se pokrenuti kao administrator, što možemo odrediti stvaranjem novog objekta ScheduledJobOption i njegovim prosljeđivanjem parametru ScheduledJobOption..
Budući da je ovo malo drugačija vrsta posla, također ćete morati koristiti drugu naredbu za dohvaćanje popisa svih planiranih poslova na računalu.
Get-ScheduledJob
To je sve.