Zelfstudie: Een PowerShell Workflow-runbook maken in Automation
In deze zelfstudie wordt stap voor stap het maken van een PowerShell Workflow-runbook in Azure Automation beschreven. PowerShell Workflow-runbooks zijn tekstrunbooks op basis van Windows PowerShell Workflow. U kunt de code van het runbook maken en bewerken met de teksteditor in de Azure-portal.
Notitie
Dit artikel is van toepassing op PowerShell 5.1; PowerShell 7.1 (preview) biedt geen ondersteuning voor werkstromen.
In deze zelfstudie leert u het volgende:
- Een PowerShell Workflow-runbook maken
- Het runbook testen en publiceren
- De status van de runbooktaak uitvoeren en bijhouden
- Verificatie toevoegen voor het beheren van Azure-resources
- De runbookparameters bijwerken om een virtuele Azure-machine te starten
Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.
Vereisten
- Een Azure Automation account met ten minste één door de gebruiker toegewezen beheerde identiteit. Zie Beheerde identiteit inschakelen voor meer informatie.
- Az-modules:
Az.Accountsen geïmporteerd in hetAz.ComputeAutomation-account. Zie Az-modules importeren voor meer informatie. - Twee of meer virtuele Azure-machines. Omdat u deze machines stopt en start, mogen dit geen productie-VM's zijn.
- De Azure Az PowerShell-module die op uw computer is geïnstalleerd. Zie De Azure Az PowerShell-moduleinstalleren als u wilt installeren of upgraden.
Machtigingen toewijzen aan beheerde identiteiten
Wijs machtigingen toe aan de juiste beheerde identiteit zodat deze een virtuele machine kan stoppen. Het runbook kan gebruikmaken van de door het Automation-accountsysteem toegewezen beheerde identiteit of een door de gebruiker toegewezen beheerde identiteit. Er worden stappen gegeven voor het toewijzen van machtigingen aan elke identiteit. In de onderstaande stappen wordt de Azure Portal. Als u liever PowerShell gebruikt, zie Azure-rollen toewijzen met behulp van Azure PowerShell.
Meld u aan bij Azure Portal en navigeer naar uw Automation-account.
Selecteer onder Account Instellingen identiteit (preview).
Selecteer op het tabblad Systeem toegewezen onder Machtigingen de optie Azure-roltoewijzingen om de pagina Azure-roltoewijzingen te openen.
Selecteer + Roltoewijzing toevoegen (preview) om de pagina Roltoewijzing toevoegen (preview) te openen.
Selecteer de juiste waarden.
Eigenschap Beschrijving Bereik Bereik is een set resources op welke roltoewijzing van toepassing is. Selecteer Resourcegroep in de vervolgkeuzelijst. Abonnement Dit veld moet automatisch worden ingevuld met uw abonnement. Resourcegroep Selecteer in de vervolgkeuzelijst de resourcegroep die u de identiteitsmachtigingen wilt geven. Rol Selecteer in de vervolgkeuzelijst DevTest Labs-gebruiker. Selecteer Opslaan en sluit vervolgens de pagina Azure-roltoewijzingen om terug te keren naar het tabblad Systeem toegewezen.
Selecteer het tabblad Door de gebruiker toegewezen.
Selecteer uw door de gebruiker toegewezen beheerde identiteit in de lijst om de pagina Beheerde identiteit te openen.
Noteer de client-id voor later gebruik.
Selecteer in het menu links Azure-roltoewijzingen en vervolgens + Roltoewijzing toevoegen (preview) om de pagina Roltoewijzing toevoegen (preview) te openen.
Selecteer de juiste waarden.
Eigenschap Beschrijving Bereik Selecteer Resourcegroep in de vervolgkeuzelijst. Abonnement Dit veld moet automatisch worden ingevuld met uw abonnement. Resourcegroep Selecteer in de vervolgkeuzelijst de resourcegroep die u de identiteitsmachtigingen wilt geven. Rol Selecteer in de vervolgkeuzelijst DevTest Labs-gebruiker. Selecteer Opslaan en sluit vervolgens de pagina Azure-roltoewijzingen om terug te keren naar het tabblad Door de gebruiker toegewezen.
Nieuw runbook maken
Begin met het maken van een eenvoudig PowerShell Workflow-runbook. Een voordeel van Windows PowerShell-werkstromen is de mogelijkheid om een reeks opdrachten parallel uit te voeren in plaats van opeenvolgend zoals bij een typische script.
Notitie
Het maken van releaserunbook heeft een nieuwe ervaring in de Azure Portal. Wanneer u de blade Runbooks selecteert > een runbook maken, wordt een nieuwe pagina Een runbook maken geopend met de toepasselijke opties.
Selecteer op uw geopende Automation-accountpagina onder Procesautomatisering de optie Runbooks
Selecteer + Een runbook maken.
- Noem het runbook. Test bijvoorbeeld.
- Selecteer PowerShell in de vervolgkeuzelijst Runbooktype.
- Selecteer 5.1 in de vervolgkeuze voor runtimeversie.
- Voer de toepasselijke beschrijving in.
- Selecteer Maken.
Code toevoegen aan het runbook
U kunt de code rechtstreeks in het runbook typen of u kunt cmdlets, runbooks en assets selecteren in het besturingselement Bibliotheek en deze toevoegen aan het runbook met eventuele gerelateerde parameters. In deze zelfstudie typt u de code rechtstreeks in het runbook.
Uw runbook is momenteel leeg met alleen het vereiste Workflow-trefwoord, de naam van het runbook en de accolades die de volledige werkstroom omsluiten.
Workflow MyFirstRunbook-Workflow
{
}
U kunt het
Paralleltrefwoord gebruiken om een scriptblok te maken met meerdere opdrachten die gelijktijdig worden uitgevoerd. Voer de volgende code tussen de accolades in: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-DateSla het runbook op door Opslaan te selecteren.
Het runbook testen
Voordat u het runbook publiceert om het beschikbaar te maken in productie, moet u het testen om er zeker van te zijn dat het goed werkt. Wanneer u een runbook test, wordt de conceptversie uitgevoerd en kunt u de uitvoer interactief bekijken.
Selecteer Testvenster om de pagina Testen te openen.
Selecteer Start om de test te starten. Er wordt een runbook-taak gemaakt en de status ervan wordt weergegeven in het deelvenster.
In eerste instantie is de taakstatus 'In de wachtrij geplaatst'. Hiermee wordt aangegeven dat de taak wacht op tot er een runbook worker in de cloud beschikbaar is. De status verandert naar 'Wordt gestart' wanneer de taak wordt geclaimd door een worker. Ten slotte verandert de status naar 'Wordt uitgevoerd' wanneer de runbook daadwerkelijk wordt uitgevoerd.
Wanneer de runbook-taak is voltooid, wordt de uitvoer weergegeven op de pagina Testen. De uitvoer moet er ongeveer uitzien als in de volgende afbeelding:
Controleer de uitvoer. Alles in
Parallelhet blok, inclusief deStart-Sleepopdracht, wordt tegelijkertijd uitgevoerd. Dezelfde opdrachten buiten hetParallelblok werden opeenvolgend gedaan, zoals wordt weergegeven door de verschillende datum/tijd-zegels.Sluit de pagina Testen om terug te keren naar het canvas.
Het runbook publiceren en starten
De runbook die u hebt gemaakt, bevindt zich nog steeds in de modus Concept. U moet het publiceren voordat u het in productie kunt uitvoeren. Wanneer u een runbook publiceert, overschrijft u de bestaande gepubliceerde versie met de conceptversie. In dit geval hebt u nog geen gepubliceerde versie omdat het runbook zojuist is gemaakt.
Selecteer Publiceren om het runbook te publiceren en vervolgens Ja wanneer hierom wordt gevraagd.
In het veld Status wordt nu Gepubliceerd. Bekijk de opties bovenaan waarmee u het runbook nu kunt starten, een toekomstige starttijd kunt plannen of een webhook kunt maken zodat het runbook kan worden gestart via een HTTP-aanroep. Selecteer Starten en vervolgens Ja wanneer gevraagd wordt om het runbook te starten.
Er wordt een taakpagina geopend voor de runbook-taak die is gemaakt. Laat in dit geval de pagina geopend zodat u de voortgang van de taak kunt bekijken. Het veld Status komt overeen met de statussen die u hebt gezien bij het testen van het runbook.
Zodra voor het runbook de status Voltooid wordt weergegeven, klikt u op Uitvoer. De uitvoer moet er ongeveer uitzien als de testuitvoer.
Sluit de pagina Taak om terug te keren naar de overzichtspagina van het runbook.
Selecteer onder Resources de optie Taken. Op deze pagina worden alle taken weergegeven die door uw runbook zijn gemaakt. U zou slechts één taak moeten zien, aangezien u de taak slechts eenmaal hebt uitgevoerd.
Selecteer de taak om dezelfde taakpagina te openen die u hebt bekeken toen u het runbook hebt gestart. Gebruik deze pagina om de details weer te geven van een taak die voor het runbook is gemaakt. Sluit de pagina Taak om terug te keren naar de overzichtspagina van het runbook.
Verificatie toevoegen voor het beheren van Azure-resources
U hebt het runbook getest en gepubliceerd, maar tot nu toe doet het nog niets nuttigs. U wilt dat er Azure-resources mee worden beheerd. Dat gaat niet zonder verificatie met de referenties voor het abonnement. Het runbook gebruikt de door het systeem toegewezen beheerde identiteit van het Automation-account om te verifiëren bij Azure om de beheeractie uit te voeren op de VM. Het runbook kan eenvoudig worden gewijzigd om een door de gebruiker toegewezen beheerde identiteit te gebruiken.
Selecteer Overzicht en vervolgens Bewerken om de teksteditor te openen.
Vervang alle bestaande code door het volgende:
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 }Bewerk
$resourceGroupde variabele met een geldige waarde die uw resourcegroep vertegenwoordigt.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:
- Verwijder vanaf regel 9,
$AzureContext = (Connect-AzAccount -Identity).context, - Vervang deze door
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context, en - Voer de client-id in die u eerder hebt verkregen.
- Verwijder vanaf regel 9,
Selecteer Opslaan en vervolgens Testvenster.
Selecteer Start om de test te starten. Zodra deze is voltooid, ziet u uitvoer zoals hieronder afgebeeld, met basisinformatie van uw account. Deze actie bevestigt dat de referentie geldig is.
Sluit de pagina Testen om terug te keren naar het canvas.
Code toevoegen om een virtuele machine te starten
Nu uw runbook verifieert voor het Azure-abonnement, kunt u resources beheren. Voeg een opdracht toe om een virtuele machine te starten. U kunt elke VM in uw Azure-abonnement selecteren. Voorlopig hardcodeert u de naam hiervan in het runbook.
Voeg de onderstaande code toe als de laatste regel direct vóór de afsluitende accolade. Vervang
VMNamedoor de werkelijke naam van een VM.Start-AzVM -Name "VMName" -ResourceGroupName $resourceGroup -DefaultProfile $AzureContextTest het runbook en controleer of de VM is gestart. Ga vervolgens terug naar het canvas.
Invoerparameters toevoegen aan het runbook
Uw runbook start momenteel de VM die u in het runbook hebt gecodeerd. Het is handiger om de VM op te geven wanneer het runbook wordt gestart. Voeg invoerparameters toe aan het runbook om die functionaliteit te bieden.
Vervang regel 3,
$resourceGroup = "resourceGroupName", door het volgende:Param( [string]$resourceGroup, [string]$VMName )Vervang de vorige
Start-AzVMopdracht door het volgende:Start-AzVM -Name $VMName -ResourceGroupName $resourceGroup -DefaultProfile $AzureContextTest het runbook en controleer of de VM is gestart. Ga vervolgens terug naar het canvas.
Meerdere VM's tegelijk beheren
U kunt de ForEach -Parallel -constructie gebruiken om opdrachten voor elk item in een verzameling gelijktijdig te verwerken. Wijzig de code zodat het runbook nu:
- Accepteer een verzameling namen van virtuele machines,
- Accepteer een parameter om de virtuele machines te stoppen of te starten, en
- De acties parallel uitvoeren op alle virtuele machines
Vervang alle bestaande code door het volgende:
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'." } }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:
- Verwijder vanaf regel 13,
$AzureContext = (Connect-AzAccount -Identity).context, - Vervang deze door
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context, en - Voer de client-id in die u eerder hebt verkregen.
- Verwijder vanaf regel 13,
Selecteer Opslaan, vervolgens Publiceren en vervolgens Ja wanneer u hier om wordt gevraagd.
Selecteer op de pagina Overzicht de optie Starten.
Vul de parameters in en selecteer OK.
Parameter Beschrijving RESOURCEGROUP Voer de naam van de resourcegroep van de VM's in. VM's Voer de namen van de virtuele machines in met behulp van de volgende syntaxis: ["VM1","VM2","VM3"]Actie Voer stopofstartin.Navigeer naar de lijst met virtuele machines en vernieuw de pagina om de paar seconden. U ziet dat de actie voor elke VM parallel wordt uitgevoerd. Zonder het
-Paralleltrefwoord zouden de acties opeenvolgend zijn uitgevoerd. Hoewel de VM's opeenvolgend starten, kan elke VM de fase Wordt uitgevoerd op iets verschillende tijdstippen bereiken op basis van de kenmerken van elke VM.
Resources opschonen
Als u dit runbook verder niet gaat gebruiken, verwijdert u het door de volgende stappen uit te voeren:
- Navigeer naar uw Automation-account.
- Selecteer onder Procesautomatisering de optie Runbooks.
- Selecteer het runbook.
- Selecteer verwijderen op de pagina Overzicht van runbook.
Volgende stappen
In deze zelfstudie hebt u een PowerShell Workflow-runbook gemaakt. Zie voor een kijkje in Python 3-runbooks: