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 Workflow-runbooks är text-runbooks baserade på Windows PowerShell Workflow. 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) 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 automationskontots system tilldelade hanterade identitet eller en användar tilldelad hanterad identitet. Steg finns för att tilldela behörigheter till varje identitet. Stegen nedan använder Azure Portal. Om du föredrar att använda PowerShell kan du gå till Tilldela Azure-roller med hjälp av Azure PowerShell.

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

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

  3. På fliken Systemtilldelning under Behörigheter väljer du 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. Välj Resursgrupp i listrutan.
    Prenumeration Det här fältet ska fyllas i automatiskt med din prenumeration.
    Resursgrupp I listrutan väljer du den resursgrupp som identitetsbehörigheten ska tilldelas.
    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 Systemtilldelning.

  7. Välj fliken Användar tilldelad.

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

    Välja användar tilldelad 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ändartilldelning av identitet.

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

    Egenskap Beskrivning
    Omfång Välj Resursgrupp i listrutan.
    Prenumeration Det här fältet ska fyllas i automatiskt med din prenumeration.
    Resursgrupp I listrutan väljer du den resursgrupp som identitetsbehörigheten ska tilldelas.
    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ändartilldelning.

Skapa en 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 runbook-versionen har skapats får du en ny upplevelse i Azure Portal. När du väljer bladet Runbooks > Skapa en runbook öppnas en ny sida Skapa en runbook med tillämpliga alternativ.

  1. På din öppna Automation-kontosida går du till Processautomatisering och väljer Runbooks

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

  2. Välj + Skapa en runbook.

    1. Ge runbooken ett namn. Till exempel test.
    2. Välj PowerShell i listrutan Typ av runbook.
    3. I listrutan Körningsversion väljer du 5.1.
    4. Ange en 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 cmdlets, runbooks och tillgångar från bibliotekskontrollen och lägga till dem i runbooken med eventuella 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 obligatoriska nyckelordet, namnet på runbooken och de kparenteser Workflow som omsluter hela arbetsflödet.

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

    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 Testfönster 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 startar som I kö, vilket anger att jobbet väntar på att en Runbook Worker i molnet ska bli tillgänglig. Statusen ändras till Startar när en arbetsroll gör anspråk på jobbet. Slutligen blir statusen Körs när runbooken faktiskt börjar köras.

  3. När runbook-jobbet har slutförts visar sidan Test dess utdata. Utdata bör se ut ungefär som på följande bild:

    Parallella utdata för PowerShell-arbetsflöden

    Granska utdata. Allt i Parallel blocket, Start-Sleep inklusive kommandot, körs samtidigt. Samma kommandon utanför blocket Parallel kördes sekventiellt, enligt de olika datum/tid-stä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 tillfrågas.

  2. Fältet Status visar nu Publicerad. Granska alternativen längst upp 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 Start och sedan Ja när du uppmanas att starta runbooken.

    Översiktssida för PowerShell-arbetsflödes-runbook

  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ört 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 för att 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 det inte autentiserar med autentiseringsuppgifterna för prenumerationen. Runbooken använder Automation-kontots system tilldelade hanterade identitet för att autentisera med Azure för att utföra hanteringsåtgärden mot den virtuella datorn. Runbooken kan enkelt ändras så att den använder en användar tilldelad hanterad identitet.

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

  2. Ersätt all befintlig kod 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
    $AzureContext = (Connect-AzAccount -Identity).context
    
    # set and store context
    $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext   
    }
    

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

  3. Om du vill att runbooken ska köras med den system tilldelade hanterade identiteten lämnar du koden som den är. Om du föredrar att använda en användar tilldelad hanterad identitet gör du följande:

    1. Från rad 9 tar du bort $AzureContext = (Connect-AzAccount -Identity).context ,
    2. Ersätt den med $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context , och
    3. Ange det klient-ID som du fick tidigare.
  4. Välj Spara och sedan Testfönster.

  5. Välj Starta för att starta testet. När det är klart 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 autentiseringssuppgifter är giltiga.

    Grundläggande information som bekräftar autentiseringsuppgifterna.

  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 för 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 kparentesen. 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 startat. 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 $resourceGroup = "resourceGroupName" 3, , 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 startat. Gå sedan tillbaka till arbetsytan.

Hantera flera virtuella datorer samtidigt

Du kan använda ForEach -Parallel -konstruktionen 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
    $AzureContext = (Connect-AzAccount -Identity).context
    
    # set and store context
    $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext   
    
    # 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 system tilldelade hanterade identiteten lämnar du koden som den är. Om du föredrar att använda en användar tilldelad hanterad identitet gör du följande:

    1. Från rad 13 tar du bort $AzureContext = (Connect-AzAccount -Identity).context ,
    2. Ersätt den med $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context , och
    3. Ange det klient-ID som du fick tidigare.
  3. Välj Spara, publicera och sedan Ja när du tillfrågas.

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

  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 -Parallel nyckelordet skulle åtgärderna ha utförts sekventiellt. De virtuella datorerna startar sekventiellt, men varje virtuell dator kan 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 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å runbook-sidan Översikt 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: