Geek School: Naučte sa používať úlohy v PowerShell

Obsah:

Geek School: Naučte sa používať úlohy v PowerShell
Geek School: Naučte sa používať úlohy v PowerShell

Video: Geek School: Naučte sa používať úlohy v PowerShell

Video: Geek School: Naučte sa používať úlohy v PowerShell
Video: Sally's abandoned Southern cottage in the United States - Unexpected discovery - YouTube 2024, Smieť
Anonim
PowerShell má štyri typy úloh - pracovné pozadie, pracovné miesta na diaľku, pracovné miesta WMI a naplánované úlohy. Pridajte sa k nám, keď zisťujeme, akí sú a ako ich môžeme použiť.
PowerShell má štyri typy úloh - pracovné pozadie, pracovné miesta na diaľku, pracovné miesta WMI a naplánované úlohy. Pridajte sa k nám, keď zisťujeme, akí sú a ako ich môžeme použiť.

Nezabudnite si prečítať predchádzajúce články v sérii:

  • Naučte sa ako automatizovať systém Windows pomocou nástroja PowerShell
  • Naučiť sa používať Cmdlets v PowerShell
  • Učenie ako používať objekty v PowerShell
  • Formátovanie učenia, filtrovanie a porovnávanie v systéme PowerShell
  • Naučte sa používať Remoting v PowerShell
  • Použitie nástroja PowerShell na získanie informácií o počítači
  • Práca s kolekciami v systéme PowerShell

A zostávajte celú týždeň na zvyšok série.

Pracovné pozadie

Doteraz bolo všetko, čo som vám uviedlo v systéme PowerShell, synchrónne, čo znamená, že niečo napíšeme do shella a nemôžeme robiť veľa, kým príkaz neskončí. Toto je miesto, kde prídu pozadia úloh. Ak chcete spustiť pozadie, úloha jednoducho odovzdať blok skriptu do cmdlet Štart-úloha.

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

Teraz môžeme slobodne robiť všetko, čo chceme v rámci shellu, zatiaľ čo blok skriptu sa spustí na pozadí.
Teraz môžeme slobodne robiť všetko, čo chceme v rámci shellu, zatiaľ čo blok skriptu sa spustí na pozadí.
Keď spustite novú úlohu, PowerShell vytvorí nový objekt úlohy, ktorý predstavuje danú úlohu. Všetky úlohy môžete kedykoľvek získať spustením cmdletu Get-Job.
Keď spustite novú úlohu, PowerShell vytvorí nový objekt úlohy, ktorý predstavuje danú úlohu. Všetky úlohy môžete kedykoľvek získať spustením cmdletu Get-Job.
Objekty úlohy vám hovoria o stave úloh. Napríklad na horeuvedenom obrázku môžeme vidieť, že máme BackgroundJob s názvom GetFileList, ktorý stále beží, ale už začal vracať dáta. Ak sa v ľubovoľnom bode rozhodnete, že úloha prebehla príliš dlho, môžete ju ľahko zastaviť tak, že ju vytlačíte na Stop-Job.
Objekty úlohy vám hovoria o stave úloh. Napríklad na horeuvedenom obrázku môžeme vidieť, že máme BackgroundJob s názvom GetFileList, ktorý stále beží, ale už začal vracať dáta. Ak sa v ľubovoľnom bode rozhodnete, že úloha prebehla príliš dlho, môžete ju ľahko zastaviť tak, že ju vytlačíte na Stop-Job.

Get-Job –Name GetFileList | Stop-Job

Avšak, ak ste zastavili prácu, akékoľvek údaje, ktoré získal až do bodu, kedy ste ju zastavili, sú stále k dispozícii. K dispozícii je však gotcha. V nástroji PowerShell, akonáhle získate výsledky pre úlohu, budú odstránené. Na to, aby zostali, musíte určiť parameter udržiavacieho prepínača Receive-Job.
Avšak, ak ste zastavili prácu, akékoľvek údaje, ktoré získal až do bodu, kedy ste ju zastavili, sú stále k dispozícii. K dispozícii je však gotcha. V nástroji PowerShell, akonáhle získate výsledky pre úlohu, budú odstránené. Na to, aby zostali, musíte určiť parameter udržiavacieho prepínača Receive-Job.

Get-Job –Name GetFileList | Receive-Job –Keep

Keď skončíte prácou, najlepšie je odstrániť ju. Ak chcete úlohu odstrániť, jednoducho ju odskrutkujte na cmdlet Odstrániť úlohu.
Keď skončíte prácou, najlepšie je odstrániť ju. Ak chcete úlohu odstrániť, jednoducho ju odskrutkujte na cmdlet Odstrániť úlohu.

Get-Job –Name GetFileList | Remove-Job

Tým sa odstráni zo zoznamu úloh vrátených nástrojom Get-Job.

Image
Image

Vzdialené úlohy

Pred pár hodinami sme sa pozreli na to, ako môžeme použiť remoting na vykonanie príkazov PowerShell na vzdialenom počítači pomocou Invoke-Command, ale viete, že môžete použiť aj Invoke-Command na spustenie remoting úlohy na pozadí? Za týmto účelom jednoducho pridajte parameter -AsJob na koniec príkazu:

Invoke-Command -ComputerName Flash,Viper -Credential administrator -ScriptBlock {gci} –AsJob

To bol jednoduchý príkaz a malo by sa skončiť s vykonávaním už, takže sa môžete pozrieť na náš stav práce.
To bol jednoduchý príkaz a malo by sa skončiť s vykonávaním už, takže sa môžete pozrieť na náš stav práce.
Hmm, vyzerá to, že sa nepodarilo. To ma prináša do prvej gotchy s prácou. Pri vytváraní novej úlohy akéhokoľvek druhu v systéme PowerShell vytvorí jednu nadradenú úlohu okrem jednej úlohy pre každý počítač, na ktorom prácu vykonávate. Keď použijete cmdlet Get-Job, zobrazí sa iba rodičovské úlohy a stav štátu je najhorší scenár, čo znamená, že aj keď sa príkaz nepodarilo spustiť iba na jednom zo sto počítačov, povedie stav rodičovských úloh zlyhalo. Ak chcete zobraziť zoznam podradených úloh, musíte použiť parameter IncludeChildJob.
Hmm, vyzerá to, že sa nepodarilo. To ma prináša do prvej gotchy s prácou. Pri vytváraní novej úlohy akéhokoľvek druhu v systéme PowerShell vytvorí jednu nadradenú úlohu okrem jednej úlohy pre každý počítač, na ktorom prácu vykonávate. Keď použijete cmdlet Get-Job, zobrazí sa iba rodičovské úlohy a stav štátu je najhorší scenár, čo znamená, že aj keď sa príkaz nepodarilo spustiť iba na jednom zo sto počítačov, povedie stav rodičovských úloh zlyhalo. Ak chcete zobraziť zoznam podradených úloh, musíte použiť parameter IncludeChildJob.
Ak sa pozriete bližšie, uvidíte, že práca naozaj zlyhala iba v jednom počítači, čo nás privedie k ďalšej klapke. Keď sa pokúsite získať výsledky úlohy, ak zadáte názov úlohy rodiča alebo ID, PowerShell vráti dáta zo všetkých podradených úloh. Problém je v tom, že ak došlo k chybe v jednej z podradených úloh, budeme mať nejaký červený text.
Ak sa pozriete bližšie, uvidíte, že práca naozaj zlyhala iba v jednom počítači, čo nás privedie k ďalšej klapke. Keď sa pokúsite získať výsledky úlohy, ak zadáte názov úlohy rodiča alebo ID, PowerShell vráti dáta zo všetkých podradených úloh. Problém je v tom, že ak došlo k chybe v jednej z podradených úloh, budeme mať nejaký červený text.
Existujú dva spôsoby, ako to dosiahnuť. Po prvé, ak viete, na ktorých počítačoch chcete dosiahnuť výsledky, jednoducho použite parameter ComputerName pre rýpadlo Receive -Job.
Existujú dva spôsoby, ako to dosiahnuť. Po prvé, ak viete, na ktorých počítačoch chcete dosiahnuť výsledky, jednoducho použite parameter ComputerName pre rýpadlo Receive -Job.

Get-Job –Id 3 | Receive-Job –Keep –ComputerName Viper

Alternatívne môžete získať výsledky z konkrétnej podriadenej úlohy pomocou čísla úlohy.
Alternatívne môžete získať výsledky z konkrétnej podriadenej úlohy pomocou čísla úlohy.

Get-Job -Id 3 –IncludeChildJob

Image
Image

Get-Job -Id 5 | Receive-Job –Keep

Image
Image

Pracovné miesta služby WMI

Pracovné úlohy služby WMI sú rovnaké ako pracovné miesta na diaľku a vyžadujú sa, aby bol do zdielacieho programu Get-WmiObject pridaný iba parameter -AsJob.

Image
Image
Bohužiaľ, to znamená, že sú tiež predmetom rovnakých gotchas, ktoré som spomenul v sekcii Vzdialené pracovné miesta.
Bohužiaľ, to znamená, že sú tiež predmetom rovnakých gotchas, ktoré som spomenul v sekcii Vzdialené pracovné miesta.

Plánované úlohy

Posledné tri druhy pracovných miest, na ktoré sme sa pozreli, neboli pretrvávajúce, čo znamená, že sú k dispozícii len v aktuálnej relácii. V podstate to znamená, že ak odštartujete prácu a potom otvoríte inú PowerShell konzolu a spustite Get-Job, neuvidíte žiadne úlohy. Vráťte sa späť na konzolu, na ktorú ste odhodili úlohu, budete môcť vidieť jej stav. To je na rozdiel od Plánovaných úloh, ktoré sú pretrvávajúce, Plánovaná úloha je v podstate skript bloku, ktorý beží podľa plánu. V minulosti by sa rovnaký vplyv mohol dosiahnuť pomocou Plánovača úloh systému Windows, čo je skutočne to, čo sa deje pod kapotou. Ak chcete vytvoriť novú naplánovanú úlohu, postupujte nasledovne:

Register-ScheduledJob -Name GetEventLogs -ScriptBlock {Get-EventLog -LogName Security -Newest 100} -Trigger (New-JobTrigger -Daily -At 5pm) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)

V tomto príkaze sa deje veľa vecí, a tak to rozdelíme.

  • Najprv uvádzame názov GetEventLogs na našu plánovanú prácu.
  • Potom ho povieme, že pri spúšťaní chceme spustiť obsah zadaného bloku skriptov, ktorý v podstate získa najnovších 100 záznamov denníka udalostí zabezpečenia.
  • Ďalej zadáme spúšťač. Keďže parametr spúšťania zaberá ako vstup spúšťací objekt, použili sme zátvorový príkaz na generovanie spúšťača, ktorý bude vypínať každý deň o 5:00.
  • Keďže ide o protokol udalostí, musíme bežať ako správca, ktorý môžeme špecifikovať vytvorením nového objektu ScheduledJobOption a jeho odovzdaním do parametra ScheduledJobOption.
Keďže ide o trochu iný typ úlohy, budete musieť použiť iný príkaz na získanie zoznamu všetkých plánovaných úloh na stroji.
Keďže ide o trochu iný typ úlohy, budete musieť použiť iný príkaz na získanie zoznamu všetkých plánovaných úloh na stroji.

Get-ScheduledJob

Odporúča: