Homepage » hogyan kell » Geek iskola Tudja meg, hogyan kell használni a munkát a PowerShell-ben

    Geek iskola Tudja meg, hogyan kell használni a munkát a PowerShell-ben

    A PowerShell négyféle típusú feladattal rendelkezik: háttérmunkák, távmunkák, WMI-munkák és ütemezett munkák. Csatlakozzon hozzánk, amikor megtudjuk, hogy kik vannak és hogyan használhatjuk őket.

    Ügyeljen arra, hogy olvassa el a sorozat korábbi cikkeit:

    • Ismerje meg, hogyan kell automatizálni a Windowsot a PowerShell segítségével
    • Tanulj meg a Cmdlet használatát a PowerShell-ben
    • Tanulj meg, hogyan kell használni az objektumokat a PowerShell-ben
    • Tanulási formázás, szűrés és összehasonlítás a PowerShell-ben
    • Ismerje meg a Remoting használatát a PowerShell-ben
    • A PowerShell használata számítógépes információk megszerzéséhez
    • Munka a gyűjteményekkel a PowerShell-ben

    És hetekig tartsd a többi sorozatot.

    Háttér munkák

    Eddig mindazt, amit a PowerShell-ben megmutattam, szinkron volt, ami azt jelenti, hogy valamit a héjba írunk, és nem tudunk sokat csinálni, amíg a parancs nem fejezte be a végrehajtást. Itt jönnek be a háttérmunka. A háttér elindításához a feladat egyszerűen átadja a parancsfájlblokkot a Start-Job cmdlet-be.

    Start-Job -Name GetFileList -Scriptblokk Get-ChildItem C: \ t

    Most már szabadon csinálhatunk mindent, amit akarunk a héjban, míg a parancsfájlblokk a háttérben fut.

    Amikor új feladatot indít, a PowerShell létrehoz egy új feladatobjektumot, amely az adott feladatot képviseli. Az összes feladat listáját bármikor megkaphatja a Get-Job cmdlet futtatásával.

    A jobobjektumok tájékoztatják a munkák állapotáról. Például a fenti képernyőn láthatjuk, hogy van egy GetFileList nevű BackgroundJob, amely még fut, de már megkezdte az adatok visszatérését. Ha bármelyik ponton úgy dönt, hogy túl hosszú ideig fut a munka, könnyen leállíthatja azt a Stop-Job-hoz való csővezetékkel.

    Get-Job -Neve GetFileList | Stop-Job

    Azonban, ha leállította a munkát, a rendelkezésre álló adatoktól egészen addig, amíg le nem állt, még mindig elérhető. Van azonban egy baj. A PowerShell-ben, miután megkapta az eredményeket egy munkához, törlésre kerülnek. Annak érdekében, hogy azok maradjanak, meg kell adni a Fogadás-Job paraméter kapcsoló paraméterét.

    Get-Job -Neve GetFileList | Fogadás-Job -Keep

    Miután befejezte a munkát, a legjobb gyakorlat az eltávolítása. A feladat eltávolításához egyszerűen csatolja azt a Remove-Job cmdlet-hez.

    Get-Job -Neve GetFileList | Távolítsuk-Job

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

    Távoli munkák

    Néhány órával ezelőtt megnéztük, hogyan használhatjuk a távvezérlést a PowerShell parancsok végrehajtására egy távoli gépen az Invoke-Command segítségével, de tudtad, hogy az Invoke-Command segítségével is elindíthatsz egy távoli munkát a háttérben? Ehhez egyszerűen adja hozzá a -AsJob paramétert a parancs végén:

    Invoke-Command-Számítógépnév Flash, Viper -redencialista adminisztrátor -ScriptBlock gci -AsJob

    Ez egy egyszerű parancs volt, és most végre kellett volna hajtania a végrehajtást, így megnézheti a munkahelyi állapotunkat.

    Hmm, úgy néz ki, nem sikerült. Ez munkahelyekkel hozza el az első bánatomat. Amikor bármilyen új típusú feladatot hoz létre a PowerShell-ben, akkor egy szülői feladatot hoz létre egy gyermekfeladat mellett minden olyan számítógépen, amelyen a feladatot ellenzi. A Get-Job cmdlet használatakor csak a szülői feladatokat jeleníti meg, és az állam tulajdonsága a legrosszabb eset, ami azt jelenti, hogy még akkor is, ha a parancs csak a száz számítógép egyikéből nem futott, a szülő munkahelyi állapot azt fogja mondani nem sikerült. A gyermekfeladatok listájának megtekintéséhez az IncludeChildJob paramétert kell használni.

    Ha közelebb nézel, látni fogod, hogy a munka valójában csak egy számítógépen sikertelen volt, ami a következő gotchához vezet. Ha megpróbálja megkapni az eredményeket a feladathoz, ha megadja a szülő feladatnevét vagy azonosítóját, a PowerShell visszaadja az összes gyermek munkájának adatait. A probléma az, hogy ha van egy hiba az egyik gyermekmunkában, akkor néhány piros szöveggel maradunk.

    Ennek két módja van. Először is, ha tudod, hogy milyen számítógépeket akarsz az eredményekért, egyszerűen használd a Recne -Job cmdlet ComputerName paraméterét.

    Get-Job -Id 3 | Fogadás-Job -Keep -ComputerName Viper

    Alternatív megoldásként az eredményeket egy adott gyermekmunkáról is megkaphatja a feladat azonosítóját használva.

    Get-Job -Id 3 -IncludeChildJob

    Get-Job -Id 5 | Fogadás-Job -Keep

    WMI munkák

    A WMI jobok ugyanazok, mint a Távoli feladatok, és csak a -AsJob paramétert kell hozzáadni a Get-WmiObject cmdlethez.

    Sajnos ez azt jelenti, hogy a távmunkák szakaszban megemlítettek ugyanazokat a jelzéseket is.

    Ütemezett munkák

    A legutóbbi háromféle munka nem volt tartós, ami azt jelenti, hogy csak az aktuális munkamenetben érhetők el. Alapvetően ez azt jelenti, hogy ha elindít egy munkát, majd megnyit egy másik PowerShell konzolt, és futtatja a Get-Job programot, nem fog semmilyen munkát látni. Viszont, gyere vissza a konzolra, amivel elindította a munkát, akkor láthatja annak állapotát. Ez ellentétben áll az ütemezett munkákkal tartósak. Alapvetően az Ütemezett feladat egy ütemező blokk, amely egy ütemterv szerint fut. A múltban ugyanez a hatás érhető el a Windows Feladatütemező segítségével, ami valójában az, ami a motorháztető alatt történik. Új ütemezett feladat létrehozásához tegye a következőket:

    Regisztráció-ScheduledJob -Name GetEventLogs -ScriptBlock Get-EventLog -LogName biztonság -Newest 100 -Trigger (New-JobTrigger -Daily -At 17:00) -SzervezettJobOption (Új-ütemezettJobOption -RunElevated)

    A parancsban elég sok minden folyik, ezért tegyük le.

    • Először adjuk meg az ütemezett munkánknak a GetEventLogs nevét.
    • Aztán azt mondjuk, hogy amikor bekapcsoltuk, azt szeretnénk, hogy a megadott szkriptblokk tartalmát futtassuk, amely alapvetően a Biztonsági eseménynapló legújabb 100 bejegyzést kapja.
    • Ezután megadunk egy triggeret. Mivel a trigger paraméter bemenetként egy triggerobjektumot vesz fel, zárójeles parancsot használtunk egy olyan trigger létrehozásához, amely minden nap 17:00 órakor kialszik..
    • Mivel az eseménynaplóval foglalkozunk, rendszergazdaként kell futtatnunk, amelyet egy új ScheduledJobOption objektum létrehozásával és a ScheduledJobOption paraméterhez továbbíthatunk.

    Mivel ez egy kicsit más típusú feladat, más parancsot is kell használnia a listán lévő összes ütemezett munka listájának letöltéséhez.

    Get-ScheduledJob

    Ez az egész.