Sdílet prostřednictvím


Koncepty pracovních postupů Windows PowerShellu

Jeden typ runbooku pro službu Service Management Automation je založený na pracovních postupech Windows PowerShellu. Tento článek obsahuje stručný přehled důležitých funkcí pracovních postupů, které jsou společné pro runbooky Automation. Úplné podrobnosti o pracovních postupech jsou k dispozici v článku Začínáme s pracovním postupem Windows PowerShellu.

Struktura runbooků je stejná mezi runbooky pro Service Management Automation a pro Microsoft Azure Automation , i když tyto dva nástroje obvykle pracují s různými prostředky.

Pracovní postupy Windows PowerShellu

Pracovní postup je pořadí naprogramovaných, propojených kroků, které provádějí dlouhodobé úlohy nebo vyžadují koordinaci více kroků v rámci více zařízení nebo spravovaných uzlů. Výhody pracovního postupu nad normálním skriptem zahrnují možnost souběžného provedení akce na více zařízeních a schopnost automaticky se zotavit z selhání. Pracovní postup Windows PowerShellu je skript Windows PowerShellu, který používá Windows Workflow Foundation. Pracovní postup je napsaný pomocí syntaxe Windows PowerShellu a spuštěný prostředím Windows PowerShell, ale zpracovává ho Windows Workflow Foundation.

Základní struktura

Pracovní postup Windows PowerShellu začíná klíčovým slovem Pracovního postupu následovaným textem skriptu uzavřeným ve složených závorkách. Název pracovního postupu se řídí klíčovým slovem Pracovní postup , jak je znázorněno v následující syntaxi. Název pracovního postupu odpovídá názvu runbooku Automation.

Workflow Test-Runbook
{
   <Commands>
}

Pokud chcete do pracovního postupu přidat parametry, použijte klíčové slovo Param , jak je znázorněno v následující syntaxi. Portál pro správu vyzve uživatele, aby při spuštění runbooku zadal hodnoty těchto parametrů. Tato ukázka používá volitelný atribut Parametr, který určuje, zda je parametr povinný.

Workflow Test-Runbook
{
  Param
  (
   [Parameter(Mandatory=<$True | $False>]
   [Type]$<ParameterName>,

   [Parameter(Mandatory=<$True | $False>]
   [Type]$<ParameterName>
  )
  <Commands>
}

Pojmenování

Název pracovního postupu by měl odpovídat formátu Slovesa-podstatného jména, který je standardní ve Windows PowerShellu. Seznam schválených příkazů, které se mají použít, najdete v části Schválené příkazy pro Windows PowerShell . Název pracovního postupu se musí shodovat s názvem runbooku Automation. Pokud se runbook importuje, musí název souboru odpovídat názvu pracovního postupu a musí končit příponou .ps1.

Omezení

Úplný seznam omezení a rozdílů syntaxe mezi pracovními postupy Windows PowerShellu a Windows PowerShellem najdete v tématu Syntaktické rozdíly mezi pracovními postupy skriptů a skripty.

Aktivity

Aktivita je konkrétní úkol v pracovním postupu. Stejně jako se skript skládá z jednoho nebo víc příkazů, pracovní postup se skládá z jedné nebo víc aktivit, které se provádějí v uvedeném pořadí. Pracovní postup Windows PowerShellu automaticky převádí mnoho rutin prostředí Windows PowerShell na aktivity při spuštění pracovního postupu. Když zadáte jednu z těchto rutin v runbooku, odpovídající aktivita je ve skutečnosti spuštěna službou Windows Workflow Foundation. U rutin bez odpovídající aktivity pracovní postup Windows PowerShellu automaticky spouští rutinu v rámci vložené aktivity. Existuje sada rutin, které jsou vyloučené a nelze je použít v pracovním postupu, pokud je explicitně nezahrnete do bloku InlineScriptu . Další informace o těchto konceptech najdete v tématu Použití aktivit v pracovních postupech skriptů.

Aktivity pracovního postupu sdílejí sadu společných parametrů pro konfiguraci jejich operace. Podrobnosti o běžných parametrech pracovního postupu najdete v tématu about_WorkflowCommonParameters.

Integrační moduly

Modul integrace je balíček, který obsahuje modul Windows PowerShellu a lze ho importovat do služby Automation. Moduly Windows PowerShellu obsahují rutiny, které je možné použít v runboocích služby Automation. Produkty a služby, jako je Operations Manager a Azure, mají moduly, které zahrnují rutiny specifické pro jejich provoz.

Moduly integrace importované do služby Automation jsou automaticky dostupné pro všechny runbooky. Vzhledem k tomu, že automatizace je založená na prostředí Windows PowerShell 4.0, podporuje automatické načítání modulů, což znamená, že rutiny z nainstalovaných modulů je možné použít bez jejich importu do skriptu pomocí modulu Import-Module.

Jakýkoli modul Windows PowerShellu je možné importovat do služby Automation, pokud se všechny jeho závislosti dají nacházet v jedné složce. Pokud modul závisí na nastavení registru nebo souborech, které nejsou ve výchozí cestě, můžete ho importovat, ale pravděpodobně nebude fungovat, protože Automation nebude moct najít jeho závislosti. Moduly s externími závislostmi je možné v runbooku použít tak, že je nainstalujete na jiného hostitele a pak k nim přistupujete pomocí bloku skriptu InlineScript .

Pomocí služby Service Management Automation můžete použít moduly s externími závislostmi tak, že je nainstalujete na každý pracovní server. Rutiny v těchto modulech se sice dají použít v runboocích, ale služba Automation je nezjistí, aby podporovala takové funkce, jako je průvodce vložením aktivity. Pokud chcete tuto funkci použít, můžete vytvořit přenosný modul pomocí rutiny New-SmaPortableModule . Tato rutina vytvoří modul, který obsahuje zástupný kód pro každou z jejích rutin a dá se importovat do služby Automation. Pokud runbook používá některou z těchto rutin, zástupný procedura přesměruje volání na skutečnou rutinu v externím modulu. Tento modul musí být nainstalovaný na každém serveru pracovního procesu nebo volání selže.

Paralelní spuštění

Jednou z výhod pracovních postupů Windows PowerShellu je možnost provádět sadu příkazů paralelně, nikoli postupně jako u typického skriptu. To je zvlášť užitečné v runboocích, protože můžou provádět několik akcí, které provádějí značné množství času k dokončení. Runbook může například zřídit sadu virtuálních počítačů. Místo toho, aby se jednotlivé procesy zřizování prováděly postupně, mohly by se akce provádět současně, což zvyšuje celkovou efektivitu. Runbook bude pokračovat až po dokončení.

Pomocí klíčového slova Parallel můžete vytvořit blok skriptu s více příkazy, které se budou spouštět souběžně. Používá se syntaxe zobrazená níže. V tomto případě se aktivita 1 a aktivita2 spustí současně. Aktivita 3 se spustí až po dokončení aktivity Activity1 i Activity2.

Parallel
{
  <Activity1>
  <Activity2>
}
<Activity3>

Konstruktor ForEach -Parallel můžete použít ke zpracování příkazů pro každou položku v kolekci současně. Položky v kolekci se zpracovávají paralelně, zatímco příkazy v bloku skriptu se spouštějí postupně. Používá se syntaxe zobrazená níže. V tomto případě se aktivita Activity1 spustí současně pro všechny položky v kolekci. U každé položky se aktivita Activity2 spustí po dokončení aktivity Activity1. Aktivita 3 se spustí až po dokončení aktivity Activity1 i Activity2 pro všechny položky.

ForEach -Parallel ($<item> in $<collection>)
{
  <Activity1>
  <Activity2>
}
<Activity3>

Klíčové slovo Sequence slouží ke spouštění příkazů v posloupnosti v rámci bloku paralelního skriptu. Blok sekvenčního skriptu běží paralelně s jinými příkazy, ale příkazy v rámci bloku se spouštějí postupně. Používá se syntaxe zobrazená níže. V tomto případě se aktivita Activity1, Activity2 a Activity3 spustí současně. Aktivita 4 se spustí až po dokončení aktivity Activity3. Aktivita 5 se spustí po dokončení všech ostatních aktivit.

Parallel
{
  <Activity1>
  <Activity2>

  Sequence
  {
   <Activity3>
   <Activity4>
  }
}
<Activity5>

Kontrolní body

Kontrolní bod je snímek aktuálního stavu pracovního postupu, který obsahuje aktuální hodnotu proměnných a veškerý výstup vygenerovaný do tohoto bodu. Poslední kontrolní bod, který se má dokončit v runbooku, se uloží do databáze Automation, aby pracovní postup mohl pokračovat i v případě výpadku. Data kontrolního bodu se po dokončení úlohy runbooku odeberou.

Kontrolní bod v pracovním postupu můžete nastavit pomocí aktivity Checkpoint-Workflow . Pokud tuto aktivitu zahrnete do runbooku, kontrolní bod se okamžitě převezme. Pokud je sada Runbook pozastavena chybou, po obnovení úlohy se obnoví z bodu poslední sady kontrolních bodů.

V následujícím ukázkovém kódu dojde k chybě po aktivitě Activity2, což způsobí pozastavení runbooku. Když se úloha obnoví, spustí se aktivita Activity2, protože právě po poslední sadě kontrolních bodů.

<Activity1>
Checkpoint-Workflow
<Activity2>
<Error>
<Activity3>

Po aktivitách, které můžou být náchylné k chybě, byste měli nastavit kontrolní body v runbooku a neměli by se opakovat, pokud se runbook obnoví. Runbook může například vytvořit virtuální počítač. Kontrolní bod můžete nastavit před i po příkazech pro vytvoření virtuálního počítače. Pokud se vytvoření nezdaří, příkazy se po obnovení runbooku opakují. Pokud vytvoření proběhne úspěšně, ale runbook později selže, virtuální počítač se po obnovení runbooku znovu nevytvoří.

Další informace o kontrolních bodech naleznete v tématu Přidání kontrolních bodů do pracovního postupu skriptu.

Pozastavení runbooku

Runbook můžete vynutit, aby se pozastavil s aktivitou Suspend-Workflow . Tato aktivita nastaví kontrolní bod a pracovní postup se okamžitě pozastaví. Pozastavení pracovního postupu je užitečné pro runbooky, které mohou vyžadovat provedení ručního kroku před spuštěním jiné sady aktivit.

Další informace o pozastavení pracovního postupu naleznete v tématu Pozastavení pracovního postupu.

Vloženýscript

Aktivita InlineScript spustí blok příkazů v samostatné relaci bez pracovního postupu a vrátí jeho výstup do pracovního postupu. Zatímco příkazy v pracovním postupu se odesílají do windows Workflow Foundation ke zpracování, příkazy v bloku InlineScript se zpracovávají prostředím Windows PowerShell. Aktivita používá standardní běžné parametry pracovního postupu, včetně PSComputerName a PSCredential, které umožňují určit, že se blok kódu spouští na jiném počítači nebo pomocí alternativních přihlašovacích údajů.

Vloženýscript používá syntaxi uvedenou níže.

InlineScript
{
  <Script Block>
} <Common Parameters>

Nejběžnějším použitím inlineScriptu v runbooku je spuštění bloku kódu na jiném počítači. To se vyžaduje, když se rutiny v runbooku nenainstalují ve službě Automation nebo pokud má akce oprávnění provádět pouze místně na cílovém počítači. To je znázorněno v následujícím diagramu.

Vložený diagram skriptu

Aby bylo možné spustit blok kódu na jiném počítači, používají se parametry PSComputer a PSCredential s aktivitou InlineScript . Globální prostředek, jako je přihlašovací údaje nebo připojení , se obvykle používá v runbooku k zadání hodnot pro tyto parametry. Následující ukázkový kód spustí sadu příkazů v počítači reprezentované připojením s názvem MyConnection.

$con = Get-AutomationConnection -Name 'MyConnection'
$securepassword = ConvertTo-SecureString -AsPlainText -String $con.Password -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $con.Username, $securepassword
InlineScript
{
  <Commands>
} -PSComputer $con.ComputerName -PSCredential $cred

I když v některých runboocích můžou být aktivity inlineScriptu kritické, měly by se používat pouze v případě potřeby z následujících důvodů:

  • Kontrolní body nelze použít v rámci bloku InlineScript . Pokud dojde k selhání v rámci bloku, musí být obnoven od začátku.

  • InlineScript ovlivňuje škálovatelnost runbooku, protože obsahuje relaci Prostředí Windows PowerShell pro celou délku bloku InlineScriptu.

  • Aktivity, jako je Get-AutomationVariable a Get-AutomationPSCredential , nejsou v bloku InlineScript k dispozici.

Pokud potřebujete použít InlineScript, měli byste minimalizovat jeho rozsah. Pokud například runbook iteruje kolekci při použití stejné operace pro každou položku, měla by smyčka proběhnout mimo VloženýScript. To vám poskytne následující výhody:

  • Pracovní postup můžete kontrolovat po každé iteraci. Pokud je úloha pozastavená nebo přerušena a obnovena, smyčka bude moci pokračovat.

  • Funkci ForEach Můžete použít paralelně ke zpracování položek kolekce současně.

Pokud v runbooku používáte vloženýScript, mějte na paměti následující doporučení:

  • Hodnoty můžete do skriptu předat pomocí modifikátoru oboru $Using . Například proměnná s názvem $abc, která byla nastavena mimo InlineScript, se stane $using:abc uvnitř inlineScriptu.

  • Pokud chcete vrátit výstup z InlineScriptu, přiřaďte výstup proměnné a vypište všechna data, která se mají vrátit do výstupního datového proudu. Následující příklad přiřadí řetězec hi proměnné s názvem $output.

    $output = InlineScript { Write-Output "hi" }
    
  • Vyhněte se definování pracovních postupů v rámci oboru inlineScriptu . I když se může zdát, že některé pracovní postupy fungují správně, nejedná se o otestovaný scénář. V důsledku toho se může zobrazit matoucí chybová zpráva nebo neočekávané chování.

Další informace o použití inlineScriptu najdete v tématu Spouštění příkazů prostředí Windows PowerShell v pracovním postupu a about_InlineScript.

Další kroky