Share via


Moduláris runbookok létrehozása az Automationben

Az Azure Automationben ajánlott újrahasználható, moduláris runbookokat írni egy különálló funkcióval, amelyet más runbookok hívnak meg. A szülő runbookok gyakran meghívnak egy vagy több gyermek runbookot a szükséges funkciók elvégzéséhez.

A gyermek runbookok meghívásának két módja van: beágyazott vagy parancsmagon keresztül. Az alábbi táblázat összefoglalja azokat a különbségeket, amelyek segítenek eldönteni, hogy melyik út a jobb a forgatókönyvekhez.

Beágyazott Parancsmag
Feladat A gyermek runbookok ugyanabban a feladatban futnak, mint a szülő. A gyermek runbookhoz külön feladat jön létre.
Végrehajtás A szülő runbook a folytatás előtt megvárja, amíg a gyermek runbook befejeződik. A szülő runbook közvetlenül a gyermek runbook elindítása után folytatódik, vagy a szülő runbook megvárja a gyermekfeladat befejezését.
Hozam A szülő runbook közvetlenül lekérheti a kimenetet a gyermek runbookból. A szülő runbooknak le kell kérnie a kimenetet a gyermek runbook-feladatból, vagy a szülő runbook közvetlenül lekérheti a kimenetet a gyermek runbookból.
Paraméterek A gyermek runbook paramétereinek értékei külön vannak megadva, és bármilyen adattípust használhatnak. A gyermek runbook paramétereinek értékeit egyetlen kivonatolóba kell kombinálni. Ez a kivonatoló csak egyszerű, tömb- és objektumadattípusokat tartalmazhat, amelyek JSON-szerializálást használnak.
Automation-fiók A szülő runbook csak egy gyermek runbookot használhat ugyanabban az Automation-fiókban. A szülő runbookok bármilyen Automation-fiókból, ugyanabból az Azure-előfizetésből, vagy akár egy másik előfizetésből is használhatnak gyermek runbookot, amelyhez ön rendelkezik kapcsolattal.
Közzétételi A gyermek runbookot közzé kell tenni a szülő runbook közzététele előtt. A gyermek runbookok a szülő runbook elindítása előtt bármikor közzé lesznek téve.

Gyermek runbook meghívása beágyazott végrehajtással

Ha egy runbookot egy másik runbookból szeretne beágyazottként meghívni, használja a runbook nevét, és adja meg a paraméterek értékeit, ugyanúgy, mint egy tevékenységet vagy parancsmagot. Az ugyanabban az Automation-fiókban lévő összes runbook minden más számára elérhető, így használható. A szülő runbook megvárja, amíg a gyermek runbook befejeződik, mielőtt továbblépne a következő sorra, és a kimenet közvetlenül a szülőnek ad vissza.

Amikor beágyazott runbookot hív meg, az ugyanabban a feladatban fut, mint a szülő runbook. A gyermek runbook feladatelőzményeiben nincs jelzés. A gyermek runbook kivételei és streamkimenetei a szülőhöz vannak társítva. Ez a viselkedés kevesebb feladatot eredményez, és megkönnyíti a nyomon követési és hibaelhárítási feladatokat.

Egy runbook közzétételekor a hívott gyermek runbookokat már közzé kell tenni. Ennek az az oka, hogy az Azure Automation társításokat hoz létre a gyermek runbookokkal, amikor egy runbookot állít össze. Ha a gyermek runbookok még nem lettek közzétéve, a szülő runbook úgy tűnik, hogy megfelelően közzéteszi, de kivételt hoz létre az indításkor.

Ha kivételt kap, újra közzéteheti a szülő runbookot, hogy megfelelően hivatkozzon a gyermek runbookokra. Nem kell újból közzétennie a szülő runbookot, ha bármely gyermek runbook módosult, mert a társítás már létrejött.

A beágyazott gyermek runbook paraméterei bármilyen típusúak lehetnek, beleértve az összetett objektumokat is. Nincs JSON-szerializálás, mint amikor elindítja a runbookot az Azure Portal vagy a Start-AzAutomationRunbook parancsmag használatával.

Runbook-típusok

Jelenleg a PowerShell 5.1 támogatott, és csak bizonyos runbooktípusok hívhatják egymást:

  • A PowerShell-runbookok és a grafikus runbookok beágyazottan hívhatják egymást, mivel mindkettő PowerShell-alapú.
  • A PowerShell-munkafolyamat-forgatókönyvek és a grafikus PowerShell-munkafolyamat-forgatókönyvek inline meghívhatják egymást, mivel mindkettő PowerShell-munkafolyamaton alapul.
  • A PowerShell-típusok és a PowerShell-munkafolyamat-típusok nem tudják egymást beágyazottan meghívni. Használniuk kell Start-AzAutomationRunbookőket.

Fontos

A gyermekszkripteket .\child-runbook.ps1 nem támogatja a PowerShell 7.1 és a PowerShell 7.2 kerülő megoldása: Használja Start-AutomationRunbook a (belső parancsmagot) vagy Start-AzAutomationRunbook (az Az.Automation modulból) egy másik runbook elindításához a szülő runbookból.

A runbookok közzétételi sorrendje csak a PowerShell-munkafolyamatok és a grafikus PowerShell-munkafolyamat-forgatókönyvek esetében számít.

Amikor a runbook grafikus vagy PowerShell-munkafolyamat gyermek runbookot hív meg beágyazott végrehajtással, a runbook nevét használja. A névnek azzal .\\ kell kezdődnie, hogy a szkript a helyi könyvtárban legyen.

Példa

Az alábbi példa elindít egy teszt gyermek runbookot, amely egy összetett objektumot, egy egész számot és egy logikai értéket fogad el. A gyermek runbook kimenete egy változóhoz van rendelve. Ebben az esetben a gyermek runbook egy PowerShell-munkafolyamat-runbook.

$vm = Get-AzVM -ResourceGroupName "LabRG" -Name "MyVM"
$output = PSWF-ChildRunbook -VM $vm -RepeatCount 2 -Restart $true

Ugyanez a példa, de egy PowerShell-runbookot használ, mint a gyermek.

$vm = Get-AzVM -ResourceGroupName "LabRG" -Name "MyVM"
$output = .\PS-ChildRunbook.ps1 -VM $vm -RepeatCount 2 -Restart $true

Gyermek runbook indítása parancsmaggal

Fontos

Ha a runbook a paraméterrel rendelkező Wait parancsmaggal Start-AzAutomationRunbook meghív egy gyermek runbookot, és a gyermek runbook objektumeredményt hoz létre, a művelet hibát tapasztalhat. A hiba megkerüléséhez tekintse meg az objektumkimenettel rendelkező gyermek runbookokat. Ez a cikk bemutatja, hogyan valósíthatja meg az eredmények lekérdezésére szolgáló logikát a Get-AzAutomationJobOutputRecord parancsmaggal.

A runbookok indítására a Windows PowerShell-lel való runbook indítása című cikkben leírtak szerint van lehetőségStart-AzAutomationRunbook. A parancsmag kétféleképpen használható:

  • A parancsmag visszaadja a feladat azonosítóját, amikor a gyermek runbookhoz létrejön a feladat.
  • A parancsmag megvárja, amíg a gyermekfeladat befejeződik, és visszaadja a gyermek runbook kimenetét. A szkript a paraméter megadásával engedélyezi ezt a Wait módot.

A gyermek runbookból származó feladat egy parancsmaggal indult, amely a szülő runbook-feladattól külön fut. Ez a viselkedés több feladatot eredményez, mint a runbook beágyazott indítása, és megnehezíti a feladatok nyomon követését. A szülő aszinkron módon több gyermek runbookot is elindíthat anélkül, hogy mindegyik befejeződik. A gyermek runbookok beágyazott meghívásához a szülő runbooknak a párhuzamos kulcsszót kell használnia.

A gyermek runbook kimenete az időzítés miatt nem tér vissza megbízhatóan a szülő runbookhoz. Emellett előfordulhat, $VerbosePreferencehogy a , $WarningPreferenceés más változók nem propagálhatók a gyermek runbookokra. A problémák elkerülése érdekében a paraméterrel külön Automation-feladatként Start-AzAutomationRunbook indíthatja el a Wait gyermek runbookokat. Ez a technika letiltja a szülő runbookot, amíg a gyermek runbook be nem fejeződik.

Ha nem szeretné, hogy a szülő runbook várakoztatás közben le legyen tiltva, a paraméter nélkül is elindíthatja a Wait gyermek runbookotStart-AzAutomationRunbook. Ebben az esetben a runbooknak a Get-AzAutomationJob használatával kell várnia a feladat befejezését. Az eredmények lekéréséhez a Get-AzAutomationJobOutput és a Get-AzAutomationJobOutputRecord parancsot is használnia kell.

A parancsmaggal indított gyermek runbook paraméterei kivonatolóként vannak megadva, a Runbook paramétereiben leírtak szerint. Csak egyszerű adattípusokat használhat. Ha a runbook egy összetett adattípusú paraméterrel rendelkezik, akkor beágyazottnak kell hívni.

Az előfizetési környezet elveszhet, amikor külön feladatként kezdi el a gyermek runbookokat. Ahhoz, hogy a gyermek runbook végrehajtsa az Az modul parancsmagjait egy adott Azure-előfizetésen, a gyermeknek a szülő runbooktól függetlenül hitelesítenie kell ezt az előfizetést.

Ha az ugyanazon Automation-fiókban lévő feladatok több előfizetéssel is működnek, az egyik feladatban lévő előfizetés kiválasztása megváltoztathatja a többi feladat aktuális előfizetési környezetét. A helyzet elkerülése érdekében használja Disable-AzContextAutosave -Scope Process az egyes runbookok elején. Ez a művelet csak a runbook végrehajtásához menti a környezetet.

Példa

Az alábbi példa elindít egy gyermek runbookot paraméterekkel, majd megvárja, amíg a Start-AzAutomationRunbook parancsmagot használja a Wait paraméterrel. A gyermek runbook befejezése után a példa a gyermek runbook parancsmag-kimenetét gyűjti össze. A használatához Start-AzAutomationRunbooka szkriptnek hitelesítenie kell az Azure-előfizetését.

# Ensure that the runbook does not inherit an AzContext
Disable-AzContextAutosave -Scope Process

# Connect to Azure with system-assigned managed identity
$AzureContext = (Connect-AzAccount -Identity).context

# set and store context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext

$params = @{"VMName"="MyVM";"RepeatCount"=2;"Restart"=$true}

Start-AzAutomationRunbook `
    -AutomationAccountName 'MyAutomationAccount' `
    -Name 'Test-ChildRunbook' `
    -ResourceGroupName 'LabRG' `
    -DefaultProfile $AzureContext `
    -Parameters $params -Wait

Ha azt szeretné, hogy a runbook a rendszer által hozzárendelt felügyelt identitással fusson, hagyja meg a kódot. Ha inkább felhasználó által hozzárendelt felügyelt identitást szeretne használni, akkor:

  1. Az 5. sorból távolítsa el $AzureContext = (Connect-AzAccount -Identity).contexta
  2. Cserélje le a $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
  3. Adja meg az ügyfél azonosítóját.

További lépések