Tutorial: Erstellen eines PowerShell-Workflow-Runbooks in Automation

Dieses Tutorial führt Sie durch die Erstellung eines PowerShell-Workflow-Runbooks in Azure Automation. PowerShell-Workflow-Runbooks sind Textrunbooks, die auf einem Windows PowerShell-Workflow basieren. Sie können den Code des Runbooks mit dem Text-Editor im Azure-Portal erstellen und bearbeiten.

Hinweis

Dieser Artikel gilt für PowerShell 5.1.; PowerShell 7.1 (Vorschau) und PowerShell 7.2 (Vorschau) unterstützen keine Workflows.

In diesem Tutorial lernen Sie Folgendes:

  • Erstellen eines PowerShell-Workflow-Runbooks
  • Testen und Veröffentlichen des Runbooks
  • Ausführen des Runbookauftrags und Nachverfolgen seines Status
  • Hinzufügen von Authentifizierungsfunktionen für die Verwaltung von Azure-Ressourcen
  • Aktualisieren der Runbook-Parameter zum Starten einer Azure-VM

Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

Voraussetzungen

Zuweisen von Berechtigungen zu verwalteten Identitäten

Weisen Sie der betreffenden verwalteten Identität Berechtigungen zu, damit sie eine VM beenden kann. Das Runbook kann die systemseitig zugewiesene verwaltete Identität des Automation-Kontos oder eine benutzerseitig zugewiesene verwaltete Identität verwenden. Schritte zur Zuweisung von Berechtigungen für jede Identität sind angegeben. Die folgenden Schritte verwenden das Azure-Portal. Wenn Sie lieber PowerShell verwenden möchten, finden Sie entsprechende Informationen unter Zuweisen von Azure-Rollen mithilfe von Azure PowerShell.

  1. Melden Sie sich beim Azure-Portal an, und navigieren Sie zu Ihrem Automation-Konto.

  2. Wählen Sie unter Kontoeinstellungen die Option Identität (Vorschau) aus.

  3. Wählen Sie auf der Registerkarte Vom System zugewiesen unter Berechtigungen die Option Azure-Rollenzuweisungen aus, um die Seite Azure-Rollenzuweisungen zu öffnen.

    Selecting Azure role assignments in portal.

  4. Wählen Sie + Rollenzuweisung hinzufügen (Vorschau) aus, um die Seite Rollenzuweisung hinzufügen (Vorschau) zu öffnen.

    Add role assignments in portal.

  5. Wählen Sie die entsprechenden Werte aus.

    Eigenschaft Beschreibung
    `Scope` „Scope“ bezeichnet eine Gruppe von Ressourcen, für die die Rollenzuweisung gilt. Wählen Sie in der Dropdownliste die Option Ressourcengruppe aus.
    Subscription Dieses Feld sollte automatisch mit Ihrem Abonnement ausgefüllt werden.
    Ressourcengruppe Wählen Sie in der Dropdownliste die Ressourcengruppe aus, für die die Identitätsberechtigungen erteilt werden sollen.
    Rolle Wählen Sie in der Dropdownliste den Eintrag DevTest Labs-Benutzer aus.
  6. Wählen Sie Speichern aus, und schließen Sie dann die Seite Azure-Rollenzuweisungen, um zur Registerkarte Vom System zugewiesen zurückzukehren.

  7. Wählen Sie die Registerkarte Benutzerseitig zugewiesen aus.

  8. Wählen Sie in der Liste Ihre benutzerseitig zugewiesene verwaltete Identität aus, um die Seite Verwaltete Identität zu öffnen.

    Selecting user-assigned managed identity in portal.

  9. Notieren Sie die Client-ID zur späteren Verwendung.

    Showing Client ID for managed identity in portal

  10. Wählen Sie im linken Menü die Option Azure-Rollenzuweisungen und dann + Rollenzuweisung hinzufügen (Vorschau) aus, um die Seite Rollenzuweisung hinzufügen (Vorschau) zu öffnen.

    Add role assignments in portal for user-assigned identity.

  11. Wählen Sie die entsprechenden Werte aus.

    Eigenschaft Beschreibung
    `Scope` Wählen Sie in der Dropdownliste die Option Ressourcengruppe aus.
    Subscription Dieses Feld sollte automatisch mit Ihrem Abonnement ausgefüllt werden.
    Ressourcengruppe Wählen Sie in der Dropdownliste die Ressourcengruppe aus, für die die Identitätsberechtigungen erteilt werden sollen.
    Rolle Wählen Sie in der Dropdownliste den Eintrag DevTest Labs-Benutzer aus.
  12. Wählen Sie Speichern aus, und schließen Sie dann die Seite Azure-Rollenzuweisungen, um zur Registerkarte Vom Benutzer zugewiesen zurückzukehren.

Erstellen eines neuen Runbooks

Erstellen Sie zunächst ein einfaches PowerShell-Workflow-Runbook. Ein Vorteil von Windows PowerShell-Workflows besteht darin, dass sie einen Satz an Befehlen parallel – und nicht wie in einem typischen Skript sequenziell – ausführen können.

Hinweis

Mit dem Release hat die Runbookerstellung im Azure-Portal eine neue Qualität erhalten. Wenn Sie das Blatt Runbooks>Runbook erstellen auswählen, wird eine neue Seite Runbook erstellen mit den entsprechenden Optionen geöffnet.

  1. Wählen Sie auf Ihrer offenen Automation-Kontoseite unter Prozessautomatisierung die Option Runbooks aus.

    Create PowerShell workflow runbook from portal

  2. Wählen Sie + Runbook erstellen aus.

    1. Benennen Sie das Runbook. Beispiel: Test.
    2. Wählen Sie in der Dropdownliste Runbook-Typ den Wert PowerShell-Workflow aus.
    3. Wählen Sie in der Dropdownliste Runtimeversion die Version 5.1 aus.
    4. Geben Sie eine anwendbare Beschreibung ein.
    5. Klicken Sie auf Erstellen.

    PowerShell workflow runbook options from portal

Hinzufügen von Code zum Runbook

Sie können direkt Code in das Runbook eingeben, oder Sie wählen Cmdlets, Runbooks und Objekte im Bibliotheksteuerelement aus und fügen diese dem Runbook mit den zugehörigen Parametern hinzu. In diesem Tutorial geben Sie den Code direkt in das Runbook ein.

Ihr Runbook ist zurzeit leer und enthält lediglich das erforderliche Schlüsselwort Workflow, den Namen des Runbooks und die geschweiften Klammern, die den gesamten Workflow umschließen.

Workflow MyFirstRunbook-Workflow
{
}
  1. Sie können mit dem Schlüsselwort Parallel einen Skriptblock mit mehreren Befehlen erstellen, die gleichzeitig ausgeführt werden sollen. Geben Sie den folgenden Code zwischen den geschweiften Klammern ein:

    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. Wählen Sie Speichern aus, um das Runbook zu speichern.

Testen des Runbooks

Bevor Sie das Runbook für die Verwendung in der Produktionsumgebung veröffentlichen, sollten Sie es testen, um sicherzustellen, dass es ordnungsgemäß funktioniert. Beim Testen eines Runbooks führen Sie die Entwurfsversion aus und sehen sich interaktiv die Ausgabe an.

  1. Klicken Sie auf Testbereich, um die Seite Test zu öffnen.

  2. Wählen Sie die Option Starten aus, um den Test zu starten. Ein Runbookauftrag wird erstellt, und der zugehörige Status wird im Bereich angezeigt.

    Der Auftrag weist zunächst den Status „In Warteschlange“ auf, der angibt, dass der Auftrag darauf wartet, dass in der Cloud ein Runbook Worker verfügbar wird. Der Status ändert sich in „Wird gestartet“, wenn ein Worker den Auftrag beansprucht. Schließlich ändert sich der Status in „Wird ausgeführt“, wenn die Ausführung des Runbooks beginnt.

  3. Nach Abschluss des Runbookauftrags wird die Ausgabe auf der Seite Test angezeigt. Die Ausgabe sollte in etwa wie auf der folgenden Abbildung aussehen:

    PowerShell workflow runbook parallel output

    Überprüfen Sie die Ausgabe. Alles im Parallel-Block, einschließlich des Start-Sleep-Befehls, wurde gleichzeitig ausgeführt. Die gleichen Befehle außerhalb des Parallel-Blocks wurden sequenziell ausgeführt, wie die unterschiedlichen Datums-/Uhrzeitstempel zeigen.

  4. Schließen Sie die Seite Test, um zum Canvas-Panel zurückzukehren.

Veröffentlichen und Starten des Runbooks

Das erstellte Runbook befindet sich immer noch im Entwurfsmodus. Sie müssen das Runbook zuerst veröffentlichen, um es in der Produktionsumgebung ausführen zu können. Beim Veröffentlichen eines Runbooks wird die vorhandene veröffentlichte Version durch die Entwurfsversion überschrieben. In diesem Fall ist noch keine veröffentlichte Version vorhanden, da Sie das Runbook gerade erst erstellt haben.

  1. Klicken Sie auf Veröffentlichen, um das Runbook zu veröffentlichen, und bestätigen Sie den Vorgang mit Ja.

  2. Im Feld Status wird jetzt Veröffentlicht angezeigt. Beachten Sie die Optionen im oberen Bereich, mit denen Sie das Runbook jetzt starten, den Start für einen späteren Zeitpunkt planen oder einen Webhook erstellen können, um das Runbook über einen HTTP-Aufruf zu starten. Klicken Sie zum Starten des Runbooks auf Starten und anschließend auf Ja.

    PowerShell workflow runbook overview page

  3. Für den erstellten Runbookauftrag wird die Seite Auftrag geöffnet. Lassen Sie in diesem Fall die Seite geöffnet, damit Sie den Fortschritt des Auftrags beobachten können. Das Feld Status stimmt mit einem der Status überein, die Sie beim Testen des Runbooks gesehen haben.

    Screenshot of the runbook Job page.

  4. Wählen Sie die Option Ausgabe aus, wenn der Runbookstatus Abgeschlossen lautet. Die Ausgabe sollte ähnlich wie die Testausgabe aussehen.

  5. Schließen Sie die Seite Auftrag, um zur Übersichtsseite des Runbooks zurückzukehren.

  6. Wählen Sie unter Ressourcen die Option Aufträge aus. Auf dieser Seite werden alle von diesem Runbook erstellten Aufträge aufgeführt. Es sollte nur ein Auftrag aufgeführt sein, da Sie den Auftrag bislang erst einmal ausgeführt haben.

  7. Wählen Sie den Auftrag aus, um die Seite Auftrag zu öffnen, die auch beim Starten des Runbooks angezeigt wurde. Auf dieser Seite können Sie Details zu jedem Auftrag anzeigen, der für das Runbook erstellt wurde. Schließen Sie die Seite Auftrag, um zur Übersichtsseite des Runbooks zurückzukehren.

Hinzufügen von Authentifizierungsfunktionen für die Verwaltung von Azure-Ressourcen

Sie haben Ihr Runbook inzwischen zwar getestet und veröffentlicht, bislang ist es aber noch nicht sonderlich hilfreich. Sie möchten damit ja eigentlich Azure-Ressourcen verwalten. Dies ist nur möglich, wenn die Authentifizierung mit den Anmeldeinformationen für das Abonnement erfolgt. Das Runbook verwendet die systemseitig zugewiesene verwaltete Identität des Automation-Kontos für die Authentifizierung bei Azure, um die Verwaltungsaktion für die VM durchzuführen. Das Runbook kann problemlos geändert werden, um eine benutzerseitig zugewiesene verwaltete Identität zu verwenden.

  1. Wählen Sie Übersicht und dann Bearbeiten aus, um den Text-Editor zu öffnen.

  2. Ersetzen Sie den vorhandenen Code durch folgenden Code:

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

    Bearbeiten Sie die $resourceGroup-Variable mit einem gültigen Wert, der Ihre Ressourcengruppe darstellt.

  3. Wenn Sie möchten, dass das Runbook mit der systemseitig zugewiesenen verwalteten Identität ausgeführt wird, lassen Sie den Code unverändert. Wenn Sie lieber eine benutzerseitig zugewiesene verwaltete Identität verwenden möchten, gehen Sie wie folgt vor:

    1. Entfernen Sie Connect-AzAccount -Identity aus Zeile 9.
    2. Fügen Sie stattdessen Connect-AzAccount -Identity -AccountId <ClientId> ein.
    3. Geben Sie die zuvor abgerufene Client-ID ein.
  4. Wählen Sie Speichern und anschließend Testbereich aus.

  5. Wählen Sie die Option Starten aus, um den Test zu starten. Nach Abschluss des Tests sollte eine Ausgabe ähnlich der nachstehenden mit allgemeinen Informationen aus Ihrem Konto angezeigt werden. Diese Aktion bestätigt, dass die Anmeldeinformationen gültig sind.

    Basic information that confirms credentials.

  6. Schließen Sie die Seite Test, um zum Canvas-Panel zurückzukehren.

Hinzufügen von Code zum Starten eines virtuellen Computers

Nachdem das Runbook jetzt im Azure-Abonnement authentifiziert ist, können Sie Ressourcen verwalten. Fügen Sie einen Befehl zum Starten einer VM hinzu. Sie können eine beliebige VM in Ihrem Azure-Abonnement auswählen. Vorerst geben Sie diesen Namen im Runbook fest ein.

  1. Fügen Sie den folgenden Code als letzte Zeile unmittelbar vor der schließenden geschweiften Klammer hinzu. Ersetzen Sie VMName durch den tatsächlichen Namen einer VM.

    Start-AzVM -Name "VMName" -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
    
  2. Testen Sie das Runbook, und vergewissern Sie sich, dass die VM gestartet wurde. Kehren Sie dann zum Canvas-Panel zurück.

Fügen Sie dem Runbook Eingabeparameter hinzu.

Ihr Runbook startet derzeit die im Runbook hartcodierte VM. Es ist nützlicher, wenn Sie die VM beim Start des Runbooks angeben können. Fügen Sie zu diesem Zweck dem Runbook Eingabeparameter hinzu.

  1. Ersetzen Sie Zeile 3, $resourceGroup = "resourceGroupName", durch folgenden Code:

    Param(
        [string]$resourceGroup,
        [string]$VMName
    )
    
  2. Ersetzen Sie den vorherigen Start-AzVM-Befehl durch den folgenden Befehl:

    Start-AzVM -Name $VMName -ResourceGroupName $resourceGroup -DefaultProfile $AzureContext
    
  3. Testen Sie das Runbook, und vergewissern Sie sich, dass die VM gestartet wurde. Kehren Sie dann zum Canvas-Panel zurück.

Gleichzeitiges Verwalten mehrerer VMs

Sie können das Konstrukt ForEach -Parallel verwenden, um Befehle für jedes Element in einer Auflistung gleichzeitig zu verarbeiten. Überarbeiten Sie den Code so, dass das Runbook jetzt:

  • eine Sammlung von Namen virtueller Maschinen akzeptiert,
  • einen Parameter zum Beenden oder Starten der VMs akzeptiert und
  • die Aktionen für alle VMs parallel ausführt.
  1. Ersetzen Sie den gesamten vorhandenen Code durch den folgenden:

    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. Wenn Sie möchten, dass das Runbook mit der systemseitig zugewiesenen verwalteten Identität ausgeführt wird, lassen Sie den Code unverändert. Wenn Sie lieber eine benutzerseitig zugewiesene verwaltete Identität verwenden möchten, gehen Sie wie folgt vor:

    1. Entfernen Sie Connect-AzAccount -Identity aus Zeile 9.
    2. Fügen Sie stattdessen Connect-AzAccount -Identity -AccountId <ClientId> ein.
    3. Geben Sie die zuvor abgerufene Client-ID ein.
  3. Wählen Sie Speichern, dann Veröffentlichen und dann Ja, wenn Sie dazu aufgefordert werden.

  4. Wählen Sie auf der Seite Übersicht die Option Starten aus.

  5. Geben Sie die Parameter an, und wählen Sie dann OK aus.

    Parameter BESCHREIBUNG
    RESOURCEGROUP Geben Sie den Namen der Ressourcengruppe der VMs ein.
    VMs Geben Sie die Namen der VMs mit der folgenden Syntax ein: ["VM1","VM2","VM3"]
    Aktion Geben Sie stop oder start ein.
  6. Navigieren Sie zu Ihrer VM-Liste, und aktualisieren Sie die Seite alle paar Sekunden. Beachten Sie, dass die Aktion für jede VM parallel erfolgt. Ohne das -Parallel-Schlüsselwort wären die Aktionen sequenziell ausgeführt worden. Während die VMs sequenziell gestartet werden, kann jede VM die Ausführungsphase je nach den Merkmalen der einzelnen VMs zu etwas anderen Zeiten erreichen.

Bereinigen von Ressourcen

Falls Sie dieses Runbook nicht weiterverwenden möchten, sollten Sie es wie folgt löschen:

  1. Navigieren Sie zu Ihrem Automation-Konto.
  2. Wählen Sie unter Prozessautomatisierung die Option Runbooks aus.
  3. Wählen Sie das Runbook aus.
  4. Wählen Sie auf der Übersichtsseite des Runbooks die Option Löschen aus.

Nächste Schritte

In diesem Tutorial haben Sie ein PowerShell-Workflow-Runbook erstellt. Informationen zu Python 3-Runbooks finden Sie unter folgendem Link: