PowerShell ir četru veidu darba vietas - fona darbi, attālās darba vietas, WMI darbs un plānotas darba vietas. Pievienojieties mums, kad mēs uzzināt, kas tas ir un kā mēs to varam izmantot.
Noteikti izlasiet iepriekšējos sērijas rakstus:
Un visu nedēļu pieskarieties atlikušajām sērijām.
Līdz šim viss, ko es tev PowerShell parādīju, ir bijis sinhronais, tas nozīmē, ka mēs kaut ko iekļaujam čaulā un patiešām nevaram to paveikt, līdz šī komanda ir pabeigusi izpildi. Šajā vietā ir iekļauti fona darbi. Lai sāktu fonu, darbs vienkārši nosūta skriptu bloku uz Start-Job cmdlet.
Start-Job -Name GetFileList -Scriptblock Get-ChildItem C: \ -Recurse
Tagad mēs varam darīt visu, ko mēs gribam, čaulā, kamēr skriptu bloks tiek izpildīts fonā.
Kad jūs sākat jaunu darbu, PowerShell izveido jaunu darba objektu, kas pārstāv šo darbu. Jūs jebkurā laikā varat saņemt visu darba vietu sarakstu, palaižot Get-Job cmdlet.
Darba objekti pastāstīs par darba vietu statusu. Piemēram, iepriekš apskatītajā ekrānuzņēmumā var redzēt, ka mums ir BackgroundTob sauc GetFileList, kas joprojām darbojas, bet jau ir sākusi datus atgriezt. Ja jebkurā brīdī jūs izlemjat, ka darbs ir bijis pārāk ilgs, jūs varat to viegli pārtraukt, to pārtraucot Stop-Job.
Get-Job -Name GetFileList | Stop-Job
Tomēr, tiklīdz esat pārtraucis darbu, neatkarīgi no tā, kādus datus viņš saņēma, līdz brīdim, kad jūs pārtraucat darbu, joprojām ir pieejams. Tomēr ir gotcha. Kad PowerShell saņems darba rezultātus, tie tiek izdzēsti. Lai tie paliek, jums ir jānorāda saņemšanas darba uzdevuma uzturēšanas slēdzis.
Get-Job -Name GetFileList | Saņemt-Job -Keep
Kad esat pabeidzis darbu, vislabāk ir to noņemt. Lai noņemtu darbu, vienkārši ievietojiet to cmdlet Remove-Job.
Get-Job -Name GetFileList | Noņemt darbu
Tas noņems to no darbavietu saraksta, kurus Get-Job atdod.
Pirms dažām stundām mēs paskatījāmies, kā mēs varam izmantot atkārtotu izmantošanu, lai izpildītu PowerShell komandas attālajā datorā, izmantojot Invoke-Command, bet vai jūs zinājāt, ka varat arī izmantot Invoke-Command, lai sāktu atkārtotu darbu fonā? Lai to izdarītu, komandas beigās vienkārši pievienojiet -AsJob parametru:
Atsauce uz komandu -ComputerName Flash, Viper -atbilstības pārvaldnieks -ScriptBlock gci -AsJob
Tas bija vienkāršs uzdevums, un līdz šim tas bija jāpabeidz, tāpēc ļauj apskatīt mūsu darba vietu statusu.
Hmm, izskatās, ka tas neizdevās. Tas mani ved uz manu pirmo gotcha ar darbavietām. Kad jūs izveidojat jaunu darbu jebkura veida PowerShell, tā izveido vienu vecāku darbu papildus vienam bērna darbam katram datoram, pret kuru jūs darbojat darbu. Kad jūs izmantojat cmdlet Get-Job, tas parāda tikai vecāku uzdevumus un valsts īpašums ir vissliktākais scenārijs, kas nozīmē, ka pat tad, ja komanda neizdodas palaist tikai vienā no simt datoriem, mātesdarba stāvoklis saka neizdevās. Lai apskatītu bērnu darbu sarakstu, jums ir nepieciešams izmantot parametru IncludeChildJob.
Ja paskatīsieties tuvāk, jūs redzēsiet, ka darbs patiešām neizdevās tikai vienā datorā, kas mūs noved pie nākamās getcha. Kad jūs mēģināt iegūt darba rezultātus, ja norādāt vecāku darba nosaukumu vai ID, PowerShell atgriezīs datus no visiem bērna darbiem. Problēma ir tā, ka, ja kādā no bērnu darbavietām radās kļūda, mums tiks atstāts sarkans teksts.
Ir divi veidi, kā to izdarīt. Pirmkārt, ja jūs zināt, kādi datori vēlaties iegūt rezultātus, jūs varat vienkārši izmantot parametra ComputerName parametru Recieve -Job.
Get-Job -Id 3 | Receive-Job -Keep -ComputerName Viper
Alternatīvi, jūs varat iegūt rezultātus no konkrēta bērna darba, izmantojot savu darba id.
Get-Job -Id 3 -IncludeChildJob
Get-Job -Id 5 | Saņemt-Job -Keep
WMI darbavietas ir tādas pašas kā Remote Jobs, un tikai Get-WmiObject komandu komandai ir jāpievieno tikai parametrs -AsJob.
Diemžēl tas nozīmē, ka uz viņiem attiecas arī tie paši gotchas, kurus es minēju nodaļā Remote Jobs.
Pēdējie trīs darbavietu veidi, kurus mēs aplūkojām, nebija noturīgi, tas nozīmē, ka tie ir pieejami tikai jūsu pašreizējā sesijā. Būtībā tas nozīmē, ka, ja jūs sākat darbu un pēc tam atverat citu PowerShell konsole un palaižat Get-Job, jūs neredzēsiet nevienu darbu. Tomēr atgriezieties konsolei, no kuras jūs atbrīvojāt darbu, jūs varēsit redzēt tā statusu. Tas ir pretstatā plānotajām darbavietām, kuras ir noturīgas. Būtībā Scheduled Job ir skriptu bloks, kas darbojas pēc grafika. Agrāk to pašu ietekmi varēja panākt, izmantojot Windows Task Scheduler, kas patiešām notiek saskaņā ar kapuci. Lai izveidotu jaunu plānoto darbu, veicam sekojošo:
Register-ScheduledJob-Name GetEventLogs -ScriptBlock Get-EventLog -LogName Security -Newest 100 -Trigger (New-JobTrigger -Daily-At 5pm) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)
Šajā komandā notiek diezgan daudz, tāpēc atlaidīsim to.
Tā kā tas ir nedaudz atšķirīgs darba veids, jums arī būs jāizmanto cita komanda, lai atrastu sarakstu ar visām programmā paredzētajām darbavietām uz mašīnas.
Get-ScheduledJob
Tas viss ir tā.