29Aug

Geeki kool: õppige, kuidas kasutada töökohti PowerShellis

PowerShellil on neli töökohta - taustteosed, kaugtööd, WMI töökohad ja planeeritud töökohad. Liitu meiega, kui saame teada, mis need on ja kuidas me neid kasutada.

Kindlasti loe eelnevaid sarja artikleid:

  • Õppige, kuidas automatiseerida Windows PowerShelliga
  • PowerShelli moodulite õppimine
  • Õppimine kuidas objektidest PowerShellis
  • õppimine vormindada, filtreerida ja võrrelda
  • Õppige kasutama Remotingi kasutamistPowerShell
  • PowerShelli kasutamine arvutiteabe hankimiseks
  • PowerShelli

kollektsioonidega töötamine ja jääge häälestatuks ülejäänud sarja kogu nädala jooksul.

taustteosed

Kuni siiani kõik, mida PowerShellis näitasin, on olnud sünkroonne, mis tähendab, et me sisestasime midagi koopiasse ja ei suuda tegelikult teha palju, kuni see käsk on täitmise lõpetanud. See on koht, kus taustal töökohti tuleb. Tausta käivitamiseks edastage töökäik lihtsalt Start-Jobi käsku Skriptiklapp.

Start-Job -Nimi GetFileList -Scriptblock{ Get-ChildItem C: \ -Recurse}

Nüüd on meil vabadus teha seda, mida me soovime shelli sees, kui see skriptikeel täidab taustal.

Kui käivitate uue töö, loob PowerShell selle töö jaoks uue tööobjekti. Kõigi töökohtade loendi saate igal ajal saada, käivitades Get-Jobi cmdlet.

Tööobjektid räägivad töökohtade seisust. Näiteks ülaltoodud ekraanipildil näeme, et meil on BackgroundTob, mida nimetatakse GetFileList, mis töötab ikka veel, kuid on juba hakanud andmeid tagasi saatma. Kui mõnes punktis otsustate, et töö on liiga pikk, saate seda lihtsalt peatada, toruates seda Stop-Jobile.

Get-Job -Nimi GetFileList |Stop-Job

Siiski, kui olete tööd lõpetanud, on kõik andmed, mida ta sai kätte kuni teie peatatud punkti, endiselt kättesaadavaks. Kuid küll on küll. PowerShellis saate töö tulemuste saamise korral kustutada. Selleks, et need jääksid, peate määrama Receive-Job'i pidamise lüliti parameetri.

Get-Job -Nimi GetFileList |Receive-Job -Keep

Kui olete töö lõpetanud, on parim viis selle eemaldamiseks. Töö eemaldamiseks laadige see lihtsalt Remove-Job'i cmdletti.

Get-Job -Nimi GetFileList |Remove-Job

See eemaldab selle Get-Job tagastatud töökohtade loendist.

kaughaldusega töökohad

Mõne varasema õppetundi käigus vaadeldi, kuidas me saame remotingit kasutada PowerShelli käskude käivitamiseks kaugarvutis, kasutades käsku Invoke-Command, kuid kas teadsite, et võite kasutada ka käsku Invoke käsku, et käivitada remoting töö taustal? Selleks lisage lihtsalt käsku -AsJob parameeter:

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

See oli lihtne käsk ja see oleks pidanud lõpule viima tänasenivõimaldab vaadata meie töökoha staatust.

Hmm, tundub, et see ebaõnnestus. See toob mind esimesse töökohta juurde. Kui loote PowerShellis mis tahes tüüpi uue töökoha, luuakse see lisaks ühele lapsele igale arvutile, kus te töötate, vastu ühe töökoha. Kui kasutate Get-Jobi cmdletti, näitab see ainult teie vanemate töökohti ja riigiomand on halvim stsenaarium, mis tähendab, et isegi kui käsk puudus ainult ühes sajast arvutist, siis ütlevad vanemate töökohadebaõnnestus. Lapse tööde loendi vaatamiseks peate kasutama Parameetrit IncludeChildJob.

Kui vaatate lähemalt, siis näete, et töö ainult ühe arvutiga ei suutnud, mis toob meid järgmisele gotikale. Kui proovite ja saadate tulemusi töö jaoks, kui määrate vanema töönime või ID-d, tagastab PowerShell kõik lapse töökohad. Probleem on selles, et kui mõnes lapse töökohas esineb viga, jäetakse meile punase teksti juurde.

Selleks on kaks võimalust. Esiteks, kui teate, milliseid arvuteid soovite tulemusi soovid, võite lihtsalt kasutada käsku Recieve -Job parameetri ComputerName.

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

Alternatiivina võite saada tulemusi konkreetsest lapsepõlvest, kasutades oma töö id-i.

Get-Job -Id 3 -IncludeChildJob

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

WMI töökohad

WMI töökohad on palju sarnased kaugtöödega, nõudes ainult -AsJob-i parameetrit, mis lisatakse Get-WmiObject'i cmdlet-le.

Kahjuks tähendab see seda, et nende suhtes kehtivad samad saatkonnad, mida ma mainisin jaotises Remote Jobs.

planeeritud töökohad

Kolm viimast tööd, mida me vaatlesime, ei olnud püsivad, mis tähendab, et need on saadaval ainult teie praeguses seansis. Põhimõtteliselt tähendab see, et kui te tööle hakkate ja seejärel avaneb teine ​​PowerShelli konsool ja käivitage Get-Job, ei näe te töökohti. Kuid pöörduge tagasi konsooli, kuhu töötasite välja, siis näete selle staatust. See on vastuolus ajakavadega, mille on püsivad .Põhimõtteliselt on Scheduled Job skriptikeel, mis töötab graafikus. Varem oli sama mõju saanud saavutada Windows Task Scheduler, mis on tõesti see, mis toimub kapoti all. Uue ajastatud töö loomiseks teeme järgmist:

Register-ScheduledJob -Nimi GetEventLogs -ScriptBlock{ Get-EventLog -LogName Turvalisus -Newest 100} -Trigger( New-JobTrigger -Daily -At 5pm) -ScheduledJobOption( New-ScheduledJobOption)-RunElevated)

Selles käskluses toimub suhteliselt palju, nii et laseksime seda murda.

  • Esiteks anname Scheduled Job'ile GetEventLogsi nime.
  • Seejärel ütleme, et kui see käivitatakse, soovime, et see käivitab määratud skriptikloki sisu, mis sisuliselt jõuab turvalisuse sündmuste logi kõige uuemate 100 kirjeteni.
  • Järgnevalt määratleme päästiku. Kuna käivitusparameeter sisestamisel käivitusobjekti võtab, kasutasime käskluse sisestamise käsku, et genereerida päästiku, mis läheb igal päeval 5-minutisse ajani.
  • Kuna me käsitleme sündmuste logi, peame käivitama administraatorina, mida saame täpsustada, luues uue ScheduledJobOption objekti ja edastades selle ScheduledJobOption parameetrile.

Kuna tegemist on veidi teistsuguse tööga, peate ka masinaga kõigi planeeritud tööde loendi leidmiseks kasutama teistsugust käsku.

Get-ScheduledJob

See on kõik selleks otstarbeks.