Självstudie: Skapa en PowerShell Workflow-runbook i Automation

Den här självstudien beskriver steg för steg hur du skapar en PowerShell Workflow-runbook i Azure Automation. PowerShell-arbetsflödesrunbooks är läroböcker baserade på Windows PowerShell-arbetsflöde. Du kan skapa och redigera koden för runbooken med hjälp av textredigeraren i Azure-portalen.

Kommentar

Den här artikeln gäller endast för PowerShell 5.1. PowerShell 7+ versioner stöder inte arbetsflöden och inaktuella runbooks kan inte uppdateras. Vi rekommenderar att du använder PowerShell 7.2-runbooks för avancerade funktioner som parallell jobbkörning. Läs mer om begränsningar för PowerShell-arbetsflödesrunbooks.

I den här självstudien lär du dig att:

  • Skapa en PowerShell Workflow-runbook
  • Testa och publicera runbooken
  • Kör och spåra status för runbook-jobbet
  • Lägga till autentisering för att hantera Azure-resurser
  • Uppdatera runbook-parametrarna för att starta en virtuell Azure-dator

Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.

Förutsättningar

Tilldela behörigheter till hanterade identiteter

Tilldela behörigheter till lämplig hanterad identitet så att den kan stoppa en virtuell dator. Runbooken kan använda antingen den systemtilldelade hanterade identiteten för Automation-kontot eller en användartilldelad hanterad identitet. Steg tillhandahålls för att tilldela behörigheter till varje identitet. Stegen nedan använder Azure-portalen. Om du föredrar att använda PowerShell kan du läsa Tilldela Azure-roller med Hjälp av Azure PowerShell.

  1. Logga in på Azure Portal och gå till ditt Automation-konto.

  2. Under Kontoinställningar väljer du Identitet (förhandsversion).

  3. På fliken Systemtilldelad går du till Behörigheter och väljer Azure-rolltilldelningar för att öppna sidan Azure-rolltilldelningar .

    Välja Azure-rolltilldelningar i portalen.

  4. Välj + Lägg till rolltilldelning (förhandsversion) för att öppna sidan Lägg till rolltilldelning (förhandsversion).

    Lägg till rolltilldelningar i portalen.

  5. Välj lämpliga värden.

    Property Description
    Definitionsområde Omfång är en uppsättning resurser som rolltilldelningen gäller för. I listrutan väljer du Resursgrupp.
    Prenumeration Det här fältet ska fyllas i automatiskt med din prenumeration.
    Resursgrupp I listrutan väljer du resursgruppen för att ge identitetsbehörigheten över.
    Roll I listrutan väljer du DevTest Labs-användare.
  6. Välj Spara och stäng sedan sidan Azure-rolltilldelningar för att återgå till fliken Systemtilldelad .

  7. Välj fliken Användartilldelade .

  8. Välj din användartilldelade hanterade identitet i listan för att öppna sidan Hanterad identitet .

    Välja användartilldelad hanterad identitet i portalen.

  9. Anteckna klient-ID:t för senare användning.

    Visar klient-ID för hanterad identitet i portalen

  10. På den vänstra menyn väljer du Azure-rolltilldelningar och sedan + Lägg till rolltilldelning (förhandsversion) för att öppna sidan Lägg till rolltilldelning (förhandsversion).

    Lägg till rolltilldelningar i portalen för användartilldelad identitet.

  11. Välj lämpliga värden.

    Property Description
    Definitionsområde I listrutan väljer du Resursgrupp.
    Prenumeration Det här fältet ska fyllas i automatiskt med din prenumeration.
    Resursgrupp I listrutan väljer du resursgruppen för att ge identitetsbehörigheten över.
    Roll I listrutan väljer du DevTest Labs-användare.
  12. Välj Spara och stäng sedan sidan Azure-rolltilldelningar för att återgå till fliken Användartilldelad .

Skapa ny runbook

Börja med att skapa en enkel PowerShell-arbetsflödesrunbook. En fördel med Windows PowerShell-arbetsflöden är möjligheten att utföra en uppsättning kommandon parallellt i stället för sekventiellt som med ett typiskt skript.

Kommentar

När du skapar en versionsrunbook får du en ny upplevelse i Azure-portalen. När du väljer Runbooks-bladet >Skapa en runbook öppnas en ny sida Skapa en runbook med tillämpliga alternativ.

  1. På sidan för ditt öppna Automation-konto går du till ProcessAutomatisering och väljer Runbooks

    Skapa PowerShell-arbetsflödesrunbook från portalen

  2. Välj + Skapa en runbook.

    1. Ge runbooken namnet. Till exempel test.
    2. I listrutan Runbook-typ väljer du PowerShell-arbetsflöde.
    3. Välj 5.1 i listrutan Körningsversion.
    4. Ange tillämplig beskrivning.
    5. Välj Skapa.

    Runbook-alternativ för PowerShell-arbetsflöden från portalen

Lägga till kod i runbooken

Du kan antingen skriva kod direkt i runbooken eller välja cmdletar, runbooks och tillgångar från bibliotekskontrollen och lägga till dem i runbooken med relaterade parametrar. I den här självstudien skriver du kod direkt i runbooken.

Din runbook är för närvarande tom med endast det nyckelord som krävs workflow , namnet på runbooken och de klammerparenteser som omsluter hela arbetsflödet.

workflow MyFirstRunbook-Workflow
{
}
  1. Du kan använda nyckelordet Parallel för att skapa ett skriptblock med flera kommandon som körs samtidigt. Ange följande kod mellan klammerparenteserna:

     parallel
     {
     	Write-Output "Parallel"
     	Get-Date
     	Start-Sleep -Seconds 3
     	Get-Date
     }
    
     Write-Output " `r`n"
     Write-Output "Non-Parallel"
     Get-Date
     Start-Sleep -Seconds 3
     Get-Date
    
  2. Spara runbooken genom att välja Spara.

Testa runbooken

Innan du publicerar runbooken för att göra den tillgänglig i produktion bör du testa den för att se till att den fungerar korrekt. När du testar en runbook körs dess utkastversion och du kan visa dess utdata interaktivt.

  1. Välj testfönstret för att öppna sidan Test .

  2. Välj Starta för att starta testet. Ett runbook-jobb skapas och dess status visas i fönstret.

    Jobbstatusen börjar som I kö, vilket indikerar att jobbet väntar på att en runbook-arbetare i molnet ska bli tillgänglig. Statusen ändras till Start när en arbetare gör anspråk på jobbet. Slutligen blir statusen Körs när runbooken faktiskt börjar köras.

  3. När runbook-jobbet är klart visar testsidan utdata. Utdata bör se ut ungefär så här:

    Parallella utdata för PowerShell-arbetsflödeskörning

    Granska utdata. Allt i blocket Parallel , inklusive Start-Sleep kommandot, körs samtidigt. Samma kommandon utanför Parallel blocket kördes sekventiellt, vilket visas av de olika datumtidsstämplarna.

  4. Stäng sidan Test för att återgå till arbetsytan.

Publicera och starta runbooken

Den runbook som du har skapat är fortfarande i utkastläge. Du måste publicera den innan du kan köra den i produktion. När du publicerar en runbook skriver du över den befintliga publicerade versionen med utkastversionen. I det här fallet har du ingen publicerad version ännu eftersom du precis har skapat runbook-jobbet.

  1. Välj Publicera för att publicera runbooken och sedan Ja när du uppmanas till det.

  2. Fältet Status visar nu Publicerad. Granska alternativen överst så att du kan starta runbooken nu, schemalägga en framtida starttid eller skapa en webhook så att runbooken kan startas via ett HTTP-anrop. Välj Starta och sedan Ja när du ombes att starta runbooken.

    Översiktssida för PowerShell-arbetsflödeskörning

  3. En jobbsida öppnas för runbook-jobbet som har skapats. I det här fallet lämnar du sidan öppen så att du kan se jobbets förlopp. Fältet Status matchar de statusar som du såg när du testade runbooken.

    Skärmbild av sidan runbook-jobb.

  4. När runbook-statusen visar Slutförd väljer du Utdata. Utdata bör se ut ungefär som testutdata.

  5. Stäng sidan Jobb för att återgå till runbook-översiktssidan.

  6. Under Resurser väljer du Jobb. På den här sidan visas alla jobb som skapats av din runbook. Du bör bara se ett jobb i listan, eftersom du bara har kört jobbet en gång.

  7. Välj jobbet för att öppna samma jobbsida som du visade när du startade runbooken. Använd den här sidan om du vill visa information om alla jobb som skapats för runbooken. Stäng sidan Jobb för att återgå till runbook-översiktssidan.

Lägga till autentisering för att hantera Azure-resurser

Du har testat och publicerat din runbook, men hittills gör den egentligen inget användbart. Du vill att den ska hantera Azure-resurser. Det kan inte göra det om den inte autentiserar med autentiseringsuppgifterna för prenumerationen. Runbooken använder Automation-kontots systemtilldelade hanterade identitet för att autentisera med Azure för att utföra hanteringsåtgärden mot den virtuella datorn. Runbooken kan enkelt ändras för att använda en användartilldelad hanterad identitet.

  1. Välj Översikt och sedan Redigera för att öppna textredigeraren.

  2. Ersätt den befintliga koden med följande:

    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>"
    }
    

    Redigera variabeln $resourceGroup med ett giltigt värde som representerar resursgruppen.

  3. Om du vill att runbooken ska köras med den systemtilldelade hanterade identiteten lämnar du koden som den är. Om du föredrar att använda en användartilldelad hanterad identitet:

    1. Från rad 9 tar du bort Connect-AzAccount -Identity,
    2. Ersätt den med Connect-AzAccount -Identity -AccountId <ClientId>, och
    3. Ange det klient-ID som du hämtade tidigare.
  4. Välj Spara och sedan testfönstret.

  5. Välj Starta för att starta testet. När den är klar bör du se utdata som liknar följande och visa grundläggande information från ditt konto. Den här åtgärden bekräftar att autentiseringsuppgiften är giltig.

    Grundläggande information som bekräftar autentiseringsuppgifter.

  6. Stäng sidan Test för att återgå till arbetsytan.

Lägga till kod för att starta en virtuell dator

Nu när din runbook autentiserar till Azure-prenumerationen kan du hantera resurser. Lägg till ett kommando för att starta en virtuell dator. Du kan välja valfri virtuell dator i din Azure-prenumeration och för tillfället hårdkodar du det namnet i runbooken.

  1. Lägg till koden nedan som den sista raden omedelbart före den avslutande klammerparentesen. Ersätt VMName med det faktiska namnet på en virtuell dator.

    Start-AzVM -Name "VMName" -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
    
  2. Testa runbooken och bekräfta att den virtuella datorn har startats. Gå sedan tillbaka till arbetsytan.

Lägga till indataparametrar i runbooken

Din runbook startar för närvarande den virtuella dator som du har hårdkodat i runbooken. Det är mer användbart om du kan ange den virtuella datorn när runbooken startas. Lägg till indataparametrar i runbooken för att tillhandahålla den funktionen.

  1. Ersätt rad 3, $resourceGroup = "resourceGroupName", med följande:

    Param(
        [string]$resourceGroup,
        [string]$VMName
    )
    
  2. Ersätt föregående Start-AzVM kommando med följande:

    Start-AzVM -Name $VMName -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
    
  3. Testa runbooken och bekräfta att den virtuella datorn har startats. Gå sedan tillbaka till arbetsytan.

Hantera flera virtuella datorer samtidigt

Du kan använda konstruktionen ForEach -Parallel för att bearbeta kommandon för varje objekt i en samling samtidigt. Ändra koden så att runbooken nu:

  • Acceptera en samling med namn på virtuella datorer,
  • Acceptera en parameter för att stoppa eller starta de virtuella datorerna och
  • Utför åtgärderna parallellt mot alla virtuella datorer
  1. Ersätt all befintlig kod med följande:

    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. Om du vill att runbooken ska köras med den systemtilldelade hanterade identiteten lämnar du koden som den är. Om du föredrar att använda en användartilldelad hanterad identitet:

    1. Från rad 9 tar du bort Connect-AzAccount -Identity,
    2. Ersätt den med Connect-AzAccount -Identity -AccountId <ClientId>, och
    3. Ange det klient-ID som du hämtade tidigare.
  3. Välj Spara, sedan Publicera och sedan Ja när du uppmanas att göra det.

  4. På sidan Översikt väljer du Start.

  5. Fyll i parametrarna och välj sedan OK.

    Parameter Description
    RESOURCEGROUP Ange namnet på resursgruppen för de virtuella datorerna.
    Virtuella datorer Ange namnen på de virtuella datorerna med hjälp av följande syntax: ["VM1","VM2","VM3"]
    Åtgärd Ange stop eller start.
  6. Gå till listan över virtuella datorer och uppdatera sidan med några sekunders mellanrum. Observera att åtgärden för varje virtuell dator sker parallellt. Utan nyckelordet -Parallel skulle åtgärderna ha utförts sekventiellt. Även om de virtuella datorerna startar parallellt kan varje virtuell dator nå fasen Körs vid något olika tidpunkter baserat på egenskaperna för varje virtuell dator.

Rensa resurser

Om du inte kommer att fortsätta att använda den här runbooken tar du bort den med följande steg:

  1. Gå till ditt Automation-konto.
  2. Under Processautomatisering väljer du Runbooks.
  3. Välj runbooken.
  4. På sidan Översikt över runbook väljer du Ta bort.

Nästa steg

I den här självstudien skapade du en PowerShell-arbetsflödes runbook. En titt på Python 3-runbooks finns i: