29Aug

Geek Iskola: Ismerje meg a PowerShell munkahelyeinek használatát

click fraud protection

A PowerShell négyféle munkahelyet kínál: háttérmunkák, távoli munkák, WMI munkák és ütemezett munkák. Csatlakozzon hozzánk, és megtudjuk, hogy ők, és hogyan tudjuk használni őket.

Olvassa el a korábbi cikkeket a sorozatban:

  • Ismerje meg a Windows automatizálását a PowerShell programmal
  • A Cmdletek használata a PowerShell-ben
  • A PowerShell objektumok használatának tanulása
  • A tanulás formázása, szűrése és összehasonlítása a PowerShell
  • -ben Tanuljon meg a távoli telepítéshezPowerShell
  • A PowerShell használata a számítógépes információk beszerzéséhez
  • A PowerShell

gyűjteményeinek használata A hét minden részében maradjon a sorozatban.

Háttér Jobs

Mostanáig mindazt, amit a PowerShell-en belül megmutattam, szinkron volt, ami azt jelenti, hogy beírunk valamit a héjba, és tényleg nem sok mindaddig, amíg a parancs nem fejeződött be. Ebben az esetben a háttértárak bejövnek. A háttér elindításához a munka egyszerűen átír egy parancsfájlt a Start-Job cmdletre.

instagram viewer

Start-Job -Name GetFileList -Scriptblock{ Get-ChildItem C: \ -megőrzés}

Most szabadon tehetünk mindent, amit akarunk a shell alatt, amíg a szkript blokk végrehajtja a háttérben.

Amikor új feladatot indít el, a PowerShell új munkakört állít elő, amely az adott feladatot képviseli. A Get-Job cmdlet futtatásával bármikor megkaphatja az összes munkahely listáját.

A munkaköri objektumok megmondják a feladatok állapotát. Például a fenti képernyőképen láthatjuk, hogy van egy BackgroundJob nevű GetFileList, amely még mindig fut, de már elkezdte az adatok visszaküldését. Ha bármikor úgy döntesz, hogy a munka túl hosszú ideig fut, egyszerűen megállíthatja azt a Stop-Job segítségével.

Get-Job -név GetFileList |Stop-Job

Azonban, ha abbahagyta a munkát, bármilyen adatot kap, ameddig megállította azt, mégis elérhető.Van még egy szamár is. A PowerShell-ben, miután megkapja az eredményeket egy munkához, törölni fognak. Annak érdekében, hogy megmaradjon, meg kell adnia a Receive-Job tartani kapcsoló paraméterét.

Get-Job -név GetFileList |Fogadási-munka -Keep

Ha befejezte a munkát, a legjobb gyakorlat eltávolítani. A feladat eltávolításához egyszerűen pipálja ki a Remove-Job parancsmagot.

Get-Job -név GetFileList |Remove-Job

Ez eltávolítja a Get-Job által visszaadott feladatok listájáról.

Távoli munkák

Néhány lecke eddig azt vizsgálgatta, hogyan használhatjuk a Remoting-ot a PowerShell parancsok végrehajtására egy távoli gépen az Invoke-Command használatával, de tudtuk, hogy az Invoke-Command-ot is használhatod, hogy elindíts egy távoli feladatot a háttérben? Ehhez egyszerűen add hozzá az -AsJob paramétert a parancs végére:

Invoke-Command -ComputerName Flash, Viper -Credential adminisztrátor -ScriptBlock{ gci} -AsJob

Ez egy egyszerű parancs, és már befejezte a végrehajtástmegnézzük állásunk állapotát.

Hmm, úgy tűnik, nem sikerült. Ez hozza meg az első munkámat. Amikor létrehoz egy új munkát bármilyen típusú PowerShell, létrehoz egy szülő munka mellett egy gyermek munka minden olyan számítógép, amelyen a munkát ellen. Ha a Get-Job cmdletet használja, csak az szülő munkahelyeket jeleníti meg, és az állami tulajdon a legrosszabb forgatókönyv, ami azt jelenti, hogy ha a parancs csak száz számítógépből egy futtatáskor nem működik, akkor a szülő munkahelyi állapota azt fogja mondaninem sikerült. A gyermekmunkák listájának megtekintéséhez az IncludeChildJob paramétert kell használnia.

Ha közelebbről megnézed, akkor látni fogod, hogy a munka valóban csak egyetlen számítógépen sikertelen, ami a következő szamárhoz vezet. Amikor megpróbálja megkapni az eredményeket a feladatnál, ha megadja a szülő munkaköre nevét vagy azonosítóját, a PowerShell visszaadja az adatokat az összes gyermek munkahelyéről. A probléma az, hogy ha valamelyik gyermek munkahelyén hiba történt, néhány piros szöveget hagyunk.

Ennek két módja van. Először is, ha tudod, hogy mely számítógépeken szeretnéd az eredményeket elérni, egyszerűen használd a Recieve -Job cmdlet ComputerName paraméterét.

Get-Job -Id 3 |Fogadási munka -Keep-számítógépnév Viper

Alternatív megoldásként az eredményeket egy adott gyermek munkájával is megkaphatja a feladatazonosítóval.

Get-Job -Id 3 -IncludeChildJob

Get-Job -Id 5 |Fogadási munka -Keep

WMI munkák

WMI A munkák nagyjából ugyanazok, mint a távoli munkák, amelyek csak a -AsJob paramétert adják hozzá a Get-WmiObject cmdlethez.

Sajnos ez azt jelenti, hogy ugyanazok a gesztusok tartoznak, amelyeket a Távoli munkák részben említettem.

Ütemezett feladatok

Az utóbbi három féle feladat, amelyet megvizsgáltunk, nem volt tartós, tehát csak az aktuális munkamenetben érhető el. Alapvetően ez azt jelenti, hogy ha elindítja a munkát, majd megnyit egy másik PowerShell konzolt, és futtatja a Get-Job programot, nem fog látni semmilyen munkát. Ugyanakkor térjen vissza a konzolhoz, amellyel megszabadította a munkát, látni fogja állapotát. Ez ellentétben áll az ütemezett munkákkal, amelyek tartós .Alapvetően egy ütemezett munka egy parancsfájlblokk, amely ütemterv szerint fut. A múltban ugyanaz a hatás érhető el a Windows Task Scheduler használatával, ami valójában az, ami a kapucnival alatt történik.Új ütemezett feladat létrehozásához a következőket kell tennünk:

Register-ScheduledJob -Name GetEventLogs -ScriptBlock{ Get-EventLog -LogName Security-legkevesebb 100} -Trigger( New-JobTrigger -Daily -A 05:00) -ScheduledJobOption( New-ScheduledJobOption-RunElevated)

Nagyon sokat folyik itt a parancs, ezért töröljük le.

  • Először a GetEventLogs nevét adjuk meg az Ütemezett feladatnak.
  • Azt mondjuk meg, hogy aktiváláskor azt akarjuk, hogy futtassa a megadott parancsfájl tartalmát, amely alapvetően megkapja a biztonsági eseménynapló legfrissebb 100 bejegyzését.
  • Ezután megadunk egy triggeret. Mivel az indító paraméter beviteli triggerobjektumot vesz fel, egy szintaktikai parancsot használtunk arra, hogy létrehozzunk egy triggert, amely minden nap 5PM-on kialszik.
  • Mivel az eseménynaplóval foglalkozunk, rendszergazdaként kell futtatnunk, amelyet egy új ScheduledJobOption objektum létrehozásával adhatunk meg, és átadva a ScheduledJobOption paraméternek.

Mivel ez egy kissé más típusú munka, akkor egy másik parancsot is meg kell adnia, hogy lekérdezze a gép összes ütemezett munkájának listáját.

Get-ScheduledJob

Ez minden ami van.