29Aug
PowerShell ima štiri vrste opravil - Background Jobs, Remote Jobs, WMI Jobs in Scheduled Jobs. Pridružite se nam, ko ugotovimo, kaj so in kako jih lahko uporabimo.
Prosimo, da preberete prejšnje članke v seriji:
- Več o tem, kako lahko avtomatiziramo Windows z PowerShellom
- Učenje za uporabo ukazov Cmdlets v PowerShellu
- Učenje Kako uporabljati predmete v PowerShellu
- Učenje Formatiranje, filtriranje in primerjanje v programu PowerShell
- Naučite se uporabljati daljinec vPowerShell
- Uporaba PowerShell za pridobivanje informacij o računalniku
- Delo z zbirkami v PowerShell
In ostanejo na voljo za preostanek serije ves teden.
Ozadje delovnih mest
Do sedaj sem vse, kar sem vam pokazal v PowerShell-u, bil sinhronen, kar pomeni, da nekaj vnesemo v lupino in ne moremo resnično storiti veliko, dokler ta ukaz ni končan. Tu se vključijo delovna mesta v ozadju. Če želite zagnati ozadje, delo preprosto prenese blok skripta v cmdlet Start-Job.
Start-Job -Name GetFileList -Scriptblock{ Get-ChildItem C: \ -Recurse}
Sedaj lahko prosto delamo kar koli v lupini, medtem ko ta blok skripta izvaja v ozadju.
Ko začnete novo službo, PowerShell ustvari nov objekt za delo, ki predstavlja to opravilo. Seznam vseh delovnih mest lahko kadarkoli dobite tako, da zaženete cmdlet Get-Job.
Objektni predmeti vam povejo o stanju opravil. Na primer, v zgornji sliki zaslona lahko vidimo, da imamo BackgroundJob, ki se imenuje GetFileList, ki se še vedno izvaja, vendar je že začel vračati podatke.Če se na kateri koli točki odločite, da se delo izvaja predolgo, ga lahko zlahka ustavite, tako da ga napolnite do Stop-Job.
Get-Job -Name GetFileList |Stop-Job
Ko pa ste ustavili delo, ne glede na podatke, ki ste jih prejeli, do točke, ko ste ga ustavili, je še vedno na voljo.Čeprav je gotovo. V PowerShell-u, ko prejmete rezultate za delo, se bodo izbrisali.Če želite, da ostanejo, morate določiti parameter ohranitve stikala za prejemanje posla.
Get-Job -Name GetFileList |Receive-Job -Keep
Ko končate z delom, je najbolje, da jo odstranite.Če želite odstraniti opravilo, ga preprosto vstavite v cmdlet Remove-Job.
Get-Job -Name GetFileList |Odstrani-Job
To bo odstranilo s seznama opravil, ki jih vrne Get-Job.
Remote Jobs
Pred nekaj urami smo preučili, kako lahko uporabimo remoting za izvrševanje ukazov PowerShell na oddaljenem računalniku z ukazom Invoke-Command, vendar ste vedeli, da lahko uporabite tudi ukaz za poziv-ukaz za začetek opravljanja dela v ozadju?Če želite to narediti, preprosto dodajte parameter -AsJob na konec vašega ukaza:
Invoke-Command-ComputingName Flash, administrator Viper -Credential -ScriptBlock{ gci} -AsJob
To je bil preprost ukaz in ga je treba končati do zdajsi oglejte stanje naših delovnih mest.
Hmm, izgleda, da ni uspelo. To me pripelje na moje prvo delo z zaposlenimi. Ko v PowerShellu ustvarite novo opravilo katere koli vrste, ustvarite eno starševsko delo poleg enega otroškega dela za vsak računalnik, s katerim upravljate delo. Ko uporabljate cmdlet Get-Job, prikaže le starševska opravila, državna lastnina pa je najslabši možni scenarij, kar pomeni, da bo tudi, če se ukaz ne bo izvajal le na enem od sto računalnikov,ni uspelo.Če si želite ogledati seznam otroških opravil, morate uporabiti parameter IncludeChildJob.
Če pogledate bližje, boste videli, da je delo res propadlo samo na enem računalniku, kar nas pripelje do naslednjega. Ko poskušate dobiti rezultate za opravilo, če navedete ime ali ID nadrejene osebe, bo PowerShell vrnil podatke iz vseh otroških opravil. Težava je, da če je prišlo do napake v enem od otrokovih opravil, bomo dobili nekaj rdečega besedila.
Obstajata dva načina za to. Prvič, če veste, za katere računalnike želite rezultate, preprosto uporabite parameter ComputerName v ukazu Recieve -Job.
Get-Job -Id 3 |Receive-Job -Keep-ComputingName Viper
Lahko pa tudi rezultate dobite iz določenega otroškega dela s svojim idom posla.
Get-Job -Id 3 -IncludeChildJob
Get-Job -Id 5 |Receive-Job -Keep
WMI delovna mesta
WMI Delovna mesta so enaka kot oddaljeni posli, ki zahtevajo dodajanje parametra -AsJob v cmdlet Get-WmiObject.
Na žalost to pomeni, da so podvržene istim dobam, ki sem jih omenil v oddelku za oddaljena delovna mesta.
razporejena delovna mesta
Zadnje tri vrste opravil, ki smo jih pregledali, niso bile trajne, kar pomeni, da so na voljo le v vaši trenutni seji. V bistvu to pomeni, če začnete delo in nato odprete še eno PowerShell konzolo in zaženete Get-Job, ne boste videli nobenih delovnih mest. Vendar pa se vrnite v konzolo, s katero ste izstrelili opravilo, saj boste lahko videli njen status. To je v nasprotju s Scheduled Jobs, ki jih vztrajno .V osnovi je Scheduled Job skriptni blok, ki se izvaja v urniku. V preteklosti je bil isti učinek dosežen z uporabo načrtovalca opravil programa Windows, kar je res, kar se dogaja pod pokrovom.Če želite ustvariti novo načrtovano opravilo, naredimo naslednje:
Register-ScheduledJob -Name GetEventLogs -ScriptBlock{ Get-EventLog -LogName Security -Newest 100} -Trigger( New-JobTrigger -Daily-At 5pm) -ScheduledJobOption( New-ScheduledJobOption-RunElevated)
V tem ukazu se precej veliko dogaja, zato ga razstavimo.
- Prvič, našemu Scheduled Jobu damo ime GetEventLogs.
- Nato povejmo, da ob sprožitvi želimo zagnati vsebino določenega skriptnega bloka, ki v bistvu dobi najnovejše 100 vnosov dnevnika Varnostnega dogodka.
- Nato podajamo sprožilec. Ker parameter sprožilca vzame sprožitveni predmet kot vhod, smo uporabili parentriptivni ukaz, da ustvarimo sprožilec, ki bo vsak dan ob 5. uri izklopljen.
- Ker se ukvarjamo z dnevnikom dogodkov, se moramo zagnati kot skrbnik, ki ga lahko določimo z ustvarjanjem novega predmeta ScheduledJobOption in prenosa v parameter ScheduledJobOption.
Ker gre za rahlo drugačno vrsto opravila, boste morali uporabiti tudi drug ukaz za pridobitev seznama vseh načrtovanih opravil na napravi.
Get-ScheduledJob
To je vse, kar ima za to.