Geek School Opi käyttämään työpaikkoja PowerShellissa
PowerShellissä on neljä työtyyppiä: taustatehtävät, etätyöpaikat, WMI-työt ja ajoitetut työt. Liity meihin, kun selvitämme, mitä ne ovat ja miten voimme käyttää niitä.
Muista lukea sarjan aiemmat artikkelit:
- Opi automatisoimaan Windows PowerShellillä
- Oppiminen käyttämään Cmdlet-tiedostoja PowerShellissä
- Opi käyttämään esineitä PowerShellissä
- Oppimisen muotoilu, suodatus ja vertailu PowerShellissa
- Opi käyttämään Remotingia PowerShellissä
- PowerShellin käyttäminen tietokoneen tietojen saamisessa
- Työskentely kokoelmien kanssa PowerShellissä
Ja pysy kuulolla koko sarjan koko viikon ajan.
Taustatehtävät
Tähän asti kaikki, mitä olen osoittanut sinulle PowerShellissä, on ollut synkroninen, mikä tarkoittaa, että kirjoitamme jotain kuoreen ja emme voi todellakaan tehdä paljon ennen kuin komento on päättynyt. Siellä tulevat taustatehtävät. Jos haluat aloittaa taustan, työ yksinkertaisesti siirtää komentosarjan lohkon Start-Job cmdletiin.
Start-Job -Nimi GetFileList -Scriptblock Get-ChildItem C: \ t
Nyt voimme vapaasti tehdä mitä haluamme kuoren sisällä, kun skriptilohko suoritetaan taustalla.
Kun käynnistät uuden työn, PowerShell luo uuden työn objektin, joka edustaa tätä työtä. Voit saada luettelon kaikista töistä milloin tahansa suorittamalla Get-Job cmdlet.
Työkohteet kertovat töiden tilasta. Esimerkiksi yllä olevassa kuvassa näytämme, että meillä on BackgroundJob nimeltään GetFileList, joka on edelleen käynnissä, mutta on jo aloittanut tietojen palauttamisen. Jos joskus päätät, että työ on ollut käynnissä liian kauan, voit helposti pysäyttää sen putkimalla sen Stop-Jobiin.
Get-Job -Nimi GetFileList | Stop-Job
Kun olet kuitenkin lopettanut työn, mitä tietoja se on saanut, kunnes se on pysäytetty, se on edelleen käytettävissä. On kuitenkin olemassa joku. PowerShellissa, kun saat tulokset työhön, ne poistetaan. Jotta ne pysyisivät, sinun on määritettävä Vastaanotto-Jobin pysäytysparametri.
Get-Job -Nimi GetFileList | Vastaanotto-Job -Keep
Kun olet valmis tekemällä työn, se on paras tapa poistaa se. Jos haluat poistaa työn, yksinkertaisesti työnnä se Poista-Job-cmdletiin.
Get-Job -Nimi GetFileList | Poista-Job
Tämä poistaa sen työpaikkojen luettelosta, jotka Get-Job palauttaa.
Etätyöpaikat
Muutamia tunteja sitten tarkastelimme, miten voimme käyttää Remoting-toimintoa suorittamaan PowerShell-komentoja etälaitteessa Invoke-Commandilla, mutta tiesitkö, että voit myös käyttää Invoke-Commandia käynnistämään remoting-työn taustalla? Voit tehdä tämän lisäämällä -AsJob-parametrin komennon loppuun:
Invoke-Command -tietokoneen nimi Flash, Viper -redential administrator -ScriptBlock gci -AsJob
Se oli yksinkertainen komento, ja sen olisi pitänyt suorittaa loppuun nyt, joten voit tarkastella työpaikkojen tilaa.
Hmm, näyttää siltä, että se epäonnistui. Tämä tuo minut ensimmäiseen gotchaani työpaikoilla. Kun luot uuden työn minkä tahansa tyypin mukaan PowerShellissa, se luo yhden vanhemman tehtävän yhden lapsityön lisäksi jokaiselle tietokoneelle, jota käytät työtä vastaan. Kun käytät Get-Job-cmdlet-sovellusta, se näyttää vain vanhemman tehtävät, ja valtion ominaisuus on pahin skenaario, mikä tarkoittaa, että vaikka komento epäonnistui vain yhdellä sadasta tietokoneesta, vanhemman työpaikan tila sanoo epäonnistui. Jos haluat nähdä luettelon lapsityöpaikoista, sinun on käytettävä IncludeChildJob-parametria.
Jos katsot lähemmäs, näet, että työ epäonnistui vain yhdellä tietokoneella, joka tuo meidät seuraavaan gotchaan. Kun yrität saada tulokset työhön, jos määrität vanhemman työn nimen tai tunnuksen, PowerShell palauttaa tiedot kaikista lapsen tehtävistä. Ongelmana on, että jos jossakin lapsen työpaikasta ilmenee virhe, jätämme jonkin verran punaista tekstiä.
On kaksi tapaa päästä tähän. Ensinnäkin, jos tiedät, mitä tietokoneita haluat, voit yksinkertaisesti käyttää Recne -Job-cmdlet-tietokoneen ComputerName-parametria.
Get-Job -Id 3 | Vastaanotto-Job -Keep -ComputerName Viper
Vaihtoehtoisesti voit saada tulokset tietystä lapsityöstä käyttämällä sen työtunnusta.
Get-Job -Id 3 -IncludeChildJob
Get-Job -Id 5 | Vastaanotto-Job -Keep
WMI-työpaikat
WMI-työtehtävät ovat paljon samanlaisia kuin etätyöpaikat, joten vain -AsJob-parametri lisätään Get-WmiObject-cmdletiin.
Valitettavasti tämä tarkoittaa sitä, että heille on asetettu myös samat kuitit, jotka mainitsin Remote Jobs -osiossa.
Ajoitetut työt
Kolme viimeksi tarkasteltua työtyyppiä eivät olleet pysyviä, mikä tarkoittaa, että ne ovat käytettävissä vain nykyisessä istunnossasi. Periaatteessa tämä tarkoittaa, että jos käynnistät työn ja avaat toisen PowerShell-konsolin ja suoritat Get-Jobin, et näe töitä. Voit kuitenkin palata konsoliin, jolle potkisit työn pois, voit nähdä sen tilan. Tämä on toisin kuin ajoitetut työt ovat pysyviä. Periaatteessa ajoitettu työ on skriptilohko, joka toimii aikataulussa. Aiemmin sama vaikutus olisi voitu saavuttaa käyttämällä Windows Task Scheduleria, joka on oikeastaan mitä hupun alla tapahtuu. Voit luoda uuden ajoitetun työn seuraavasti:
Register-ScheduledJob -Name GetEventLogs -ScriptBlock Get-EventLog -LogName Security -Newest 100 -Trigger (New-JobTrigger -Daily -At 5:00) -SuunnattuJobOption (uusi-ajoitettuJobOption -RunElevated)
Tässä komennossa on melko paljon meneillään, joten hajoitetaanko se.
- Ensinnäkin annamme ajoitetun työn nimen GetEventLogs.
- Sitten kerrotaan, että kun se käynnistetään, haluamme, että se suorittaa määritetyn skriptilohkon sisällön, joka saa pohjimmiltaan 100 uusinta tietoturvatapahtumalokia.
- Seuraavaksi määrittelemme liipaisimen. Koska liipaisuparametri ottaa liipaisuobjektin syötteeksi, käytimme sulkeutumiskomentoa luodakseen liipaisimen, joka poistuu joka päivä klo 17:00.
- Koska käsittelemme tapahtumalokia, meidän on suoritettava järjestelmänvalvojana, jonka voimme määrittää luomalla uuden ScheduledJobOption-objektin ja siirtämällä sen ScheduledJobOption-parametriin.
Koska kyseessä on hieman erilainen työ, sinun on myös käytettävä eri komentoa, jos haluat hakea luettelon kaikista ajoitetuista töistä koneessa.
Get-ScheduledJob
Se on kaikki siinä.