If-Koubou

Geek skola: Uzziniet, kā izmantot darbavietas PowerShell

Geek skola: Uzziniet, kā izmantot darbavietas PowerShell (Kā)

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:

  • Uzziniet, kā automatizēt Windows ar PowerShell
  • Mācīšanās lietot moduļus PowerShell
  • Mācīšanās kā lietot objektus PowerShell
  • Mācību formēšana, filtrēšana un salīdzināšana PowerShell
  • Uzziniet, kā izmantot utilizācijas PowerShell
  • Izmantojot PowerShell, lai iegūtu informāciju par datoru
  • Darbs ar kolekcijām PowerShell

Un visu nedēļu pieskarieties atlikušajām sērijām.

Fona darbs

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.

Attālās darbavietas

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 darbs

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.

Plānotas darba vietas

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.

  • Pirmkārt, mēs piešķiram savam plānotajam darbam nosaukumu GetEventLogs.
  • Tad mēs pasakām, ka tad, kad tas tiek aktivizēts, mēs gribam, lai tas palaistu norādītā skripta bloka saturu, kurš pamatā saņem 100 jaunākos drošības notikumu žurnāla ierakstus.
  • Tālāk mēs norādām aktivizētāju.Tā kā sprūda parametrs veic ievades objektu kā spriegumu, mēs izmantojām komandu, kas satur komandu, lai ģenerētu aktivizētāju, kas darbosies katru dienu plkst. 5:00.
  • Tā kā mums ir darīšana ar notikumu žurnālu, mums jāstrādā kā administratoram, ko mēs varam norādīt, izveidojot jaunu ScheduledJobOption objektu un nododot to parametram ScheduledJobOption.

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ā.