Delen via


Runbookconcepten

 

Gepubliceerd: juni 2016

Van toepassing op: Windows Azure Pack for Windows Server, System Center 2012 R2 Orchestrator

Automation-runbooks worden geïmplementeerd als Windows PowerShell-werkstromen. Deze sectie geeft een kort overzicht van de kritische functies van werkstromen die gemeenschappelijk zijn voor Automatisering runbooks. Volledige details over werkstromen zijn beschikbaar in Aan de slag met Windows PowerShell werkstroom.

De runbookstructuur is gelijk bij runbooks voor Automatisering van servicebeheer en voor Microsoft Azure Automation, hoewel de twee meestal met verschillende bronnen werken.

Windows PowerShell-werkstromen

Een werkstroom is een opeenvolging van geprogrammeerde, verbonden stappen die langlopende taken uitvoeren of de coördinatie van meerdere stappen vereisen op meerdere apparaten of beheerde knooppunten. De voordelen van een werkstroom op een normaal script omvatten de mogelijkheid om gelijktijdig een actie tegen meerdere apparaten uit te voeren en de mogelijkheid om automatisch te herstellen van fouten. Een Windows PowerShell werkstroom is een Windows PowerShell-script dat Windows Workflow Foundation benut. Terwijl de werkstroom is geschreven met Windows PowerShell-syntaxis en gelanceerd door Windows PowerShell, wordt het verwerkt door Windows Workflow Foundation.

Algemene structuur

Een Windows PowerShell werkstroom begint met het Workflow trefwoord gevolgd door de tekst van het script tussen accolades. De naam van de werkstroom volgt het Workflow trefwoord zoals getoond in de volgende syntaxis. De naam van de werkstroom komt overeen met de naam van het Automatisering runbook.

Workflow Test-Runbook
{
   <Commands>
}

Om parameters toe te voegen aan de werkstroom, gebruik het Param trefwoord zoals getoond in de volgende syntaxis. De Management Portal zal de gebruiker naar waarden voor deze parameters vragen wanneer het runbook wordt gestart. Dit voorbeeld gebruikt het optionele parameterattribuut dat aangeeft of de parameter verplicht is.

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

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

Naamgeving

De naam van de werkstroom moet voldoen aan het werkwoord-zelfstandig naamwoord formaat dat standaard is voor Windows PowerShell. U kunt verwijzen naar Goedgekeurde werkwoorden voor Windows PowerShell-opdrachten voor een lijst van goedgekeurde werkwoorden. De naam van de werkstroom moet overeenkomen met de naam van het Automatisering runbook. Als het runbook wordt ingevoerd, dan moet de bestandsnaam overeenkomen met de werkstroomnaam en moet eindigen op .ps1.

Beperkingen

Zie voor een volledige lijst van beperkingen en syntaxisverschillen tussen Windows PowerShell-werkstromen en Windows PowerShell Syntactic Differences Between Script Workflows and Scripts (Syntaxisverschillen tussen scriptwerkstromen en scripts).

Activiteiten

Een activiteit is een specifieke taak in een werkstroom. Zoals een script bestaat uit een of meer opdrachten, bestaat een werkstroom uit een of meer activiteiten die in volgorde worden uitgevoerd. Windows PowerShell-werkstroom converteert automatisch veel van de Windows PowerShell cmdlets in activiteiten wanneer het een werkstroom uitvoert. Wanneer u een van deze cmdlets in uw runbook specificeert, wordt de bijbehorende activiteit daadwerkelijk beheerd door Windows Workflow Foundation. Voor die cmdlets zonder een bijbehorende activiteit voeren Windows PowerShell-werkstromen automatisch de cmdlet uit binnen een InlineScript-activiteit. Er is een set cmdlets die zijn uitgesloten en niet kunnen worden gebruikt in een werkstroom, tenzij u ze expliciet opneemt in een InlineScript-blok. Voor verdere details over deze begrippen, zie Met behulp van activiteiten in Script-werkstromen.

Werkstroomactiviteiten delen een aantal gemeenschappelijke parameters om hun werking te configureren. Zie about_WorkflowCommonParameters voor meer informatie over de werkstroom algemene parameters.

Integratiemodules

Een Integratiemodule is een pakket dat een Windows PowerShell Module en kan worden ingevoerd in Automatisering. Windows PowerShell-modules bevatten cmdlets die kunnen worden gebruikt in Automatisering-runbooks. Producten en services, zoals Operations Manager en Azure, hebben modules die cmdlets bevatten die specifiek voor hun werking zijn.

Integratiemodules die worden geïmporteerd in Automatisering, zijn automatisch beschikbaar voor alle runbooks. Gezien Automatisering is gebaseerd op Windows PowerShell 4.0, ondersteunt het automatisch laden van modules, wat betekent dat cmdlets van geïnstalleerde modules kunnen worden gebruikt zonder ze te importeren in het script met Import-Module.

Elke Windows PowerShell-module kan worden geïmporteerd in Automatisering zolang al zijn afhankelijkheden kunnen worden gesitueerd in een enkele map. Als de module afhangt van registerinstellingen of bestanden die niet in het standaardpad zitten, dan kan ze worden geïmporteerd, maar zal ze waarschijnlijk niet werken omdat Automatisering niet in staat is om zijn afhankelijkheden te lokaliseren. Modules met externe afhankelijkheden kunnen in een runbook worden gebruikt door ze te installeren op een andere host en er vervolgens toegang toe te verkrijgen met een a8b7e82f-e3fc-4286-8570-8d5ded944b27#bkmk_InlineScript-scriptblok.

Bij Automatisering van servicebeheer kunt u modules met externe afhankelijkheden gebruiken door ze te installeren op elke Worker-server. Terwijl de cmdlets van deze modules kunnen worden gebruikt in runbooks, zullen ze niet worden ontdekt door Automatisering om dergelijke functies te ondersteunen zoals de wizard Activiteit invoegen. Om deze functie te gebruiken, kunt u een draagbare module maken met behulp van de New-SmaPortableModule cmdlet. Deze cmdlet maakt een module die een stub voor elk van haar cmdlets bevat en kan worden geïmporteerd in Automatisering. Wanneer een runbook een van deze cmdlets gebruikt, leidt de stub de oproep om naar de werkelijke cmdlet in de externe module. Die module moet op elke Worker-server worden geïnstalleerd of de oproep mislukt.

Parallelle uitvoering

Een voordeel van Windows PowerShell-werkstromen is de mogelijkheid om een ​​reeks opdrachten parallel uit te voeren in plaats van opeenvolgend zoals bij een typische script. Dit is bijzonder nuttig bij runbooks gezien ze meerdere acties kunnen uitvoeren die een aanzienlijke tijd in beslag nemen om te voltooien. Bijvoorbeeld, een runbook kan een set van virtuele machines aanbieden. In plaats van elk inrichtingsproces opeenvolgend uit te voeren, kunnen de acties gelijktijdig worden uitgevoerd met een verhoging van het algemeen rendement. Alleen wanneer alle voltooid zijn, zal het runbook worden voortgezet.

U kunt gebruik maken van het Parallel trefwoord om een ​​scriptblok te maken met meerdere opdrachten die gelijktijdig zullen worden uitgevoerd. Dit gebruikt de syntaxis hieronder weergegeven. In dit geval starten Activiteit1 en Activiteit2 tegelijkertijd. Activiteit3 start pas als zowel Activiteit1 en Activiteit2 zijn voltooid.

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

U kunt gebruik maken van de ForEach -Parallel constructie om opdrachten voor elk item te verwerken in een verzameling gelijktijdig te verwerken. De items in de verzameling worden parallel verwerkt, terwijl de opdrachten in het scriptblok sequentieel worden uitgevoerd. Dit gebruikt de syntaxis hieronder weergegeven. In dit geval zal Activiteit1 starten op hetzelfde moment voor alle items in de verzameling. Voor elk item start Activiteit2 nadat Activiteit1 voltooid is. Activiteit3 start pas als zowel Activiteit1 en Activiteit2 zijn voltooid voor alle items.

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

Het Sequence trefwoord wordt gebruikt om opdrachten uit te voeren in de juiste volgorde binnen een Parallel scriptblok. Het Sequence scriptblok wordt parallel uitgevoerd met andere opdrachten, maar de opdrachten binnen het blok worden opeenvolgend uitgevoerd. Dit gebruikt de syntaxis hieronder weergegeven. In dit geval starten Activiteit1, Activiteit2 en Activiteit3 tegelijkertijd. Activity4 start nadat Activity3 is voltooid. Activity5 start nadat alle andere activiteiten zijn voltooid

Parallel
{
  <Activity1>
  <Activity2>

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

Controlepunten

Een controlepunt is een momentopname van de huidige status van de werkstroom die de huidige waarde voor variabelen en eventuele gegenereerde uitvoer naar dat punt bevat. Het laatste controlepunt dat in een runbook moet worden voltooid, wordt opgeslagen in de Automatisering-database zodat de werkstroom zelfs in het geval van een storing kan worden hervat. De controlepuntgegevens worden verwijderd zodra de runbooktaak is voltooid.

U kunt een controlepunt instellen in een werkstroom met de Checkpoint-Workflow activiteit. Wanneer u deze activiteit opneemt in een runbook, wordt meteen een controlepunt opgenomen. Als het runbook per vergissing wordt onderbroken, wordt de taak hervat vanaf het punt van het laatst ingestelde controlepunt.

In de volgende voorbeeldcode treedt een fout op na Activiteit2 waardoor het runbook wordt onderbroken. Wanneer de taak wordt hervat, begint deze met het uitvoeren van Activiteit2 aangezien dit het laatst ingestelde controlepunt is.

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

U moet controlepunten in een runbook instellen na activiteiten die foutgevoelig zijn en niet mogen worden herhaald als het runbook wordt hervat. Bijvoorbeeld, het runbook kan een virtuele machine aanmaken. U moet een controlepunt vastleggen zowel voor als na de opdrachten voor het aanmaken van de virtuele machine. Als het aanmaken mislukt, dan worden de opdrachten herhaald wanneer het runbook wordt hervat. Als de aanmaak slaagt maar het runbook later mislukt, dan wordt de virtuele machine niet opnieuw gemaakt wanneer het runbook wordt hervat.

Voor meer informatie over controlepunten, zie Controlepunten toevoegen aan een ​​script werkstroom.

Een Runbook onderbreken

U kunt een runbook dwingen om zichzelf te onderbreken met de Suspend-Workflow activiteit. Deze activiteit zal een controlepunt instellen, waardoor de werkstroom onmiddellijk onderbreekt. Het onderbreken van een werkstroom is nuttig voor runbooks waarbij een handmatige stap moet uitgevoerd voordat een andere set activiteiten wordt uitgevoerd.

Zie Een werkstroom zichzelf doen onderbreken voor meer informatie over het onderbreken van een werkstroom.

InlineScript

De InlineScript activiteit voert een blok van opdrachten uit in een afzonderlijke, niet-werkstroom sessie en retourneert de uitvoer naar de werkstroom. Waar opdrachten in een werkstroom naar Windows Workflow Foundation worden verzonden voor verwerking, worden opdrachten in een InlineScript blok verwerkt door Windows PowerShell. De activiteit maakt gebruik van de standaard werkstroom algemene parameters waaronder PSComputerName en PSCredential waarmee u kunt aangeven dat het codeblok wordt uitgevoerd op een andere computer of met behulp van alternatieve referenties.

InlineScript gebruikt van de syntaxis hieronder weergegeven.

InlineScript
{
  <Script Block>
} <Common Parameters>

Het meest voorkomende gebruik voor InlineScript in een runbook is het uitvoeren van een ​​blok van code op een andere computer. Dit is nodig wanneer cmdlets in uw runbook niet in Automatisering zijn geïnstalleerd of als de actie alleen machtigingen heeft voor lokale uitvoering op de doelcomputer. Dit wordt weergegeven in het volgende diagram.

InlineScript

Om het codeblok op een andere computer uit te voeren, worden de PSComputer en PSCredential parameters gebruikt met de InlineScript activiteit. Een globale bron, zoals een a8b7e82f-e3fc-4286-8570-8d5ded944b27#bkmk_Credentials of a8b7e82f-e3fc-4286-8570-8d5ded944b27#bkmk_Connections, wordt meestal in een runbook gebruikt om deze parameters van waarden te voorzien. De volgende voorbeeldcode voert een set opdrachten uit op een computer weergegeven door een verbinding genaamd 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

Terwijl InlineScript activiteiten van cruciaal belang kunnen zijn in bepaalde runbooks, mogen ze alleen worden gebruikt wanneer dat nodig is om de volgende redenen:

  • U kunt geen controlepunten gebruiken van binnen een InlineScript blok. Als er een fout optreedt in het blok, moet het worden hervat vanaf het begin.

  • InlineScript is van invloed op de schaalbaarheid van het runbook, omdat het de Windows PowerShell-sessie voor de hele lengte van het InlineScript-blok vasthoudt.

  • Activiteiten zoals Get-AutomationVariable en Get-AutomationPSCredential zijn niet beschikbaar in een InlineScript-blok.

Als u een InlineScript moet gebruiken, moet u de reikwijdte ervan minimaliseren. Bijvoorbeeld, als uw runbook doorloopt over een verzameling terwijl dezelfde bewerking wordt toegepast op elk item, moet de lus buiten de InlineScript plaatsvinden. Dit biedt de volgende voordelen:

  • U kunt een controlepunt voor de werkstroom maken na elke iteratie. Als de taak wordt opgeschort of onderbroken en hervat, kan de lus hervatten.

  • U kunt gebruik maken van ForEach –Parallel om verzamelingsitems gelijktijdig te behandelen.

Houd de volgende aanbevelingen in gedachten, als u wel een InlineScript in uw runbook gebruikt:

  • U kunt waarden in het script passeren maar met de $Using bereikaanpassing. Bijvoorbeeld een variabele met de naam $abc die is ingesteld buiten de InlineScript, zou $using:abc worden binnen een InlineScript.

  • Wijs voor het retourneren van uitvoer van een InlineScript de uitvoer toe aan een variabele en voer alle te retourneren gegevens uit naar de uitvoerstroom. In het volgende voorbeeld wordt de tekenreeks 'Hallo' aan een variabele met de naam $output toegewezen.

    $output = InlineScript { Write-Output "hi" }
    
  • Vermijd het definiëren van werkstromen binnen het InlineScript-bereik. Hoewel bepaalde werkstromen goed kunnen werken, is dit geen getest scenario. Als gevolg hiervan kunnen er verwarrende foutberichten worden weergegeven of kunt u worden geconfronteerd met een onverwachte werking.

Ga voor meer informatie over het gebruik van InlineScript naar Running Windows PowerShell Commands in a Workflow (Windows PowerShell-opdrachten uitvoeren in een werkstroom) en about_InlineScript.