Runbook fogalmak

 

Közzétett: 2016. június

Érvényes: Windows Azure Pack for Windows Server, System Center 2012 R2 Orchestrator

Az automatizálási Runbookok Windows PowerShell-munkafolyamatként vannak megvalósítva. Ez a szakasz röviden áttekinti a munkafolyamatok legfontosabb jellemzőit, amelyek az Automatizálás Runbookjainak közös vonásai. A munkafolyamatok részletes ismertetése a Kezdeti lépések a Windows PowerShell munkafolyamataival című cikkben olvasható.

A Runbook felépítése megegyezik a Szolgáltatáskezelési automatizálás és a Microsoft Azure Automation esetén, bár a kettő általában különböző erőforrásokkal működik.

Egy munkafolyamat olyan programozott, egymáshoz kapcsolódó lépések sorozata, amelyek hosszan futó feladatokat végeznek el, vagy amelyekhez több lépés összehangolása szükséges több eszközön vagy felügyelt csomóponton. A munkafolyamatok előnye az egyszerű parancsprogramokhoz képest részben az, hogy képesek egyidejűleg elvégezni egy műveletet több eszközön, továbbá az, hogy képesek automatikusan helyreállni hibák után. Egy Windows PowerShell-munkafolyamat egy olyan Windows PowerShell-parancsprogram, amely kihasználja a Windows Workflow Foundation nyújtotta képességeket. Bár a munkafolyamatot a Windows PowerShell szintaxisával kell megírni, és a Windows PowerShell használatával kell elindítani, a munkafolyamat feldolgozását a Windows Workflow Foundation végzi.

Egy Windows PowerShell-munkafolyamat a Workflow kulcsszóval kezdődik, amelyet a parancsprogram kapcsos zárójelek között elhelyezett törzse követ. A munkafolyamat neve a Workflow kulcsszó után van megadva, amint az az alábbi szintaxispéldában látható. A munkafolyamat neve megegyezik az Automatizálás Runbookjának nevével.

Workflow Test-Runbook
{
   <Commands>
}

Ha paramétereket szeretne felvenni a munkafolyamathoz, használja a Param kulcsszót az alábbi szintaxispéldában látható módon. A felügyeleti portál felszólítja majd a felhasználót e paraméterek értékének megadására, amikor elindítja a Runbookot. Ez a példa a választható Parameter attribútumot használja, amely megadja, hogy a paraméter megadása kötelező vagy sem.

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

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

A munkafolyamat nevének a Windows PowerShell használatakor szabványosnak tekinthető ige-főnév formátumot kell követnie. A használható jóváhagyott igék felsorolása a Jóváhagyott igék a Windows PowerShell parancsaihoz című cikkben található. A munkafolyamat nevének meg kell egyeznie az Automatizálás Runbookjának nevével. Ha importálja a Runbookot, a fájl nevének meg kell egyeznie a munkafolyamat nevével, és .ps1 kiterjesztéssel kell rendelkeznie.

A korlátozásokat, valamint a Windows PowerShell-munkafolyamatok és a Windows PowerShell közötti szintaktikai eltérések teljes listáját a parancsprogramos munkafolyamatok és a parancsprogramok közötti szintaktikai eltéréseket ismertető cikkben találja.

Egy tevékenység egy adott feladat egy munkafolyamatot belül. Ahogy egy parancsprogram egy vagy több parancsból áll, egy munkafolyamat is egy vagy több tevékenységből épül fel, amelyek egymást követően lesznek végrehajtva. A Windows PowerShell Workflow futtatórendszer automatikusan tevékenységgé alakít számos Windows PowerShell-parancsmagot egy munkafolyamat futtatásakor. Amikor megadja e parancsmagok egyikét a Runbookban, a Windows Workflow Foundation valójában a megfelelő tevékenységet futtatja. Azon parancsmagok esetében, amelyekhez nem tartozik megfelelő tevékenység, a Windows PowerShell Workflow futtatórendszer automatikusan egy InlineScript tevékenységben futtatja a parancsmagot. A parancsmagok egy halmaza ki van zárva, és nem használható munkafolyamatban, csak akkor, ha explicit módon egy InlineScript blokkban tünteti fel a szóban forgó parancsmagokat. Ezekről a fogalmakról a Tevékenységek használata parancsprogram-munkafolyamatokban című cikkben olvashat bővebben.

A munkafolyamatok tevékenységeinek működése közös paraméterek egy halmazával konfigurálható. A munkafolyamatok közös paramétereiről A munkafolyamatok közös paramétereinek áttekintése című cikkben olvashat részletesen.

Egy integrációs modul egy olyan csomag, amely egy Windows PowerShell-modult tartalmaz, és importálható az Automatizálásba. A Windows PowerShell-modulok az Automatizálás Runbookjaiban használható parancsmagokat tartalmaznak. Az olyan termékek és szolgáltatások, mint az Operations Manager és az Azure olyan modulokkal rendelkeznek, amelyek az adott termék működésével kapcsolatos parancsmagokat tartalmaznak.

Az Automatizálás szolgáltatásba importált integrációs modulok automatikusan elérhetők a Runbookok számára. Az Automatizálás a Windows PowerShell 4.0 rendszeren alapul, ezért támogatja a modulok automatikus betöltését. Ez azt jelenti, hogy a telepített modulokban levő parancsmagok felhasználhatók anélkül, hogy importálná őket a parancsprogramba az Import-Module paranccsal.

Bármely Windows PowerShell-modul importálható az Automatizálásba, ha az összes függősége elhelyezhető egyetlen mappában. Ha egy modul olyan beállításjegyzékbeli beállításoktól vagy fájloktól függ, amelyek nem az alapértelmezett elérési úton helyezkednek el, akkor a modul ugyan importálható, de valószínűleg nem fog működni, mert az Automatizálás nem találja majd meg a függőségeit. A külső függőségekkel rendelkező modulok Runbookban való használatához telepíteni kell őket egy másik állomásra, majd egy a8b7e82f-e3fc-4286-8570-8d5ded944b27#bkmk_InlineScript parancsblokkon belül lehet hozzájuk férni.

A Szolgáltatáskezelési automatizálás esetén a külső függőségekkel rendelkező modulok használatához telepíteni kell őket minden Worker-kiszolgálón. Bár az ezekben a modulokban levő parancsmagok felhasználhatók Runbookokban, az Automatizálás nem tudja felderíteni őket olyan szolgáltatások támogatásához, mint például a Tevékenység beszúrása varázsló. E szolgáltatás használatához létrehozhat egy hordozható modult a New-SmaPortableModule parancsmag használatával. Ez a parancsmag létrehoz egy olyan modult, amely tartalmaz egy csonkot mindegyik parancsmagjához, és importálható az Automatizálásba. Amikor egy Runbook felhasználja e parancsmagok egyikét, a csonk átirányítja a hívást a külső modulban levő tényleges parancsmaghoz. Annak a modulnak telepítve kell lennie mindegyik Worker-kiszolgálón, különben a hívás sikertelen lesz.

A Windows PowerShell-munkafolyamatok egyik előnye, hogy az általános parancsprogramoktól eltérően párhuzamosan is végre tudnak hajtani parancsokat, nem csak egymást követően. Ez különösen hasznos a Runbookokban, hisz azok több olyan műveletet is végezhetnek, amelyek végrehajtása jelentős mennyiségű időt igényel. Egy Runbook például elvégezheti virtuális gépek halmazának kiépítését. Az egyes kiépítési folyamatok egymást követő elvégzése helyett a műveletek egyidejűleg is elvégezhetők, ami növeli a hatékonyságot. A Runbook csak akkor folytatódik, amikor az összes kiépítési folyamat befejeződött.

A Parallel kulcsszó használatával hozhat létre olyan parancsblokkot, amely egyidejűleg futó parancsokat tartalmaz. Ehhez használja az alább látható szintaxist. Jelen esetben az Activity1 és az Activity2 tevékenység ugyanabban az időpontban kezdődik majd el. Az Activity3 pedig csak azt követően indul majd el, hogy az Activity1 és az Activity2 is befejeződött.

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

A ForEach -Parallel szerkezet használatával egy gyűjtemény minden elemére feldolgozhat parancsokat egyidejűleg. A gyűjtemény elemeinek feldolgozása párhuzamosan történik, míg a parancsblokkban levő parancsok egymást követően futnak le. Ehhez használja az alább látható szintaxist. Jelen esetben az Activity1 tevékenység ugyanabban az időpontban kezdődik majd el a gyűjtemény mindegyik elemére. Az Activity2 pedig csak az Activity1 befejeződése után indul el mindegyik elemre. Az Activity3 pedig csak azt követően indul majd el, hogy az Activity1 és az Activity2 is befejeződött az összes elemre.

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

A Sequence kulcsszó használható arra, hogy egymást követően futtasson parancsokat egy Parallel parancsblokkon belül. A Sequence parancsblokk más parancsokkal párhuzamosan fut, de a blokkon belül levő parancsok egymást követően futnak. Ehhez használja az alább látható szintaxist. Jelen esetben az Activity1, az Activity2 és az Activity3 tevékenység mind egyidejűleg kezdődik. Az Activity4 csak az Activity3 befejeződése után indul el. Az Activity5 pedig csak az összes többi tevékenység befejeződése után indul el.

Parallel
{
  <Activity1>
  <Activity2>

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

Egy ellenőrzőpont egy pillanatfelvétel a munkafolyamat aktuális állapotáról, amely tartalmazza a változók aktuális értékét, valamint az adott időpontig esetleg előállított kimeneti adatokat. Egy Runbook utolsó befejezett ellenőrzőpontját menti a rendszer az Automatizálás adatbázisába, hogy a munkafolyamat folytatódhasson kimaradás esetén is. A Runbook futtatása után az ellenőrzőpont adatai törlődnek.

A Checkpoint-Workflow tevékenységgel állíthat be ellenőrzőpontot egy munkafolyamatban. Amikor felveszi ezt a tevékenységet egy Runbookba, a rendszer azonnal készít egy ellenőrzőpontot. Ha a Runbook futása hiba miatt fel lesz függesztve, a feladat folytatásakor a legutolsó beállított ellenőrzőpont helyétől fog folytatódni.

Az alábbi kódmintában hiba történik az Activity2 tevékenység után, ami a Runbook felfüggesztéséhez vezet. A feladat folytatásakor a Runbook az Activity2 futtatásával kezdődik, hisz itt volt beállítva az utolsó ellenőrzőpont.

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

Olyan tevékenységek után célszerű ellenőrzőpontokat beállítani egy Runbookban, amelyek nagyobb eséllyel okozhatnak hibát, és amelyeket nem kíván megismételni a Runbook folytatásakor. A Runbook például létrehozhat egy virtuális gépet. Célszerű beállítani egy ellenőrzőpontot a virtuális gép létrehozására szolgáló parancsok előtt és után is. Ha a létrehozás sikertelen, a Runbook folytatásakor a parancsok meg lesznek ismételve. Ha a létrehozás sikeresen befejeződik, de később hiba történik a Runbook futásában, akkor a Runbook folytatásakor a virtuális gép nem lesz újból létrehozva.

Az ellenőrzőpontokról az Ellenőrzőpontok felvétele parancsprogramos munkafolyamatba című cikkben olvashat bővebben.

A Suspend-Workflow tevékenységgel kényszerítheti, hogy egy Runbook felfüggessze a futását. Ez a tevékenység beállít egy ellenőrzőpontot, és azonnal felfüggeszti a munkafolyamatot. A munkafolyamat felfüggesztése olyan Runbookok esetén lehet hasznos, amelyek például valamilyen manuális lépés elvégzését igénylik, mielőtt futhatnának a további tevékenységek.

A munkafolyamatok felfüggesztéséről a Munkafolyamat kényszerítése futásának felfüggesztésére című cikkben olvashat bővebben.

Az InlineScript tevékenység egy külön, nem munkafolyamatszerű munkamenetben futtat egy parancsblokkot, és visszaadja annak kimeneti adatait a munkafolyamatnak. Míg a munkafolyamaton belüli parancsokat a szolgáltatás a Windows Workflow Foundation rendszernek küldi el feldolgozásra, az InlineScript blokkon belüli parancsok feldolgozását a Windows PowerShell végzi. A tevékenység a szabványos munkafolyamatok közös paramétereit, egyebek között a PSComputerName és a PSCredential paramétert használja, ez lehetővé teszi annak megadását, hogy a kódblokkot egy másik számítógépen vagy más hitelesítő adatokkal kell futtatni.

Az InlineScript tevékenység az alább bemutatott szintaxist használja.

InlineScript
{
  <Script Block>
} <Common Parameters>

Az InlineScript tevékenység leggyakoribb felhasználási célja egy Runbookban egy kódblokk másik számítógépen való futtatása. Erre akkor van szükség, ha a Runbookban használt parancsmagok nincsenek telepítve az Automatizálás szolgáltatásban, vagy ha a művelet végrehajtása csak helyileg engedélyezett a célszámítógépen. Ezt szemlélteti az alábbi ábra.

InlineScript

A kódblokk másik számítógépen való futtatásához a PSComputer és a PSCredential paramétert kell használni az InlineScript tevékenységgel. Általában egy globális erőforrás, például egy a8b7e82f-e3fc-4286-8570-8d5ded944b27#bkmk_Credentials vagy egy a8b7e82f-e3fc-4286-8570-8d5ded944b27#bkmk_Connections használatával adják meg e paraméterek értékét a Runbookban. Az alábbi kódpélda lefuttat egy parancssorozatot a MyConnection nevű kapcsolat által képviselt számítógépen.

$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

Bár az InlineScript tevékenységek létfontosságúak lehetnek bizonyos Runbookok működéséhez, az alábbi okok miatt csak akkor célszerű használni őket, ha az mindenképpen szükséges:

  • Egy InlineScript blokkon belül nem használhatók ellenőrzőpontok. Ha hiba történik a blokkon belül, a Runbook folytatásakor a blokkot az elejétől meg kell ismételni.

  • Az InlineScript tevékenység befolyásolja a Runbook méretezhetőségét, mert az InlineScript blokk teljes hosszán át magánál tartja a Windows PowerShell-munkamenetet.

  • Egyes tevékenységek, például a Get-AutomationVariable és a Get-AutomationPSCredential nem használhatók InlineScript blokkon belül.

Ha mindenképpen InlineScript tevékenységet kell használnia, csökkentse minimálisra annak hatókörét. Ha például a Runbook egy gyűjtemény elemein végiglépkedve mindegyik elemre alkalmazza ugyanazt a műveletet, a huroknak célszerű az InlineScript tevékenységen kívül lennie. Ez a következő előnyökkel jár:

  • Mindegyik iteráció után elhelyezhető egy ellenőrzőpont a munkafolyamatban. Ha a feladatot felfüggesztik vagy megszakad, és utána folytatódik, a hurok folytatni tudja a működését.

  • A ForEach –Parallel szerkezettel egyidejűleg kezelheti a gyűjtemény elemeit.

Ha a Runbookban InlineScript blokkot használ, vegye figyelembe az alábbi javaslatokat:

  • A $Using hatókör-módosítóval azonban átadhatók értékek a parancsprogramba. Például az InlineScript blokkon kívül megadott $abc nevű változóra a $using:abc névvel lehet hivatkozni az InlineScript blokkon belül.

  • Ha értéket szeretne visszaadni InlineScript blokkból, rendelje a kimeneti értéket egy változóhoz, és adja vissza a kimeneti adatfolyamnak átadni kívánt adatokat. Az alábbi példa a „hi” szót egy $output nevű változóhoz rendeli.

    $output = InlineScript { Write-Output "hi" }
    
  • Ne definiáljon munkafolyamatokat InlineScript hatókörében. Bár egyes munkafolyamatok látszólag jól működnek így, az ilyen használat nincs tesztelve. Ez nem egyértelmű hibaüzeneteket vagy váratlan viselkedést okozhat.

További tudnivalók az InlineScript használatáról: Windows PowerShell-parancsok futtatása munkafolyamatban és about_InlineScript.

Megjelenítés: