Självstudie: Skapa en Runbook för PowerShell-arbetsflöde i Automation

Den här självstudien beskriver steg för steg hur du skapar en PowerShell Workflow-runbook i Azure Automation. Runbooks för PowerShell-arbetsflöden är textrunbooks som baseras på Windows PowerShell Arbetsflöde. Du kan skapa och redigera koden för runbooken med hjälp av textredigeraren i Azure-Portal.

Anteckning

Den här artikeln gäller för PowerShell 5.1; PowerShell 7.1 (förhandsversion) och PowerShell 7.2 (förhandsversion) stöder inte arbetsflöden.

I den här guiden får du lära dig att:

  • Skapa en PowerShell Workflow-runbook
  • Testa och publicera runbooken
  • Köra 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 kan du skapa 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-Portal. Om du föredrar att använda PowerShell läser du Tilldela Azure-roller med 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 Systemtilldelade 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.

    Egenskap Beskrivning
    Omfång 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örigheterna.
    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 Systemtilldelade .

  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.

    Egenskap Beskrivning
    Omfång 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örigheterna.
    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ändartilldelade .

Skapa ny runbook

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

Anteckning

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

  1. Välj Runbooks under ProcessAutomatisering på sidan för ditt öppna Automation-konto

    Skapa PowerShell-arbetsflödes-runbook från portalen

  2. Välj + Skapa en runbook.

    1. Ge runbooken ett namn. Till exempel test.
    2. I listrutan Runbook type (Runbook-typ) väljer du PowerShell-arbetsflöde.
    3. I listrutan Körningsversion väljer du 5.1.
    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 bara det nyckelord som krävs Workflow , namnet på runbooken och klammerparenteserna 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 ska köras samtidigt. Ange följande kod mellan klammerparenteserna:

    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. 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 fönstret Test 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 Köad, vilket indikerar att jobbet väntar på att en runbook-arbetare i molnet ska bli tillgänglig. Statusen ändras till Starta 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 som i följande bild:

    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, enligt de olika datumtidsstämplarna.

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

Publicera och starta runbooken

Runbooken 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 Publicerat. Granska alternativen överst som gör 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 Start och sedan Ja när du uppmanas 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 runbooken. 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 den inte göra 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 autentiseringsuppgifterna är giltiga.

    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 autentiseras 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 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 namn på virtuella datorer,
  • Acceptera en parameter för att stoppa eller starta de virtuella datorerna och
  • Utföra å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 Beskrivning
    RESOURCEGROUP Ange namnet på resursgruppen för de virtuella datorerna.
    Virtuella datorer Ange namnen på de virtuella datorerna med 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. De virtuella datorerna startar sekventiellt, men varje virtuell dator kan nå körningsfasen 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 Runbook.
  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: