29Aug

"Geek" mokykla: sužinokite, kaip "PowerShell" naudoti darbo vietas

"PowerShell" turi keturias darbo vietas: fono darbus, nuotolinius darbus, WMI darbus ir numatytus darbus. Prisijunkite prie mūsų, kai sužinome, kokie jie yra ir kaip mes galime juos naudoti.

Būtinai perskaitykite ankstesnius serijos straipsnius:

  • Sužinokite, kaip automatizuoti "Windows" su "PowerShell"
  • "Mokydamies naudotis" PowerShell "" PowerShell "
  • Mokymasis naudoti objektus" PowerShell "
  • Mokymosi formatavimas, filtravimas ir palyginimas" PowerShell "
  • Išmokite naudoti" Remoting ""PowerShell"
  • "PowerShell" naudojimas norint gauti kompiuterio informaciją
  • "PowerShell

" kolekcijos darbas. Visą savaitę palaikykite ryšį su likusia serija.

Fono darbai

Iki šiol viskas, ką parodžiau PowerShell sistemoje, buvo sinchronizuotas, o tai reiškia, kad mes įrašome kažką į apvalkalą ir tikrai negalime padaryti daug, kol ši komanda baigs vykdyti.Čia yra fono darbo vietos. Jei norite pradėti fono, darbas paprasčiausiai perduoda scenarijaus bloką į "Start-Job" cmdlet.

Start-Job-Name GetFileList -Scriptblock( Get-ChildItem C: \ -Recurse)

Dabar mes galime laisvai daryti viską, ko norime, esant lukštui, o scenarijų blokas paleidžiamas fone.

Kai pradedate naują darbą, "PowerShell" sukuria naują darbo objektą, kuris atitinka šį darbą.Bet kada galite gauti visų darbo vietų sąrašą, paleisdami "Get-Job" cmdlet.

Darbo objektai pasakoja apie darbo būklę.Pavyzdžiui, pirmiau pateiktame ekrano paveikslėlyje matome, kad turime BackgroundTob vadinamą GetFileList, kuris vis dar veikia, bet jau pradėjo grąžinti duomenis. Jei bet kuriuo metu nuspręsite, kad darbas buvo vykdomas per ilgai, galite lengvai jį sustabdyti, vamzdžius jį "Stop-Job".

Get-Job -Name GetFileList |Stop-Job

Tačiau, kai baigsite darbą, bet kokie duomenys, kuriuos jis gavo, kol bus sustabdytas. Tačiau yra gothka."PowerShell", kai gausite darbo rezultatus, jie bus ištrinti. Kad jie liktų, turite nurodyti "Get-Job" palaikymo jungiklio parametrą.

Get-Job -Name GetFileList |Receive-Job -Keep

Kai baigsite darbą, geriausia tai pašalinti. Norėdami pašalinti darbą, paprasčiausiai įkelkite jį į cmdlet "Remove-Job".

Get-Job -Name GetFileList |Remove-Job

Tai pašalins jį iš darbo vietų sąrašo, kurį grąžins "Get-Job".

nuotolinio darbo darbai

Prieš keletą pamokų mes išnagrinėjome, kaip mes galime naudoti atkūrimą, norėdami paleisti "PowerShell" komandas nuotoliniame kompiuteryje, naudodamiesi "Invoke-Command", bet ar žinojote, kad galite naudoti "Invoke-Command", kad pradėtumėte pašalinimo darbą fone? Norėdami tai padaryti, tiesiog pridėkite parametro -AsJob į savo komandos pabaigą:

Invoke-Command -ComputerName Flash, Viper-Credential administrator -ScriptBlock( gci) -AsJob

Tai buvo paprastas komandas ir turėtų būti baigtas vykdyti dabarleidžia pažvelgti į mūsų darbo vietų statusą.

Hmm, atrodo, kad nepavyko. Tai atveda mane į mano pirmąją "Gutcha" darbą.Kai kuriame "PowerShell" kuriate bet kokio tipo naują darbą, jis sukuria dar vieną tėvų darbą be vieno vaiko darbo kiekvienam kompiuteriui, kuriame dirbate. Kai naudojate "Get-Job" cmdlet, tai parodo tik tėvų užduotis, o valstybinis turtas yra blogiausias scenarijus, o tai reiškia, kad net jei komanda nepavyko paleisti viename iš šimtų kompiuterių, tėvų darbų būsena pasakysnepavyko. Norėdami pamatyti vaikų darbo vietų sąrašą, turite naudoti "IncludeChildJob" parametrą.

Jei žiūrėsite arčiau, pamatysite, kad vienas kompiuteris iš tikrųjų nepavyko atlikti darbo, o tai atvedė mus į kitą "gotcha".Kai bandysite gauti rezultatus už darbą, jei nurodysite tėvų darbo pavadinimą ar ID, "PowerShell" grąžins duomenis iš visų vaiko darbo vietų.Problema ta, kad jei buvo viena iš vaiko darbo vietų klaida, mes turėsime palikti raudoną tekstą.

Tai yra du būdai. Pirma, jei žinote, kokius kompiuterius norite gauti rezultatus, galite tiesiog naudoti "ComputerName" parametrą "Recieve -Job" cmdlet.

Get-Job -Id 3 |Receive-Job -Keep -ComputerName Viper

Taip pat galite gauti rezultatus iš konkretaus vaiko darbo su savo darbo ID.

Get-Job -Id 3 -IncludeChildJob

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

WMI Darbas

WMI Darbai yra tokie patys kaip "Remote Jobs", reikalaujantys, kad į "Get-WmiObject" cmdlet būtų įtrauktas tik parametras -AsJob.

Deja, tai reiškia, kad jiems taip pat taikomos tos pačios gotchas, kurias minėjau skyriuje "Nuotoliniai darbai".

Planiniai darbai

Paskutinės trys darbo vietos, į kurias mes žiūrėjome, nebuvo ilgalaikiai, tai reiškia, kad jie yra prieinami tik jūsų dabartinėje sesijoje. Iš esmės tai reiškia, kad jei pradėsite darbą ir atidarysite kitą "PowerShell" konsolę, paleiskite "Get-Job", jūs nematysite jokių darbo vietų.Tačiau sugrįžk prie konsolės, į kurią išjungėte darbą, galėsite pamatyti jo būseną.Tai prieštarauja planuotiems darbams, kurių yra patvarios .Iš esmės numatytasis darbas yra scenarijų blokas, kuris veikia pagal tvarkaraštį.Anksčiau toks pat poveikis galėjo būti pasiektas naudojant "Windows Task Scheduler", kuris tikrai yra tai, kas vyksta po gaubtu. Kad sukurtume naują numatytą darbą, mes atliksime šiuos veiksmus:

Registruojantis ScheduledJob-pavadinimas GetEventLogs -ScriptBlock{ Get-EventLog -LogName Security -Newest 100} -Trigger( New-JobTrigger -Daily -At 5pm) -ScheduledJobOption( New-ScheduledJobOption)-RunElevated)

Šioje komandoje gana daug vyksta, todėl suskirstyme.

  • Pirma, mes suteikiame "Scheduled Job" pavadinimą GetEventLogs.
  • Tada mes sakome, kad kai suaktyvinamas, mes norime, kad jis paleistų nurodyto scenarijaus bloko turinį, kuris iš esmės gauna naujausius 100 įrašų apie saugumą įvykį.
  • Toliau nurodome trigerį.Kadangi trigerio parametras įveda trigerio objektą kaip įvestį, mes panaudojome komandą "parenthetical", kad generuotume trigerį, kuris kiekvieną dieną išjungiamas 5 valandų laikotarpiu.
  • Kadangi mes susiduriame su įvykių žurnalu, mes turime paleisti kaip administratorius, kurį mes galime nurodyti, sukurdami naują ScheduledJobOption objektą ir perduodame jį į ScheduledJobOption parametrą.

Kadangi tai yra šiek tiek kitokio pobūdžio darbas, jums taip pat reikės naudoti kitą komandą, kad galėtumėte peržiūrėti visus numatytus darbus kompiuteryje.

Get-ScheduledJob

Tai viskas, ko reikia.