Delen via


Concepten van Windows PowerShell-werkstromen

Belangrijk

Deze versie van Service Management Automation (SMA) heeft het einde van de ondersteuning bereikt. U wordt aangeraden een upgrade uit te voeren naar SMA 2022.

Eén type runbook voor Service Management Automation is gebaseerd op Windows PowerShell werkstromen. Dit artikel bevat een kort overzicht van de kritieke functies van werkstromen die gebruikelijk zijn in Automation-runbooks. Volledige details over werkstromen zijn beschikbaar in Aan de slag met Windows PowerShell Workflow.

De runbookstructuur is identiek tussen runbooks voor Service Management Automation en voor Microsoft Azure Automation hoewel de twee doorgaans met verschillende resources werken.

Windows PowerShell-werkstromen

Een werkstroom is een opeenvolging van geprogrammeerde, met elkaar verbonden stappen waarmee langlopende taken worden uitgevoerd of die de coördinatie vereisen van meerdere stappen 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 Workflow is een Windows PowerShell script dat gebruikmaakt van Windows Workflow Foundation. Hoewel de werkstroom is geschreven met Windows PowerShell syntaxis en wordt gestart door Windows PowerShell, wordt deze verwerkt door Windows Workflow Foundation.

Algemene structuur

Een Windows PowerShell Workflow begint met het trefwoord Werkstroom, gevolgd door de hoofdtekst van het script tussen accolades. De naam van de werkstroom volgt het trefwoord Werkstroom , zoals weergegeven in de volgende syntaxis. De naam van de werkstroom komt overeen met de naam van het Automation-runbook.

Workflow Test-Runbook
{
   <Commands>
}

Als u parameters wilt toevoegen aan de werkstroom, gebruikt u het trefwoord Param , zoals wordt weergegeven in de volgende syntaxis. De Management Portal zal de gebruiker naar waarden voor deze parameters vragen wanneer het runbook wordt gestart. In dit voorbeeld wordt het optionele parameterkenmerk gebruikt, waarmee wordt aangegeven 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 Goedgekeurde werkwoorden voor Windows PowerShell opdrachten raadplegen voor een lijst met goedgekeurde werkwoorden die u kunt gebruiken. De naam van de werkstroom moet overeenkomen met de naam van het Automation-runbook. Als het runbook wordt ingevoerd, dan moet de bestandsnaam overeenkomen met de werkstroomnaam en moet eindigen op .ps1.

Beperkingen

Zie Syntactische verschillen tussen scriptwerkstromen en scripts voor een volledige lijst met beperkingen en syntaxisverschillen tussen Windows PowerShell werkstromen en Windows PowerShell.

Activiteiten

Een activiteit is een specifieke taak in een werkstroom. Zoals een script uit een of meer opdrachten bestaat, bestaat een werkstroom uit een of meer activiteiten die achter elkaar 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 cmdlets zonder een bijbehorende activiteit voert Windows PowerShell Workflow de cmdlet automatisch uit binnen een InlineScript-activiteit. Er is een set cmdlets die zijn uitgesloten en niet kunnen worden gebruikt in een werkstroom, tenzij u deze expliciet opneemt in een InlineScript-blok . Zie Activiteiten gebruiken in scriptwerkstromen voor meer informatie over deze concepten.

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

Integratiemodulen

Een integratiemodule is een pakket dat een Windows PowerShell module bevat en dat kan worden geïmporteerd in Automation. Windows PowerShell Modules bevatten cmdlets die kunnen worden gebruikt in Automation-runbooks. Producten en services, zoals Operations Manager en Azure, hebben modules die cmdlets bevatten die specifiek voor hun werking zijn.

Integratiemodules die in Automation worden geïmporteerd, zijn automatisch beschikbaar voor alle runbooks. Aangezien Automation 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 in het script te importeren met Import-Module.

Elke Windows PowerShell-module kan in Automation worden geïmporteerd zolang alle afhankelijkheden zich in één map bevinden. Als de module afhankelijk is van registerinstellingen of bestanden die zich niet in het standaardpad bevinden, kan deze worden geïmporteerd, maar werkt deze waarschijnlijk niet omdat Automation de afhankelijkheden niet kan vinden. Modules met externe afhankelijkheden kunnen worden gebruikt in een runbook door ze op een andere host te installeren met behulp van en ze vervolgens te openen met een InlineScript-scriptblok .

Met Service Management Automation kunt u modules met externe afhankelijkheden gebruiken door deze op elke werkrolserver te installeren. Hoewel de cmdlets in deze modules kunnen worden gebruikt in runbooks, worden ze niet door Automation gedetecteerd ter ondersteuning van functies zoals de wizard Activiteit invoegen. Als u deze functie wilt gebruiken, kunt u een draagbare module maken met behulp van de cmdlet New-SmaPortableModule . Met deze cmdlet maakt u een module met een stub voor elk van de cmdlets en die kan worden geïmporteerd in Automation. 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 met elkaar uit te voeren, kunnen de acties tegelijkertijd worden uitgevoerd, waardoor de algehele efficiëntie wordt verhoogd. Alleen wanneer alle voltooid zijn, zal het runbook worden voortgezet.

U kunt het trefwoord Parallel gebruiken om een scriptblok te maken met meerdere opdrachten die gelijktijdig 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 de ForEach -Parallel-constructie gebruiken om opdrachten voor elk item 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 begint Activiteit1 op hetzelfde moment voor alle items in de verzameling. Voor elk item start Activiteit2 nadat Activiteit1 voltooid is. Activiteit3 start pas nadat zowel Activiteit1 als Activiteit2 voor alle items zijn voltooid.

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

Het trefwoord Reeks wordt gebruikt om opdrachten op volgorde uit te voeren binnen een parallel scriptblok. Het sequentiescriptblok wordt parallel met andere opdrachten uitgevoerd, maar de opdrachten in 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. Activiteit5 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 Automation-database, zodat de werkstroom kan worden hervat, zelfs in het geval van een storing. De controlepuntgegevens worden verwijderd zodra de runbooktaak is voltooid.

U kunt een controlepunt in een werkstroom instellen met de activiteit Checkpoint-Workflow . 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 er 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 instellen in een runbook na activiteiten die foutgevoelig kunnen zijn en die niet moeten 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 het maken is voltooid, maar het runbook later mislukt, wordt de virtuele machine niet opnieuw gemaakt wanneer het runbook wordt hervat.

Zie Controlepunten toevoegen aan een scriptwerkstroom voor meer informatie over controlepunten.

Een runbook onderbreken

U kunt afdwingen dat een runbook zichzelf onderbreekt met de activiteit Suspend-Workflow . 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 onderbreken zelf voor meer informatie over het onderbreken van een werkstroom.

InlineScript

De InlineScript-activiteit voert een blok opdrachten uit in een afzonderlijke sessie zonder werkstroom 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 standaardwerkstroom algemene parameters, waaronder PSComputerName en PSCredential, waarmee u kunt opgeven dat het codeblok moet worden uitgevoerd op een andere computer of met behulp van alternatieve referenties.

InlineScript gebruikt van de syntaxis hieronder weergegeven.

InlineScript
{
  <Script Block>
} <Common Parameters>

De meest voorkomende toepassing van InlineScript in een runbook is het uitvoeren van een codeblok op een andere computer. Dit is vereist wanneer cmdlets in uw runbook niet zijn geïnstalleerd in Automation of als de actie alleen machtigingen heeft om lokaal op de doelcomputer te worden uitgevoerd. Dit wordt weergegeven in het volgende diagram.

Inlinescriptdiagram.

Om het codeblok op een andere computer uit te voeren, worden de parameters PSComputer en PSCredential gebruikt met de InlineScript-activiteit . Een globale resource, zoals een referentie of verbinding , wordt doorgaans gebruikt in een runbook om waarden voor deze parameters op te geven. 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

Hoewel InlineScript-activiteiten essentieel kunnen zijn in bepaalde runbooks, mogen ze alleen worden gebruikt wanneer dat nodig is om de volgende redenen:

  • U kunt geen controlepunten gebruiken vanuit 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 bevat voor de volledige lengte van het InlineScript-blok.

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

Als u een InlineScript moet gebruiken, moet u het bereik minimaliseren. Als uw runbook bijvoorbeeld een verzameling itereert terwijl dezelfde bewerking op elk item wordt toegepast, moet de lus buiten inlineScript plaatsvinden. Dit biedt de volgende voordelen:

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

  • U kunt ForEach Parallel gebruiken om verzamelingsitems gelijktijdig te verwerken.

Houd rekening met de volgende aanbevelingen als u een InlineScript in uw runbook gebruikt:

  • U kunt echter waarden doorgeven aan het script met de $Using bereikaanpassing. Een variabele met de naam $abc die buiten InlineScript is ingesteld, wordt bijvoorbeeld $using:abc in een InlineScript.

  • Als u uitvoer van een InlineScript wilt retourneren, wijst u de uitvoer toe aan een variabele en voert u alle gegevens uit die moeten worden geretourneerd naar de uitvoerstroom. In het volgende voorbeeld wordt de tekenreeks hi toegewezen aan een variabele met de naam $output.

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

Zie Windows PowerShell-opdrachten uitvoeren in een werkstroom en about_InlineScript voor meer informatie over het gebruik van InlineScript.

Volgende stappen