29Aug

Geek skola: Uzziniet, kā izmantot darbavietas PowerShell

PowerShell ir četru veidu darbi - fona darbi, attālās darbavietas, WMI darbs un plānotas darba vietas. Pievienojieties mums, kad mēs uzzināt, kas tas ir un kā mēs to varam izmantot.

Pārliecinieties, ka esat izlasījis iepriekšējos sērijas rakstus:

  • Uzziniet, kā automatizēt Windows ar PowerShell
  • Mācīšanās lietot komandas ar PowerShell
  • Mācīšanās lietot objektus PowerShell
  • Mācīšanās formēšana, filtrēšana un salīdzināšana PowerShell
  • Iemācieties lietot RemotingPowerShell
  • Izmantojot PowerShell, lai iegūtu datora informāciju
  • Darbs ar kolekcijām PowerShell

un palieciet noregulē pārējām sērijām visu nedēļu.

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 to nevar izdarīt, kamēr šī komanda nav 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 mums ir brīvi darīt visu, ko mēs gribam ietvert čaulā, kamēr šis 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š redzamajā 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-nosaukums GetFileList |Stop-Job

Tomēr, tiklīdz esat pārtraucis darbu, neatkarīgi no tā, kādi dati tika saņemti, līdz brīdim, kad jūs to pārtraucat, 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 |Get-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 |Remove-Job

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 paveiktu, komandas beigās vienkārši pievienojiet -AsJob parametru:

Invoke-Command -ComputerName Flash, Viper -redense administrator -ScriptBlock{ gci} -AsJob

Tā bija vienkārša komanda, un tā būtu pabeigta, izpildot to tagadļ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 sakaneizdevā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 uz viena datora, 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

Varat arī iegūt rezultātus no konkrēta bērna darba, izmantojot savu darba id.

Get-Job -Id 3 -IncludeChildJob

Get-Job -Id 5 |Get-Job -Keep

WMI Darbs

WMI darbavietas ir tādas pašas kā Remote Jobs, un tikai Get-WmiObject cmdletam jāpievieno tikai -AsJob parametrs.

Diemžēl tas nozīmē, ka uz tiem attiecas arī tie paši gotchas, kurus es minēju nodaļā Remote Jobs.

Plānotais darbs

Pēdējie trīs darbavietu veidi, kurus mēs apskatījā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 pretrunā ar 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ādēļ let's sadalīt to.

  • Pirmkārt, mēs dodam savam plānotajam darbam nosaukumu GetEventLogs.
  • Pēc tam mēs informējam, ka tad, kad tas tiek aktivizēts, mēs vēlamies, lai tas palaistu norādītā skripta bloka saturu, kurā būtībā tiek iegūti jaunākie 100 ieraksti drošības notikumu žurnālā.
  • 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, kuru mēs varam norādīt, izveidojot jaunu ScheduledJobOption objektu un nododot to parametram ScheduledJobOption.

Tā kā šis ir nedaudz atšķirīgs darba veids, jums arī būs jāizmanto cita komanda, lai ielādētu visus plānotos darbus sarakstā uz mašīnas.

Get-ScheduledJob

Tas viss ir tā.