Zelfstudie: Een PowerShell Workflow-runbook maken in Automation

In deze zelfstudie wordt stap voor stap het maken van een PowerShell Workflow-runbook in Azure Automation beschreven. PowerShell Workflow-runbooks zijn tekstrunbooks op basis van Windows PowerShell Workflow. U kunt de code van het runbook maken en bewerken met de teksteditor in de Azure-portal.

Notitie

Dit artikel is van toepassing op PowerShell 5.1; PowerShell 7.1 (preview) en PowerShell 7.2 bieden geen ondersteuning voor werkstromen.

In deze zelfstudie leert u het volgende:

  • Een PowerShell Workflow-runbook maken
  • Het runbook testen en publiceren
  • De status van de runbooktaak uitvoeren en bijhouden
  • Verificatie toevoegen voor het beheren van Azure-resources
  • De runbookparameters bijwerken om een virtuele Azure-machine te starten

Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.

Vereisten

  • Een Azure Automation-account met ten minste één door de gebruiker toegewezen beheerde identiteit. Zie Beheerde identiteit inschakelen voor meer informatie.
  • Az-modules: Az.Accounts en Az.Compute geïmporteerd in het Automation-account. Zie Az-modules importeren voor meer informatie.
  • Twee of meer virtuele Azure-machines. Omdat u deze machines stopt en start, moeten ze geen productie-VM's zijn.
  • De Azure Az PowerShell-module die op uw computer is geïnstalleerd. Zie De Azure Az PowerShell-module installeren als u deze wilt installeren of upgraden.

Machtigingen toewijzen aan beheerde identiteiten

Wijs machtigingen toe aan de juiste beheerde identiteit , zodat deze een virtuele machine kan stoppen. Het runbook kan de door het Automation-account toegewezen beheerde identiteit of een door de gebruiker toegewezen beheerde identiteit gebruiken. Er worden stappen gegeven om machtigingen toe te wijzen aan elke identiteit. In de onderstaande stappen wordt Azure Portal gebruikt. Zie Azure-rollen toewijzen met behulp van Azure PowerShell als u liever PowerShell gebruikt.

  1. Meld u aan bij Azure Portal en navigeer naar uw Automation-account.

  2. Selecteer Identiteit (preview) onder Account Instellingen.

  3. Selecteer op het tabblad Toegewezen systeem onder Machtigingen azure-roltoewijzingen om de pagina Azure-roltoewijzingen te openen.

    Selecting Azure role assignments in portal.

  4. Selecteer + Roltoewijzing toevoegen (preview) om de pagina Roltoewijzing toevoegen (preview) te openen.

    Add role assignments in portal.

  5. Selecteer de juiste waarden.

    Eigenschappen Omschrijving
    Bereik Bereik is een set resources waarop de roltoewijzing van toepassing is. Selecteer resourcegroep in de vervolgkeuzelijst.
    Abonnement Dit veld moet automatisch worden ingevuld met uw abonnement.
    Resourcegroep Selecteer in de vervolgkeuzelijst de resourcegroep om de identiteitsmachtigingen te geven.
    - Rol Selecteer DevTest Labs User in de vervolgkeuzelijst.
  6. Selecteer Opslaan en sluit vervolgens de pagina Azure-roltoewijzingen om terug te keren naar het tabblad Toegewezen systeem .

  7. Selecteer het tabblad Door de gebruiker toegewezen .

  8. Selecteer uw door de gebruiker toegewezen beheerde identiteit in de lijst om de pagina Beheerde identiteit te openen.

    Selecting user-assigned managed identity in portal.

  9. Noteer de client-id voor later gebruik.

    Showing Client ID for managed identity in portal

  10. Selecteer in het linkermenu Azure-roltoewijzingen en vervolgens + Roltoewijzing toevoegen (preview) om de pagina Roltoewijzing toevoegen (preview) te openen.

    Add role assignments in portal for user-assigned identity.

  11. Selecteer de juiste waarden.

    Eigenschappen Omschrijving
    Bereik Selecteer resourcegroep in de vervolgkeuzelijst.
    Abonnement Dit veld moet automatisch worden ingevuld met uw abonnement.
    Resourcegroep Selecteer in de vervolgkeuzelijst de resourcegroep om de identiteitsmachtigingen te geven.
    - Rol Selecteer DevTest Labs User in de vervolgkeuzelijst.
  12. Selecteer Opslaan en sluit vervolgens de pagina Azure-roltoewijzingen om terug te keren naar het tabblad Toegewezen gebruiker .

Nieuw runbook maken

Begin met het maken van een eenvoudig PowerShell Workflow-runbook. Een voordeel van Windows PowerShell-werkstromen is de mogelijkheid om een set opdrachten parallel uit te voeren in plaats van sequentieel, net als bij een typisch script.

Notitie

Met het maken van een releaserunbook heeft u een nieuwe ervaring in Azure Portal. Wanneer u de blade> Runbooks selecteert Een runbook maken, wordt een nieuwe pagina Een runbook maken geopend met toepasselijke opties.

  1. Selecteer Runbooks op uw geopende Automation-accountpagina onder Procesautomatisering

    Create PowerShell workflow runbook from portal

  2. Selecteer + Een runbook maken.

    1. Geef het runbook een naam. Test bijvoorbeeld.
    2. Selecteer PowerShell Workflow in de vervolgkeuzelijst Runbooktype.
    3. Selecteer 5.1 in de vervolgkeuzelijst Runtime-versie.
    4. Voer de toepasselijke beschrijving in.
    5. Selecteer Maken.

    PowerShell workflow runbook options from portal

Code toevoegen aan het runbook

U kunt de code rechtstreeks in het runbook typen of u kunt cmdlets, runbooks en assets selecteren in het besturingselement Bibliotheek en deze toevoegen aan het runbook met eventuele gerelateerde parameters. In deze zelfstudie typt u de code rechtstreeks in het runbook.

Uw runbook is momenteel leeg met alleen het vereiste Workflow-trefwoord, de naam van het runbook en de accolades die de volledige werkstroom omsluiten.

Workflow MyFirstRunbook-Workflow
{
}
  1. U kunt het Parallel trefwoord gebruiken om een scriptblok te maken met meerdere opdrachten die gelijktijdig worden uitgevoerd. Voer de volgende code tussen de accolades in:

    Parallel {
         Write-Output "Parallel"
         Get-Date
         Start-Sleep -s 3
         Get-Date
     }
    
    Write-Output " `r`n"
    Write-Output "Non-Parallel"
    Get-Date
    Start-Sleep -s 3
    Get-Date
    
  2. Sla het runbook op door Opslaan te selecteren.

Het runbook testen

Voordat u het runbook publiceert om het beschikbaar te maken in productie, moet u het testen om er zeker van te zijn dat het goed werkt. Wanneer u een runbook test, wordt de conceptversie uitgevoerd en kunt u de uitvoer interactief bekijken.

  1. Selecteer het testvenster om de pagina Test te openen.

  2. Selecteer Start om de test te starten. Er wordt een runbooktaak gemaakt en de status ervan wordt weergegeven in het deelvenster.

    In eerste instantie is de taakstatus 'In de wachtrij geplaatst'. Hiermee wordt aangegeven dat de taak wacht op tot er een runbook worker in de cloud beschikbaar is. De status verandert naar 'Wordt gestart' wanneer de taak wordt geclaimd door een worker. Ten slotte verandert de status naar 'Wordt uitgevoerd' wanneer de runbook daadwerkelijk wordt uitgevoerd.

  3. Wanneer de runbooktaak is voltooid, wordt de uitvoer weergegeven op de pagina Testen . De uitvoer moet er ongeveer uitzien als in de volgende afbeelding:

    PowerShell workflow runbook parallel output

    Controleer de uitvoer. Alles in het Parallel blok, inclusief de Start-Sleep opdracht, wordt tegelijkertijd uitgevoerd. Dezelfde opdrachten buiten het Parallel blok werden opeenvolgend uitgevoerd, zoals wordt weergegeven door de verschillende datum/tijdstempels.

  4. Sluit de pagina Testen om terug te keren naar het canvas.

Het runbook publiceren en starten

De runbook die u hebt gemaakt, bevindt zich nog steeds in de modus Concept. U moet het publiceren voordat u het in productie kunt uitvoeren. Wanneer u een runbook publiceert, overschrijft u de bestaande gepubliceerde versie met de conceptversie. In dit geval hebt u nog geen gepubliceerde versie omdat het runbook zojuist is gemaakt.

  1. Selecteer Publiceren om het runbook te publiceren en vervolgens Ja wanneer hierom wordt gevraagd.

  2. In het veld Status wordt nu Gepubliceerd weergegeven. Bekijk de opties bovenaan waarmee u het runbook nu kunt starten, een toekomstige begintijd kunt plannen of een webhook kunt maken, zodat het runbook kan worden gestart via een HTTP-aanroep. Selecteer Starten en vervolgens Ja wanneer gevraagd wordt om het runbook te starten.

    PowerShell workflow runbook overview page

  3. Er wordt een taakpagina geopend voor de runbooktaak die is gemaakt. Laat in dit geval de pagina open zodat u de voortgang van de taak kunt bekijken. Het veld Status komt overeen met de statussen die u hebt gezien bij het testen van het runbook.

    Screenshot of the runbook Job page.

  4. Zodra voor het runbook de status Voltooid wordt weergegeven, klikt u op Uitvoer. De uitvoer moet er ongeveer uitzien als de testuitvoer.

  5. Sluit de pagina Taak om terug te keren naar de overzichtspagina van runbook.

  6. Selecteer Onder Resources de optie Taken. Op deze pagina worden alle taken weergegeven die door uw runbook zijn gemaakt. U zou slechts één taak moeten zien, aangezien u de taak slechts eenmaal hebt uitgevoerd.

  7. Selecteer de taak om dezelfde taakpagina te openen die u hebt bekeken toen u het runbook startte. Op deze pagina kunt u de details bekijken van een taak die voor het runbook is gemaakt. Sluit de pagina Taak om terug te keren naar de overzichtspagina van runbook.

Verificatie toevoegen voor het beheren van Azure-resources

U hebt het runbook getest en gepubliceerd, maar tot nu toe doet het nog niets nuttigs. U wilt dat er Azure-resources mee worden beheerd. Dat gaat niet zonder verificatie met de referenties voor het abonnement. Het runbook maakt gebruik van de door het systeem toegewezen beheerde identiteit van het Automation-account om te verifiëren met Azure om de beheeractie uit te voeren op de VIRTUELE machine. Het runbook kan eenvoudig worden gewijzigd om een door de gebruiker toegewezen beheerde identiteit te gebruiken.

  1. Selecteer Overzicht en vervolgens Bewerken om de teksteditor te openen.

  2. Vervang de bestaande code door het volgende:

    workflow MyFirstRunbook-Workflow
    {
    $resourceGroup = "resourceGroupName"
    
    # Ensures you do not inherit an AzContext in your runbook
    Disable-AzContextAutosave -Scope Process
    
    # Connect to Azure with system-assigned managed identity
    Connect-AzAccount -Identity
    
    # set and store context
    $AzureContext = Set-AzContext –SubscriptionId "<SubscriptionID>"
    }
    

    Bewerk de $resourceGroup variabele met een geldige waarde die uw resourcegroep vertegenwoordigt.

  3. Als u wilt dat het runbook wordt uitgevoerd met de door het systeem toegewezen beheerde identiteit, laat u de code staan. Als u liever een door de gebruiker toegewezen beheerde identiteit gebruikt, gaat u als volgende te werk:

    1. Uit regel 9, verwijder Connect-AzAccount -Identity,
    2. Vervang het door Connect-AzAccount -Identity -AccountId <ClientId>, en
    3. Voer de client-id in die u eerder hebt verkregen.
  4. Selecteer Opslaan en vervolgens het deelvenster Testen.

  5. Selecteer Start om de test te starten. Zodra deze is voltooid, ziet u uitvoer zoals hieronder afgebeeld, met basisinformatie van uw account. Deze actie bevestigt dat de referentie geldig is.

    Basic information that confirms credentials.

  6. Sluit de pagina Testen om terug te keren naar het canvas.

Code toevoegen om een virtuele machine te starten

Nu uw runbook verifieert voor het Azure-abonnement, kunt u resources beheren. Voeg een opdracht toe om een virtuele machine te starten. U kunt elke VM in uw Azure-abonnement selecteren. Voorlopig hardcodeert u de naam hiervan in het runbook.

  1. Voeg de onderstaande code toe als laatste regel direct vóór de afsluitende accolade. Vervang door VMName de werkelijke naam van een virtuele machine.

    Start-AzVM -Name "VMName" -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
    
  2. Test het runbook en controleer of de VIRTUELE machine is gestart. Ga vervolgens terug naar het canvas.

Invoerparameters toevoegen aan het runbook

Uw runbook start momenteel de VIRTUELE machine die u in het runbook hebt vastgelegd. Het is handiger om de VM op te geven wanneer het runbook wordt gestart. Voeg invoerparameters toe aan het runbook om die functionaliteit te bieden.

  1. Vervang regel 3 door $resourceGroup = "resourceGroupName"het volgende:

    Param(
        [string]$resourceGroup,
        [string]$VMName
    )
    
  2. Vervang de vorige Start-AzVM opdracht door het volgende:

    Start-AzVM -Name $VMName -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
    
  3. Test het runbook en controleer of de VIRTUELE machine is gestart. Ga vervolgens terug naar het canvas.

Meerdere VM's tegelijk beheren

U kunt de ForEach -Parallel constructie gebruiken om opdrachten voor elk item in een verzameling gelijktijdig te verwerken. Pas de code aan zodat het runbook nu het volgende doet:

  • Accepteer een verzameling namen van virtuele machines,
  • Accepteer een parameter om de virtuele machines te stoppen of te starten, en
  • De acties parallel uitvoeren op alle virtuele machines
  1. Vervang alle bestaande code door het volgende:

    workflow MyFirstRunbook-Workflow
    {
       Param(
           [string]$resourceGroup,
           [string[]]$VMs,
           [string]$action
       )
    
       # Ensures you do not inherit an AzContext in your runbook
       Disable-AzContextAutosave -Scope Process
    
       # Connect to Azure with system-assigned managed identity
       Connect-AzAccount -Identity
    
       # set and store context
       $AzureContext = Set-AzContext –SubscriptionId "<SubscriptionID>"
    
       # Start or stop VMs in parallel
       if ($action -eq "Start") {
           ForEach -Parallel ($vm in $VMs)
           {
               Start-AzVM -Name $vm -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
           }
       }
       elseif ($action -eq "Stop") {
           ForEach -Parallel ($vm in $VMs)
           {
               Stop-AzVM -Name $vm -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext -Force
           }
       }
       else {
           Write-Output "`r`n Action not allowed. Please enter 'stop' or 'start'."
       }
       }
    
  2. Als u wilt dat het runbook wordt uitgevoerd met de door het systeem toegewezen beheerde identiteit, laat u de code staan. Als u liever een door de gebruiker toegewezen beheerde identiteit gebruikt, gaat u als volgende te werk:

    1. Uit regel 9, verwijder Connect-AzAccount -Identity,
    2. Vervang het door Connect-AzAccount -Identity -AccountId <ClientId>, en
    3. Voer de client-id in die u eerder hebt verkregen.
  3. Selecteer Opslaan, vervolgens Publiceren en vervolgens Ja wanneer hierom wordt gevraagd.

  4. Selecteer Start op de pagina Overzicht.

  5. Vul de parameters in en selecteer VERVOLGENS OK.

    Parameter Description
    RESOURCEGROUP Voer de naam in van de resourcegroep van de VM's.
    VM's Voer de namen van de virtuele machines in met behulp van de volgende syntaxis: ["VM1","VM2","VM3"]
    Actie Enter stop of start.
  6. Navigeer om de paar seconden naar uw lijst met virtuele machines en vernieuw de pagina. U ziet dat de actie voor elke virtuele machine parallel plaatsvindt. Zonder het -Parallel trefwoord zouden de acties opeenvolgend zijn uitgevoerd. Hoewel de VM's opeenvolgend worden gestart, kan elke VM de actieve fase op iets verschillende tijdstippen bereiken op basis van de kenmerken van elke VM.

Resources opschonen

Als u dit runbook niet meer gaat gebruiken, verwijdert u het met de volgende stappen:

  1. Navigeer naar uw Automation-account.
  2. Selecteer onder Procesautomatisering de optie Runbooks.
  3. Selecteer het runbook.
  4. Selecteer Verwijderen op de overzichtspagina van het runbook.

Volgende stappen

In deze zelfstudie hebt u een PowerShell-werkstroomrunbook gemaakt. Zie voor meer informatie over Python 3-runbooks: