29Aug

Geek School: Naučte se používat úlohy v PowerShell

click fraud protection

PowerShell má čtyři typy úloh - poznatky na pozadí, vzdálené úlohy, úlohy WMI a naplánované úlohy. Připojte se k nám, když zjistíme, jaké to jsou a jak je můžeme použít.

Ujistěte se, že jste si přečetli předchozí články v sérii:

  • Naučte se automatizovat systém Windows s PowerShell
  • Naučte se používat cmdlety v PowerShellu
  • Učení o používání objektů v PowerShellu
  • Formátování učení, filtrování a porovnávání v PowerShell
  • Naučte se používat Remoting inPowerShell
  • Použití funkce PowerShell pro získání informací o počítači
  • Práce s kolekcemi v PowerShellu

A zůstaňte ladící po zbytek série celý týden.

Práce na pozadí

Až dosud vše, co jsem vám ukázal v rámci PowerShell, je synchrónní, což znamená, že do shellu něco napíšeme a opravdu moc neuděláme, dokud tento příkaz nedokončí spuštění.Toto je místo, kde přijíždějí zálohování na pozadí. Chcete-li spustit pozadí, úloha jednoduše předá skript bloku do cmdletu Start-Job.

Start-Job -Name GetFileList -Scriptblock{ Get-ChildItem C: \ -Recurse}

instagram viewer

Nyní můžeme dělat, co chceme v rámci shellu, zatímco tento blok skriptu se provádí na pozadí.

Při spuštění nové úlohy PowerShell vytvoří nový objekt úlohy, který představuje danou úlohu. Seznam všech úloh můžete kdykoli získat spuštěním rutiny Get-Job.

Objekty úlohy vás informují o stavu úloh. Například na výše uvedené obrazovce můžeme vidět, že máme BackgroundJob nazvaný GetFileList, který je stále spuštěn, ale již začal vracet data. Pokud se v jakémkoli okamžiku rozhodnete, že úloha běží příliš dlouho, můžete ji snadno zastavit tak, že ji přivedete do Stop-Job.

Get-Job -Name GetFileList |Stop-Job

Jakmile však ukončíte práci, budou veškeré údaje, které obdržely, až do okamžiku, kdy jste ji zastavili. Existuje však gotcha. V nástroji PowerShell, jakmile obdržíte výsledky pro úkol, budou odstraněny. Aby mohly zůstat, musíte zadat parametr udržovací přepínač Receive-Job.

Get-Job -Name GetFileList |Příjem-úloha

Po skončení práce je nejlepší odstranit. Chcete-li úlohu odstranit, jednoduše ji přetáhněte na cmdlet Odstranit úlohu.

Get-Job -Jde GetFileList |Remove-Job

Toto odstraní ze seznamu úloh vrácených pomocí funkce Get-Job.

vzdálené úlohy

Před pár hodinami jsme se podívali na to, jak můžeme použít remoting pro spuštění příkazů PowerShell na vzdáleném počítači pomocí příkazu Invoke-Command, ale víte, že můžete také použít příkaz Invoke-Command k tomu, abyste spustili práci remoting na pozadí?Chcete-li tak učinit, jednoduše přidejte parametr -AsJob na konec příkazu:

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

To byl jednoduchý příkaz a měl by být dokončen již nyníPodívejme se na náš pracovní status.

Hmm, vypadá to, že se nepodařilo. To mě přivádí k mému prvnímu gotchu s prací.Při vytváření nové úlohy libovolného typu v programu PowerShell vytvoří jednu rodičovskou úlohu vedle jedné podřízené úlohy pro každý počítač, na kterém je úloha spuštěna. Když použijete cmdlet Get-Job, zobrazuje pouze rodičovské úlohy a vlastnost státu je nejhorší scénář, což znamená, že i když příkaz se nepodařilo spustit na jednom ze stovek počítačů, říká stav rodičovských úlohselhalo. Chcete-li zobrazit seznam podřízených úloh, musíte použít parametr IncludeChildJob.

Pokud se podíváte blíž, zjistíte, že práce skutečně selhala pouze v jednom počítači, což nás přivádí k dalšímu chycení.Při pokusu o získání výsledků pro danou úlohu, pokud zadáte název úlohy rodiče nebo ID, PowerShell vrátí data ze všech podřízených úloh. Problémem je, že pokud došlo k chybě v jedné z podřízených úloh, budeme mít nějaký červený text.

Existují dva způsoby, jak se dostat kolem tohoto. Za prvé, pokud víte, na jaké počítače chcete výsledky, můžete jednoduše použít parametr ComputerName rýče Recieve -Job.

Get-Job-ID 3 |Receive-Job -Keep -ComputerName Viper

Alternativně můžete získat výsledky z určité podřízené úlohy pomocí ID úlohy.

Get-Job-ID 3 -IncludeChildJob

Get-Job -Id 5 |Příjem

WMI úlohy

Pracovní nabídky služby

WMI jsou stejné jako funkce Vzdálená pracoviště a vyžaduje pouze přidání parametru -AsJob do rutiny Get-WmiObject.

Bohužel to znamená, že jsou také předmětem stejných požadavků, které jsem zmínil v sekci Vzdálené úlohy. Plánované úlohy

Poslední tři druhy úloh, na které jsme se zabývali, nebyly trvalé, což znamená, že jsou k dispozici pouze v aktuální relaci. V podstatě to znamená, že pokud zahájíte práci a poté otevřete další PowerShell konzolu a spustit Get-Job, neuvidíte žádné úlohy. Vraťte se však zpět na konzolu, na kterou jste odkopli úlohu, a uvidíte její stav. To je na rozdíl od naplánovaných úloh, které jsou přetrvávající .Plánovaná úloha je v zásadě blokem skriptů, který běží podle plánu. V minulosti mohl být stejný vliv dosažen pomocí Plánovače úloh systému Windows, což je skutečně to, co se děje pod kapotou. Chcete-li vytvořit novou naplánovanou úlohu, proveďte následující kroky:

Registrovat-NaplánovánoJob -Name GetEventLogs -ScriptBlock{ Get-EventLog -LogName Zabezpečení -Newest 100} -Trigger( New-JobTrigger -Daily -At 17:00) -ScheduledJobOption( New-ScheduledJobOption-RunElevated)

V tomto příkazu se toho hodně děje, tak to rozbijeme.

  • Nejdříve uveďme Scheduled Job název GetEventLogs.
  • Poté řekneme, že při spuštění chceme spustit obsah zadaného bloku skriptů, který v zásadě získává nejnovější 100 záznamů protokolu událostí zabezpečení.
  • Dále zadáme spoušť.Vzhledem k tomu, že parametr spouštění vezme jako vstup vstupní objekt spouštění, použili jsme pro zadání příkazu závorku, který bude každým dnem vypínat v 5pm.
  • Protože se zabýváme protokolem událostí, musíme běžet jako správce, který můžeme specifikovat vytvořením nového objektu ScheduledJobOption a předáním jeho parametru ScheduledJobOption.

Protože se jedná o poněkud jiný typ úlohy, budete muset použít jiný příkaz k získání seznamu všech plánovaných úloh na stroji.

Get-ScheduledJob

To je vše, co je k tomu.