Olvassa el a sorozatban szereplő cikkeket:
- További információ a Windows PowerShell automatizálásáról
- A PowerShell-ben található cmdletek használatának elsajátítása
- A PowerShell objektumainak használata
- Tanulási formázás, szűrés és összehasonlítás a PowerShell-ben
- Tanulja meg a Remoting használatát a PowerShell programban
- A PowerShell használata a számítógépes információk beszerzéséhez
- A PowerShell gyűjteményeinek használata
És egész héten maradjon a sorozatban.
Háttér munkák
Eddig mindazt, amit a PowerShell-en belül mutatok be, szinkron volt, vagyis valamit beírunk a shellbe, és nem tehetünk sokat addig, 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.
Start-Job –Name GetFileList –Scriptblock {Get-ChildItem C: –Recurse}
Get-Job –Name GetFileList | Stop-Job
Azonban, ha abbahagyta a munkát, a rendelkezésre álló adatok mindaddig rendelkezésre állnak, amíg meg nem állítja azt. 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 –Name GetFileList | Receive-Job –Keep
Get-Job –Name 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 régebben megvizsgáltuk, hogyan használhatunk remontot 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ítsd a 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 administrator -ScriptBlock {gci} –AsJob
Ha közelebbről megnézed, akkor látni fogod, hogy a munka valójá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ő munkájának nevét vagy azonosítóját, a PowerShell visszaadja az adatokat az összes gyermek munkából. A probléma az, hogy ha valamelyik gyermek munkahelyén hiba történt, néhány piros szöveget hagyunk.
Get-Job –Id 3 | Receive-Job –Keep –ComputerName Viper
Get-Job -Id 3 –IncludeChildJob
Get-Job -Id 5 | Receive-Job –Keep
WMI munkák
A WMI munkái nagyjából ugyanazok, mint a távoli munkák, amelyek csak a -AsJob paramétert adják hozzá a Get-WmiObject cmdlethez.
Ütemezett munkák
Az utóbbi három féle munka, amelyet nézettünk, 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 tartósak. 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 tesszük:
Register-ScheduledJob -Name GetEventLogs -ScriptBlock {Get-EventLog -LogName Security -Newest 100} -Trigger (New-JobTrigger -Daily -At 5pm) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)
Nagyon sokat folyik a parancs, ezért töröljük le.
- Először a GetEventLogs nevét adjuk meg az Ütemezett feladatunknak.
- Aztán elmondjuk, hogy amikor aktiválódik, azt szeretnénk, hogy futtassa a megadott parancsfájl tartalmát, amely alapvetően megkapja a biztonsági eseménynapló legfrissebb 100 bejegyzését.
- Ezt követően egy triggeret adunk meg. 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 megadhatunk, és átmásolhatjuk a ScheduledJobOption paraméterre.
Get-ScheduledJob