Geek Kool Õpi kasutama töökohti PowerShellis
PowerShellil on nelja tüüpi töökohti - taustal töökohti, kaugtööd, WMI töökohti ja planeeritud töökohti. Liitu meiega, kui saame teada, mis nad on ja kuidas neid kasutada.
Lugege kindlasti seeria eelmisi artikleid:
- Lugege, kuidas Windowsi PowerShelli abil automatiseerida
- Õppimine kasutama Cmdleti PowerShellis
- Õppimine, kuidas kasutada objekte PowerShellis
- Vormindamine, filtreerimine ja võrdlemine PowerShellis
- Õpi kasutama Remotingit PowerShellis
- PowerShelli kasutamine arvutiteabe saamiseks
- Töötamine kogudega PowerShellis
Ja hoia ülejäänud sarja jaoks terve nädal.
Tausta töökohti
Siiani on kõik, mida ma olen PowerShelli sees näidanud, sünkroonne, mis tähendab, et me kirjutame midagi kesta ja ei saa tegelikult palju teha, kuni see käsk on lõpetanud. See on koht, kus taustal töökohti tulevad. Tausta alustamiseks läheb töö lihtsalt skripti blokeerimise käivitus-cmdletile.
Start-Job -Nimi GetFileList -Scriptiblokk Get-ChildItem C: \ t
Nüüd on meil vabadus teha kõike, mida tahame koorega, samas kui skriptiplokk täidab taustal.
Uue töö käivitamisel loob PowerShell uue tööobjekti, mis esindab seda tööd. Kõikide töökohtade loendi saate igal ajal, käivitades Get-Job cmdlet.
Tööobjektid ütlevad teile töökohtade staatuse. Näiteks näeme ülaltoodud pildil, et meil on BackgroundJob nimega GetFileList, mis on veel töötav, kuid on juba alustanud andmete tagastamist. Kui te otsustate, et töö on kestnud liiga kaua, saate selle lihtsalt peatada Stop-Jobile.
Get-Job -Nimi GetFileList Stop-Job
Kuid kui olete töö peatanud, olenemata sellest, milliseid andmeid see on kuni selle peatamiseni, mida te lõpetasite, on veel saadaval. Kuid on olemas ka mina. PowerShellis, kui olete saanud töö tulemuse, kustutatakse need. Selleks, et need jääksid, peate määrama vastuvõtmise tööparameetri.
Get-Job -Nimi GetFileList Vastuvõtt-töö -Keep
Kui olete tööga lõpetanud, on see hea tava eemaldada. Töö eemaldamiseks pange see lihtsalt eemaldatava töö cmdletile.
Get-Job -Nimi GetFileList Eemalda-Job
See eemaldab selle Get-Jobi tagastatud tööde loendist.
Kaugtööd
Mõningaid õppetunde, me vaatasime, kuidas me saame kasutada kaugjuhtimist, et käivitada PowerShelli käsud kaugarvutis Invoke-Command'i abil, aga kas teadsite, et saate kasutada ka Invoke-Commandit, et alustada remotingu tööd taustal? Selleks lisage lihtsalt -AsJob parameeter käsu lõppu:
Käivita käsk -arvuti nimi Flash, Viper -Kvaliteedihaldur -ScriptBlock gci -AsJob
See oli lihtne käsk ja see oleks pidanud nüüdseks täitma, nii et saate vaadata meie töökohtade olekut.
Hmm, näeb välja nagu ebaõnnestus. See toob mind töökohtadega minu esimesele tuttavale. Kui loote PowerShellis mis tahes tüüpi uue töö, loob see ühe vanemtöö lisaks ühele lapstööle iga arvuti jaoks, millega te tööd teete. Kui kasutate Get-Job'i cmdletit, näitab see ainult vanemate töökohti ja riigi vara on halvim stsenaarium, mis tähendab, et isegi kui käsku ei õnnestunud käivitada ainult ühest sajast arvutist, ütleb vanemate töökohtade seisund ebaõnnestus. Laste tööde loendi vaatamiseks peate kasutama parameetrit IncludeChildJob.
Kui te lähemalt vaatate, näete, et see töö tõepoolest ainult ühes arvutis ebaõnnestus, mis toob meid järgmise gotcha peale. Kui proovite töö tulemuste saamiseks, kui määrate vanema töökoha nime või ID, tagastab PowerShell andmed kõigi laste töökohtadest. Probleem on selles, et kui mõnes lapse töökohas on viga, jäetakse meile punaseks tekstiks.
Selle saavutamiseks on kaks võimalust. Esiteks, kui te teate, milliseid arvuteid soovite tulemusi saada, saate lihtsalt kasutada cmdleti Recnie -Job ComputerName parameetrit.
Get-Job -Id 3 | Vastuvõtt-töö -Keep -arvuti nimi Viper
Teise võimalusena saate tulemuste saamiseks konkreetse lapse töö, kasutades oma töö ID-d.
Get-Job -Id 3 -IncludeChildJob
Get-Job -Id 5 | Vastuvõtt-töö -Keep
WMI töökohti
WMI tööpakkumised on palju sarnased kaugtöödega, nõudes ainult -AsJobi parameetri lisamist cmdletile Get-WmiObject.
Kahjuks tähendab see seda, et neile kehtivad ka need, mida ma mainisin kaugtööde jaotises.
Planeeritud töökohad
Kolm viimast tööd, mida me vaatasime, ei olnud püsivad, mis tähendab, et need on saadaval ainult teie praegusel seansil. Põhimõtteliselt tähendab see, et kui te tööle hakkate ja seejärel avate teise PowerShelli konsooli ja käivitate Get-Jobi, ei näe te ühtegi töökohta. Kuid tulge tagasi konsooli, mille te töö ära viskasite, saate näha selle staatust. See on erinevalt ajastatud töökohtadest, mis on püsivad. Põhimõtteliselt on planeeritud töö skripti plokk, mis töötab ajakavaga. Varem oli sama mõju võimalik saavutada ka Windowsi ülesannete planeerija abil, mis tõesti toimub kapoti all. Uue planeeritud töö loomiseks teeme järgmist:
Register-ScheduledJob -Name GetEventLogs -ScriptBlock Get-EventLog -LogName Turvalisus - uusim 100 -Trigger (New-JobTrigger -Daily -At 17:00) -ScheduledJobOption (uus-planeeritudJobOption -RunElevated)
Selles käskluses on üsna palju, nii et lõhkem seda.
- Esiteks anname meie planeeritud tööle GetEventLogs'i nime.
- Seejärel räägime sellest, et kui käivitada, siis tahame, et see käivitaks määratud skriptiploki sisu, mis põhimõtteliselt saab uusima 100 turvavõistluslogi kirjet.
- Järgmiseks määrame käivitaja. Kuna trigeri parameeter võtab sisendina käivitusobjekti, kasutasime sulgemiskäsku, et genereerida käivitus, mis väljub iga päev kell 5:00.
- Kuna tegemist on sündmuste logiga, peame töötama administraatorina, mida me saame määrata uue ScheduledJobOption objekti loomisega ja edastades selle ScheduledJobOption parameetrile.
Kuna tegemist on pisut teistsuguse tööga, peate kasutama ka teistsugust käsku, et laadida loend kõigi planeeritud töökohtade kohta.
Get-ScheduledJob
See on kõik selleks.