PowerShellillä on neljätyyppistä työtä - Taustatiedot, Etäkäyttö, WMI-työt ja aikataulutetut työt. Liity mukaan, kun saamme selville, mitä he ovat ja miten voimme käyttää niitä.
Muista lukea sarjan aiemmat artikkelit:
Ja pysy kuulolla koko sarjan koko viikon ajan.
Tähän mennessä kaikki, mitä olen osoittanut PowerShellissä, on synkronoitu, eli kirjoitamme jotain kuoriin ja emme voi todella tehdä paljon ennen kuin komento on päättynyt. Tällöin taustatyöt tulevat sisään. Taustan aloittamiseksi työ yksinkertaisesti ohittaa komentojonon Start-Job-cmdlet-komentoon.
Start-Job -nimi GetFileList -Scriptblock Get-ChildItem C: \ -Recurse
Nyt voimme tehdä mitä haluamme kuoressa, kun taas komentosarja estää taustalla.
Kun käynnistät uuden työn, PowerShell luo uuden työn objektin, joka edustaa tätä työtä. Voit saada luettelon kaikista työpaikoista milloin tahansa suorittamalla Get-Job-cmdlet.
Työkohteista kerrotaan työpaikkojen tilasta. Esimerkiksi edellä kuvatussa kuvakaappauksessa voimme nähdä, että meillä on vielä GetFileList-niminen BackgroundJob-toiminto, joka on jo alkanut palauttaa tietoja. Jos jossakin vaiheessa päätätte, että työ on ollut liian kauan käynnissä, voit helposti pysäyttää sen viemällä sen Stop-Jobiin.
Get-Job -nimi GetFileList | Stop-Job
Kuitenkin, kun olet lopettanut työn, kaikki tiedot, jotka se sai, kunnes piste, joka pysäytät sen, on edelleen käytettävissä. Siitä on kuitenkin hana. PowerShellissä, kun saat työn tulokset, ne poistetaan. Jotta ne pysyisivät, sinun on määritettävä vastaanottotyökalun Keep Switch -parametri.
Get-Job -nimi GetFileList | Vastaanota-Työ -Keep
Kun olet valmis työhön, on hyvä käytäntö poistaa se. Työn poistaminen yksinkertaisesti putkeksi Poista-työ-cmdlettiin.
Get-Job -nimi GetFileList | Poista-Job
Tämä poistaa sen Get-Jobin palauttamien töiden luettelosta.
Muutama tunne sitten katsoimme, kuinka voimme käyttää kaukosäädintä PowerShell-komentoiden suorittamiseen etäkoneella Invoke-Commandin avulla, mutta tiesitkö, että voit myös käyttää Invoke-Command-ohjelmaa aloittaaksesi kaukosäätimen työn taustalla? Voit tehdä niin yksinkertaisesti lisätä -AsJob-parametrin komennon loppuun:
Invoke-Command -TietokoneName Flash, Viper -Valtuutettu järjestelmänvalvoja -ScriptBlock gci -AsJob
Se oli yksinkertainen komento, ja sen pitäisi olla päättynyt jo nyt, joten katsomme työtehtävästämme.
Hmm, näyttää siltä että se epäonnistui. Tämä tuo minut ensimmäiseen sahaan töihin. Kun luot minkä tahansa tyyppisen uuden työn PowerShellissä, se luo yhden vanhemman työn yhdelle lapsityöhön jokaiselle tietokoneelle, jota vastaan suoritat työtä. Kun käytät Get-Job-cmdletä, se näyttää vain vanhemmat työt ja valtion omaisuus on huonoin tapaus, mikä tarkoittaa sitä, että vaikka komento ei onnistunut vain yhdellä sadasta tietokoneesta, vanhemman työpaikan tila sanoo epäonnistui. Jos haluat nähdä luettelon lapsityövoimista, sinun on käytettävä IncludeChildJob -parametria.
Jos katsot lähemmäksi, huomaat, että työpaikka todellakin epäonnistui vain yhdellä tietokoneella, mikä vie meidät seuraavaan sahalaitokseen. Kun yrität saada työn tulokset, jos määrität vanhemman työnimen tai tunnuksen, PowerShell palauttaa tiedot kaikista lapsityöpaikoista. Ongelmana on se, että jos jollakin lapsityöstä syntyy virhe, jätämme jonkin verran punaista tekstiä.
Tässä on kaksi tapaa kiertää tätä. Ensinnäkin, jos tiedät, mistä tietokoneista haluat tuloksia, voit käyttää vain Recieve -Job-cmdletin ComputerName -parametria.
Get-Job -Id 3 | Vastaanotto-Työ -Keep-TietokoneNime Viper
Vaihtoehtoisesti voit saada tuloksia tietystä lapsityöstä käyttämällä sen työtunnusta.
Get-Job -Id 3 -IncludeChildJob
Get-Job -Id 5 | Vastaanota-Työ -Keep
WMI-työt ovat paljon samoja kuin etätoimistot, jotka tarvitsevat vain -AsJob-parametrin lisäämisen Get-WmiObject-cmdlettiin.
Valitettavasti tämä tarkoittaa sitä, että heihin sovelletaan myös samoja hämähäkkejä, jotka mainitsin etätyöpaikat -osiossa.
Viimeiset kolmentyyppiset työpaikat, joita tarkastelimme, eivät olleet pysyviä, joten ne ovat käytettävissä vain nykyisessä istunnossasi. Periaatteessa tämä tarkoittaa sitä, että jos aloitat työn ja avaat toisen PowerShell Consolen ja suoritat Get-Jobin, et näe mitään työpaikkoja. Palaa kuitenkin takaisin konsoliin, josta potkittiin työtä, ja näet sen tilan. Tämä on vastoin ajoitettuja työtehtäviä, jotka ovat pysyviä. Periaatteessa aikataulu on skripti, joka toimii aikataulussa. Aiemmin sama vaikutus olisi voitu saavuttaa käyttämällä Windows Task Scheduler -ohjelmaa, joka on oikeastaan mitä tapahtuu hupparin alla. Voit luoda uuden ajoitetun työn seuraavasti:
Register-ScheduledJob -Name GetEventLogs -ScriptBlock Get-EventLog -LogName-turva-Uusin 100 -Trigger (New-JobTrigger-Päivittäinen-klo 17) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)
Tässä komennossa on melko paljon, joten hajottakaamme sen.
Koska tämä on hieman erilaista työtä, sinun täytyy myös käyttää eri komentoa hakeakseen luettelon kaikista koneen ajoitetuista töistä.
Get-ScheduledJob
Siinä kaikki on.