Geek mokykla Sužinokite, kaip naudoti darbo vietas „PowerShell“
„PowerShell“ turi keturių tipų darbo vietas: „Background Jobs“, „Remote Jobs“, „WMI Jobs“ ir „Scheduled Jobs“. Prisijunkite prie mūsų, nes mes sužinosime, kas jie yra ir kaip galime juos naudoti.
Būtinai perskaitykite ankstesnius serijos straipsnius:
- Sužinokite, kaip automatizuoti „Windows“ su „PowerShell“
- Mokymasis naudoti „Cmdlet“ „PowerShell“
- Mokymasis naudotis objektais „PowerShell“
- Mokymosi formatavimas, filtravimas ir palyginimas „PowerShell“
- Sužinokite, kaip naudoti „Remoting“ „PowerShell“
- „PowerShell“ naudojimas kompiuterio informacijai gauti
- Darbas su kolekcijomis „PowerShell“
Visą savaitę laikykitės likusios serijos.
Fono darbai
Iki šiol viskas, ką jums parodysiu „PowerShell“, buvo sinchroninė, o tai reiškia, kad kažką įvedame į apvalkalą ir tikrai negalime padaryti daug, kol komanda baigs vykdyti. Štai kur įeina foniniai darbai. Norėdami pradėti foną, darbas tiesiog perduoda scenarijų bloką į „Start-Job“ cmdlet.
Start-Job -Name GetFileList -Scriptblock Get-ChildItem C: Atkurti
Dabar mes galime laisvai daryti viską, ką norime apvalkale, o scenarijus blokuoja fone.
Kai pradėsite naują darbą, „PowerShell“ sukuria naują darbo objektą, kuris atstovauja tą darbą. Visų darbų sąrašą galite gauti bet kuriuo metu, naudodami „Get-Job“ cmdlet.
Darbo objektai pasakoja apie darbų būklę. Pavyzdžiui, pirmiau pateiktame ekrane mes matome, kad turime „BackgroundJob“, vadinamą „GetFileList“, kuri vis dar veikia, bet jau pradėjo duomenų grąžinimą. Jei bet kuriuo metu nuspręsite, kad darbas vyksta pernelyg ilgai, galite lengvai jį sustabdyti, prijungdami jį prie „Stop-Job“.
Get-Job -Name GetFileList | Stop-Job
Vis dėlto, kai baigėte darbą, bet kokie duomenys, kuriuos jis gavo, iki taško, kurį sustabdėte, vis dar yra. Vis dėlto yra gotcha. „PowerShell“, kai gausite rezultatus už darbą, jie bus ištrinti. Norint, kad jie liktų, turite nurodyti priėmimo-darbo parametrą „Perjungti“.
Get-Job -Name GetFileList | Priimti darbą - Laikyti
Baigę darbą, geriausia ją pašalinti. Norėdami pašalinti užduotį, paprasčiausiai įdėkite jį į „Remove-Job“ cmdlet.
Get-Job -Name GetFileList | Pašalinti darbą
Tai bus pašalinta iš „Job-Job“ grąžintų darbų sąrašo.
Nuotoliniai darbai
Prieš keletą pamokų, mes apžvelgėme, kaip mes galime panaudoti atokiąją programą, kad vykdytume „PowerShell“ komandas nuotoliniame kompiuteryje naudojant „Invoke-Command“, bet ar žinojote, kad taip pat galite naudoti „Invoke-Command“, kad atkurtumėte tolimą darbą fone? Norėdami tai padaryti, tiesiog pridėkite parametrą -AsJob į savo komandos pabaigą:
„Invoke-Command“ - kompiuterio pavadinimas „Flash“, „Viper“ - patikimumo administratorius -ScriptBlock gci -AsJob
Tai buvo paprasta komanda, ir dabar ji turėjo būti baigta.
Hmm, atrodo, kad jis nepavyko. Tai atneša mane į savo pirmąjį darbą su darbu. Kai kuriate naują darbą bet kokio tipo programoje „PowerShell“, jis sukuria vieną iš tėvų užduotį kiekvienam darbui prieš vieną vaikišką darbą. Kai naudojate „Get-Job“ cmdlet, ji rodo tik tėvų darbus, o valstybės nuosavybė yra blogiausio atvejo scenarijus, tai reiškia, kad net jei komandai nepavyko paleisti viename iš šimtų kompiuterių, tėvų darbo būsena nurodys nepavyko. Jei norite pamatyti vaikų darbų sąrašą, turite naudoti parametrą IncludeChildJob.
Jei pažvelgsite arčiau, pamatysite, kad darbas iš tikrųjų buvo įvykdytas tik viename kompiuteryje, kuris mus nukreipia į kitą. Bandydami gauti užduoties rezultatus, jei nurodote tėvo darbo pavadinimą arba ID, „PowerShell“ grąžins duomenis iš visų vaikų darbo vietų. Problema yra ta, kad jei buvo padarytas klaida vienoje iš vaikų darbo vietų, mes paliksime šiek tiek raudoną tekstą.
Yra du būdai, kaip tai pasiekti. Visų pirma, jei žinote, kokius kompiuterius norite gauti rezultatus, galite tiesiog naudoti „cmdlet“ kompiuterio vardo parametrą..
Get-Job -Id 3 | Priimti darbą -Keep -ComputerName Viper
Arba galite gauti rezultatus iš konkretaus vaiko darbo, naudodami savo darbo ID.
Get-Job -Id 3 -IncludeChildJob
Get-Job -Id 5 | Priimti darbą - Laikyti
WMI darbai
„WMI“ užduotys yra tokios pačios kaip „Remote Jobs“, todėl „Get-WmiObject cmdlet“ reikia pridėti tik -AsJob parametrą.
Deja, tai reiškia, kad jiems taip pat taikomi tie patys dalykai, kuriuos minėjau skyriuje „Nuotolinis darbas“.
Planuojamos darbo vietos
Paskutinės trys darbų rūšys, kurių mes žiūrėjome, nebuvo patvarios, o tai reiškia, kad jos yra tik jūsų dabartinėje sesijoje. Iš esmės, tai reiškia, kad jei išeisite darbą ir atidarysite kitą „PowerShell“ konsolę ir paleisite „Get-Job“, nematysite jokių darbo vietų. Vis dėlto grįžkite į konsolę, iš kurios nuvažiavote darbą, galėsite matyti jo būseną. Tai skiriasi nuo planuojamų darbų yra patvarūs. Iš esmės suplanuotas darbas yra scenarijaus blokas, kuris veikia pagal tvarkaraštį. Anksčiau tas pats poveikis galėjo būti pasiektas naudojant „Windows Task Scheduler“, kuris iš tikrųjų vyksta po gaubtu. Jei norite sukurti naują suplanuotą darbą, atlikome šiuos veiksmus:
Registruotis-ScheduledJob -Name GetEventLogs -ScriptBlock Get-EventLog -LogName Saugumas -Newest 100 -Trigger (Naujas-JobTrigger -Dienos -At 5 val.) -ScheduledJobOption (Naujas suplanuotasJobOption -RunElevated)
Šioje komandoje vyksta nemažai, todėl suskaidykime.
- Pirma, mes pateikiame suplanuotą darbą „GetEventLogs“ pavadinimu.
- Tada pasakysime, kad, paleidus, mes norime, kad jis paleistų nurodyto scenarijaus bloko turinį, kuris iš esmės gauna naujausius 100 saugumo įvykių žurnalo įrašų.
- Toliau nurodome trigerį. Kadangi trigerio parametras įveda įjungimo objektą kaip įvestį, mes naudojome uždarymo komandą, kad sukurtume paleidiklį, kuris išeis kiekvieną dieną 5 val..
- Kadangi susiduriame su įvykių žurnalu, turime veikti kaip administratorius, kurį galime nurodyti sukūrę naują ScheduledJobOption objektą ir perduodant jį į ScheduledJobOption parametrą.
Kadangi tai yra šiek tiek kitokio tipo darbas, taip pat turėsite naudoti kitą komandą, kad gautumėte visų planuojamų darbų sąrašo sąrašą.
Get-ScheduledJob
Tai viskas, ką ji turi.