If-Koubou

Geek-koulu: oppii käyttämään työpaikkoja PowerShellissä

Geek-koulu: oppii käyttämään työpaikkoja PowerShellissä (Miten)

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:

  • Opi käyttämään automaattista Windowsia PowerShellillä
  • Learning käyttämään Cmdlets PowerShellissä
  • Oppiminen esineiden käyttämisessä PowerShellissä
  • Oppimisen muotoilu, suodatus ja vertailu PowerShellissä
  • Opi käyttämään etäisyyttä PowerShellissä
  • PowerShellin käyttäminen tietokoneen tietojen saantiin
  • PowerShellin kokoelmien käsittely

Ja pysy kuulolla koko sarjan koko viikon ajan.

Taustatiedot

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.

Etäkäyttö

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öpaikat

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.

Ajoitetut työpaikat

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.

  • Ensinnäkin annamme ajastetun työn nimeksi GetEventLogs.
  • Sitten kerromme, että käynnistettäessä haluamme, että se ajaa määritetyn komentomerkin sisällön, joka pohjimmiltaan saa turvallisuuden tapahtumalokin uusimmat 100 merkinnät.
  • Seuraavaksi määrittelemme liipaisimen.Koska laukaisuparametri ottaa liipaisuobjektin tulona, ​​käytimme sulkeutuva komento laukaista, joka poistuu joka päivä klo 5.
  • Koska olemme tekemisissä tapahtumalokin kanssa, meidän pitää toimia ylläpitäjänä, jonka voimme määrittää luomalla uusi ScheduledJobOption -objekti ja siirtämällä se ScheduledJobOption-parametriin.

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.