Runbooks beheren in Azure Automation

U kunt een runbook toevoegen aan Azure Automation door een nieuw runbook te maken of een bestaand runbook te importeren uit een bestand of de Runbook Gallery. Dit artikel bevat informatie over het beheren van een runbook en aanbevolen patronen en aanbevolen procedures met runbookontwerp. U vindt alle details over het openen van community-runbooks en -modules in runbook- en modulegalerieën voor Azure Automation.

Een runbook maken

Maak een nieuw runbook in Azure Automation met behulp van Azure Portal of PowerShell. Zodra het runbook is gemaakt, kunt u het bewerken met behulp van informatie in:

Een runbook maken in de Azure Portal

  1. Meld u aan bij de Azure Portal.
  2. Zoek en selecteer Automation-accounts.
  3. Selecteer op de pagina Automation-accounts uw Automation-account in de lijst.
  4. Selecteer in het Automation-account Runbooks onder Procesautomatisering om de lijst met runbooks te openen.
  5. Klik op Een runbook maken.
    1. Noem het runbook.
    2. In de vervolgkeuzelijst Runbooktype. Selecteer het type. De runbooknaam moet beginnen met een letter en kan letters, cijfers, onderstrepingstekens en streepjes bevatten
    3. Selecteer de Runtime-versie
    4. Voer de toepasselijke beschrijving in
  6. Klik op Maken om het runbook te maken.

Een runbook maken met PowerShell

Gebruik de cmdlet New-AzAutomationRunbook om een leeg runbook te maken. Gebruik de Type parameter om een van de runbooktypen op te geven die zijn gedefinieerd voor New-AzAutomationRunbook .

In het volgende voorbeeld ziet u hoe u een nieuw leeg runbook maakt.

$params = @{
    AutomationAccountName = 'MyAutomationAccount'
    Name                  = 'NewRunbook'
    ResourceGroupName     = 'MyResourceGroup'
    Type                  = 'PowerShell'
}
New-AzAutomationRunbook @params

Een runbook importeren

U kunt een PowerShell- of **** PowerShell Workflow(.ps1)-script, een grafisch runbook (.graphrunbook) of een Python 2- of Python 3-script (.py) importeren om uw eigen runbook te maken. U geeft het type runbook op dat tijdens het importeren wordt gemaakt, waarbij u rekening houdt met de volgende overwegingen.

  • U kunt een.ps1-bestand dat geen werkstroom bevat, importeren in een PowerShell-runbook of een PowerShell Workflow-runbook. Als u het in een PowerShell Workflow-runbook importeert, wordt het geconverteerd naar een werkstroom. In dit geval worden opmerkingen opgenomen in het runbook om de aangebrachte wijzigingen te beschrijven.

  • U kunt alleen een .ps1 met een PowerShell Workflow importeren in een PowerShell Workflow-runbook. Als het bestand meerdere PowerShell-werkstromen bevat, mislukt het importeren. U moet elke werkstroom opslaan in een eigen bestand en elke werkstroom afzonderlijk importeren.

  • Importeer geen .ps1-bestand met een PowerShell Workflow in een PowerShell-runbook,omdat de PowerShell-scripten engine dit niet kan herkennen.

  • Importeer alleen een .graphrunbook-bestand in een nieuw grafisch runbook.

Een runbook importeren uit de Azure Portal

U kunt de volgende procedure gebruiken om een scriptbestand te importeren in Azure Automation.

Notitie

U kunt alleen een.ps1 importeren in een PowerShell Workflow-runbook via de portal.

  1. Zoek en Azure Portal Automation-accounts in de Azure Portal.
  2. Selecteer op de pagina Automation-accounts uw Automation-account in de lijst.
  3. Selecteer in het Automation-account Runbooks onder Procesautomatisering om de lijst met runbooks te openen.
  4. Klik op Een runbook importeren. U kunt een van de volgende opties selecteren:
    1. Bladeren naar bestand: selecteert een bestand op uw lokale computer.
    2. Bladeren vanuit Galerie: u kunt een bestaand runbook in de galerie zoeken en selecteren.
  5. Selecteer het bestand.
  6. Als het veld Naam is ingeschakeld, kunt u de naam van het runbook wijzigen. De naam moet beginnen met een letter en mag letters, cijfers, onderstrepingstekens en streepjes bevatten.
  7. Het runbooktype wordt automatisch ingevuld, maar u kunt het type wijzigen nadat u rekening hebt gehouden met de toepasselijke beperkingen.
  8. De Runtime-versie wordt automatisch ingevuld of u kiest de versie in de vervolgkeuzelijst.
  9. Klik op Import. Het nieuwe runbook wordt weergegeven in de lijst met runbooks voor het Automation-account.
  10. U moet het runbook publiceren voordat u het kunt uitvoeren.

Notitie

Nadat u een grafisch runbook hebt geïmporteerd, kunt u dit converteren naar een ander type. U kunt een grafisch runbook echter niet converteren naar een tekstueel runbook.

Een runbook importeren met PowerShell

Gebruik de cmdlet Import-AzAutomationRunbook om een scriptbestand als conceptrunbook te importeren. Als het runbook al bestaat, mislukt het importeren, tenzij u de Force parameter gebruikt met de cmdlet .

In het volgende voorbeeld ziet u hoe u een scriptbestand in een runbook importeert.

$params = @{
    AutomationAccountName = 'MyAutomationAccount'
    Name                  = 'Sample_TestRunbook'
    ResourceGroupName     = 'MyResourceGroup'
    Type                  = 'PowerShell'
    Path                  = 'C:\Runbooks\Sample_TestRunbook.ps1'
}
Import-AzAutomationRunbook @params

Resources verwerken

Als uw runbook een resource maakt,moet het script controleren of de resource al bestaat voordat u deze probeert te maken. Hier is een eenvoudig voorbeeld.

$vmName = 'WindowsVM1'
$rgName = 'MyResourceGroup'
$myCred = Get-AutomationPSCredential 'MyCredential'

$vmExists = Get-AzResource -Name $vmName -ResourceGroupName $rgName
if (-not $vmExists) {
    Write-Output "VM $vmName does not exist, creating"
    New-AzVM -Name $vmName -ResourceGroupName $rgName -Credential $myCred
} else {
    Write-Output "VM $vmName already exists, skipping"
}

Details ophalen uit activiteitenlogboek

U kunt runbookgegevens, zoals de persoon of het account die een runbook heeft gestart, ophalen uit het activiteitenlogboek voor het Automation-account. Het volgende PowerShell-voorbeeld bevat de laatste gebruiker die het opgegeven runbook heeft uitgevoerd.

$rgName = 'MyResourceGroup'
$accountName = 'MyAutomationAccount'
$runbookName = 'MyRunbook'
$startTime = (Get-Date).AddDays(-1)

$params = @{
    ResourceGroupName = $rgName
    StartTime         = $startTime
}
$JobActivityLogs = (Get-AzLog @params).Where( { $_.Authorization.Action -eq 'Microsoft.Automation/automationAccounts/jobs/write' })

$JobInfo = @{}
foreach ($log in $JobActivityLogs) {
    # Get job resource
    $JobResource = Get-AzResource -ResourceId $log.ResourceId

    if ($null -eq $JobInfo[$log.SubmissionTimestamp] -and $JobResource.Properties.Runbook.Name -eq $runbookName) {
        # Get runbook
        $jobParams = @{
            ResourceGroupName     = $rgName
            AutomationAccountName = $accountName
            Id                    = $JobResource.Properties.JobId
        }
        $Runbook = Get-AzAutomationJob @jobParams | Where-Object RunbookName -EQ $runbookName

        # Add job information to hashtable
        $JobInfo.Add($log.SubmissionTimestamp, @($Runbook.RunbookName, $Log.Caller, $JobResource.Properties.jobId))
    }
}
$JobInfo.GetEnumerator() | Sort-Object Key -Descending | Select-Object -First 1

Voortgang bijhouden

Het is een goed idee om uw runbooks modulair van aard te maken, met logica die eenvoudig opnieuw kan worden gebruikt en opnieuw kan worden opgestart. Het bijhouden van de voortgang in een runbook zorgt ervoor dat de runbooklogica correct wordt uitgevoerd als er problemen zijn.

U kunt de voortgang van een runbook volgen met behulp van een externe bron, zoals een opslagaccount, een database of gedeelde bestanden. Maak logica in uw runbook om eerst de status van de laatste ondernomen actie te controleren. Op basis van de resultaten van de controle kan de logica specifieke taken in het runbook overslaan of doorgaan.

Gelijktijdige taken voorkomen

Sommige runbooks gedragen zich vreemd als ze op meerdere taken tegelijk worden uitgevoerd. In dit geval is het belangrijk dat een runbook logica implementeert om te bepalen of er al een taak wordt uitgevoerd. Hier is een eenvoudig voorbeeld.

# 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

# Check for already running or new runbooks
$runbookName = "runbookName"
$resourceGroupName = "resourceGroupName"
$automationAccountName = "automationAccountName"

$jobs = Get-AzAutomationJob -ResourceGroupName $resourceGroupName `
    -AutomationAccountName $automationAccountName `
    -RunbookName $runbookName `
    -DefaultProfile $AzureContext

# Check to see if it is already running
$runningCount = ($jobs.Where( { $_.Status -eq 'Running' })).count

if (($jobs.Status -contains 'Running' -and $runningCount -gt 1 ) -or ($jobs.Status -eq 'New')) {
    # Exit code
    Write-Output "Runbook $runbookName is already running"
    exit 1
} else {
    # Insert Your code here
    Write-Output "Runbook $runbookName is not running"
}

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

  1. Verwijder vanaf regel 5, $AzureContext = (Connect-AzAccount -Identity).context ,
  2. Vervang deze door $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context , en
  3. Voer de client-id in.

Tijdelijke fouten in een tijdafhankelijk script verwerken

Uw runbooks moeten robuust zijn en fouten kunnen verwerken,met inbegrip van tijdelijke fouten die ertoe kunnen leiden dat ze opnieuw worden opgestart of mislukken. Als een runbook uitvalt, Azure Automation het opnieuw proberen.

Als uw runbook normaal gesproken binnen een tijdsbeperking wordt uitgevoerd, laat u het script logica implementeren om de uitvoeringstijd te controleren. Deze controle zorgt ervoor dat bewerkingen zoals opstarten, afsluiten of uitschalen alleen op specifieke tijdstippen worden uitgevoerd.

Notitie

De lokale tijd in het Azure-sandboxproces is ingesteld op UTC. Berekeningen voor datum en tijd in uw runbooks moeten rekening houden met dit feit.

Met meerdere abonnementen werken

Uw runbook moet kunnen werken met abonnementen. Als u bijvoorbeeld meerdere abonnementen wilt verwerken, gebruikt het runbook de cmdlet Disable-AzContextAutosave. Deze cmdlet zorgt ervoor dat de verificatiecontext niet wordt opgehaald uit een ander runbook dat in dezelfde sandbox wordt uitgevoerd.

# 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

$childRunbookName = 'childRunbookDemo'
$resourceGroupName = "resourceGroupName"
$automationAccountName = "automationAccountName"

$startParams = @{
    ResourceGroupName     = $resourceGroupName
    AutomationAccountName = $automationAccountName
    Name                  = $childRunbookName
    DefaultProfile        = $AzureContext
}
Start-AzAutomationRunbook @startParams

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

  1. Verwijder vanaf regel 5, $AzureContext = (Connect-AzAccount -Identity).context ,
  2. Vervang deze door $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context , en
  3. Voer de client-id in.

Werken met een aangepast script

Notitie

Normaal gesproken kunt u geen aangepaste scripts en runbooks uitvoeren op de host met een Log Analytics-agent geïnstalleerd.

Een aangepast script gebruiken:

  1. Maak een Automation-account.
  2. Implementeer de Hybrid Runbook Worker rol.
  3. Als u een Linux-computer gebruikt, hebt u verhoogde bevoegdheden nodig. Meld u aan om handtekeningcontroles uit te schakelen.

Een runbook testen

Wanneer u een runbook test, wordt de conceptversie uitgevoerd en worden alle acties voltooid die worden uitgevoerd. Er wordt geen taakgeschiedenis gemaakt, maar de uitvoer- en waarschuwings- en foutstromen worden weergegeven in het deelvenster Testuitvoer. Berichten naar de uitgebreide stroom worden alleen weergegeven in het deelvenster Uitvoer als de variabele VerbosePreference is ingesteld op Continue .

Hoewel de Concept-versie wordt uitgevoerd, wordt het runbook nog steeds normaal uitgevoerd en worden acties uitgevoerd op resources in de omgeving. Daarom moet u runbooks alleen testen op niet-productiebronnen.

De procedure voor het testen van elk type runbook is hetzelfde. Er is geen verschil in het testen tussen de teksteditor en de grafische editor in de Azure Portal.

  1. Open de Concept-versie van het runbook in de teksteditor of de grafische editor.
  2. Klik op Testen om de pagina Testen te openen.
  3. Als het runbook parameters bevat, worden deze weergegeven in het linkerdeelvenster, waar u waarden kunt opgeven die voor de test moeten worden gebruikt.
  4. Als u de test wilt uitvoeren op een Hybrid Runbook Worker,wijzigt u Run Instellingen in Hybrid Worker en selecteert u de naam van de doelgroep. Laat anders de azure-standaardwaarde staan om de test uit te voeren in de cloud.
  5. Klik op Start om de test te starten.
  6. U kunt de knoppen onder het deelvenster Uitvoer gebruiken om een PowerShell-werkstroom of grafisch runbook te stoppen of op te schorten terwijl het wordt getest. Wanneer u het runbook onderbreekt, wordt de huidige activiteit voltooid voordat het runbook wordt onderbroken. Als het runbook is onderbroken, kunt u het stoppen of opnieuw starten.
  7. Inspecteer de uitvoer van het runbook in het deelvenster Uitvoer.

Een runbook publiceren

Wanneer u een nieuw runbook maakt of importeert, moet u het publiceren voordat u het kunt uitvoeren. Elk runbook in Azure Automation heeft een conceptversie en een gepubliceerde versie. Alleen de gepubliceerde versie is beschikbaar om te worden uitgevoerd en alleen de conceptversie kan worden bewerkt. De gepubliceerde versie wordt niet beïnvloed door wijzigingen in de conceptversie. Wanneer de conceptversie beschikbaar moet worden gesteld, publiceert u deze en overschrijft u de huidige gepubliceerde versie met de conceptversie.

Een runbook publiceren in de Azure Portal

  1. Zoek en Azure Portal Automation-accounts in de Azure Portal.
  2. Selecteer op de pagina Automation-accounts uw Automation-account in de lijst.
  3. Open het runbook in uw Automation-account.
  4. Klik op Bewerken.
  5. Klik op Publiceren en selecteer vervolgens Ja als reactie op het verificatiebericht.

Een runbook publiceren met Behulp van PowerShell

Gebruik de cmdlet Publish-AzAutomationRunbook om uw runbook te publiceren.

$accountName = "MyAutomationAccount"
$runbookName = "Sample_TestRunbook"
$rgName = "MyResourceGroup"

$publishParams = @{
    AutomationAccountName = $accountName
    ResourceGroupName     = $rgName
    Name                  = $runbookName
}
Publish-AzAutomationRunbook @publishParams

Een runbook inplannen in Azure Portal

Wanneer uw runbook is gepubliceerd, kunt u dit plannen voor bewerking:

  1. Zoek en Azure Portal Automation-accounts in de Azure Portal.
  2. Selecteer op de pagina Automation-accounts uw Automation-account in de lijst.
  3. Selecteer het runbook in de lijst met runbooks.
  4. Selecteer Schema's onder Resources.
  5. Selecteer Een schema toevoegen.
  6. Selecteer in het deelvenster Runbook plannen de optie Een planning aan uw runbook koppelen.
  7. Kies Een nieuwe planning maken in het deelvenster Planning.
  8. Voer een naam, beschrijving en andere parameters in het deelvenster Nieuwe planning in.
  9. Zodra de planning is gemaakt, markeert u deze en klikt u op OK. Deze moet nu worden gekoppeld aan uw runbook.
  10. Zoek een e-mailbericht in uw postvak om u op de hoogte te stellen van de status van het runbook.

Taakstatussen verkrijgen

Statussen in de Azure Portal

Details van de taakafhandeling in Azure Automation zijn te vinden in Taken. Wanneer u klaar bent om uw runbooktaken te zien, gebruikt u Azure Portal en hebt u toegang tot uw Automation-account. Aan de rechterkant ziet u een overzicht van alle runbooktaken in Taakstatistieken.

Tegel Taakstatistieken

In de samenvatting ziet u een telling en grafische weergave van de taakstatus voor elke uitgevoerde taak.

Als u op de tegel klikt, wordt de pagina Taken weergegeven, met een overzicht van alle taken die worden uitgevoerd. Op deze pagina worden de status, de naam van het runbook, de begintijd en de voltooiingstijd voor elke taak weergegeven.

Schermopname van de pagina Taken.

U kunt de lijst met taken filteren door Taken filteren te selecteren. Filter op een specifiek runbook, taakstatus of een keuze uit de vervolgkeuzelijst en geef het tijdsbereik voor de zoekopdracht op.

Taakstatus filteren

U kunt ook de details van het taakoverzicht voor een specifiek runbook bekijken door dat runbook te selecteren op de pagina Runbooks in uw Automation-account en vervolgens Taken te selecteren. Met deze actie wordt de pagina Taken weergegeven. Hier kunt u op een taakrecord klikken om de details en uitvoer ervan weer te geven.

Schermopname van de pagina Taken met de knop Fouten gemarkeerd.

Taakstatussen ophalen met Behulp van PowerShell

Gebruik de cmdlet Get-AzAutomationJob om de taken op te halen die zijn gemaakt voor een runbook en de details van een bepaalde taak. Als u een runbook start met Start-AzAutomationRunbook behulp van , wordt de resulterende taak retourneert. Gebruik Get-AzAutomationJobOutput om taakuitvoer op te halen.

In het volgende voorbeeld wordt de laatste taak voor een voorbeeldrunbook opgenomen en worden de status, de opgegeven waarden voor de runbookparameters en de taakuitvoer weergegeven.

$getJobParams = @{
    AutomationAccountName = 'MyAutomationAccount'
    ResourceGroupName     = 'MyResourceGroup'
    Runbookname           = 'Test-Runbook'
}
$job = (Get-AzAutomationJob @getJobParams | Sort-Object LastModifiedDate -Desc)[0]
$job | Select-Object JobId, Status, JobParameters

$getOutputParams = @{
    AutomationAccountName = 'MyAutomationAccount'
    ResourceGroupName     = 'MyResourceGroup'
    Id                    = $job.JobId
    Stream                = 'Output'
}
Get-AzAutomationJobOutput @getOutputParams

In het volgende voorbeeld wordt de uitvoer voor een specifieke taak opgehaald en wordt elke record opgehaald. Als er een uitzondering is voor een van de records, schrijft het script de uitzondering in plaats van de waarde . Dit gedrag is handig omdat uitzonderingen aanvullende informatie kunnen bieden die mogelijk niet normaal wordt geregistreerd tijdens de uitvoer.

$params = @{
    AutomationAccountName = 'MyAutomationAccount'
    ResourceGroupName     = 'MyResourceGroup'
    Stream                = 'Any'
}
$output = Get-AzAutomationJobOutput @params

foreach ($item in $output) {
    $jobOutParams = @{
        AutomationAccountName = 'MyAutomationAccount'
        ResourceGroupName     = 'MyResourceGroup'
        Id                    = $item.StreamRecordId
    }
    $fullRecord = Get-AzAutomationJobOutputRecord @jobOutParams

    if ($fullRecord.Type -eq 'Error') {
        $fullRecord.Value.Exception
    } else {
        $fullRecord.Value
    }
}

Volgende stappen