Azure Automation – Erweiterte Parameterverarbeitung

Beim Arbeiten mit Azure Automation kommt man schnell an den Punkt, dass ein Runbook ein zweites Runbook starten soll. Dabei möchte man meistens auch noch den einen oder anderen Parameter übergeben. Das ist alles kein Problem und schnell und einfach realisiert.

Interessant wird es jedoch wenn komplexere Objekte wie Arrays oder Hashtables übermittelt werden sollen.

Runbook mit Parametern starten

Im ersten Abschnitt liest das Skript über eine Activity die Informationen der Connection „AzureRunAsConnection“ aus. Mittels dieser Informationen und dem, auf dem Hybrid Worker installierten, Zertifikat wird eine Verbindung zu Azure hergestellt und in die korrekte Subscription gewechselt.

Anschließend werden die notwendigen Variablen gesetzt. Dabei werden die Werte in der Hastable „AzureRunbookParameter“ anhand Ihres Keynames auf die Parameter des zu startenden Runbooks verknüpft.

Ein Parameter, unterschiedliche Objekttypen

Im nächsten Schritt ruft das Runbook „Test-StartRunbook.ps1“ ein weiteres Runbook „Test-ObjectConversion.ps1“ auf. Dabei werden jeweils drei unterschiedliche Objekttypen (String, JSON und Array) als Parameter übergeben. Das zweite Runbook gibt nur den Typ des übergebenen Parameters aus.

String

JSON

Array

Durch den unterschiedlichen Objekttyp ist eine einheitliche Weiterverarbeitung des Parameters nicht möglich.
Das klingt im ersten Moment nach keinem großen Problem, man kann beim Aufruf über die AzureRM Cmdlets ja immer den korrekten Objekttypen nutzen.

Interessant wird es jedoch, wenn dieses Runbook über das Azure Portal gestartet wird und der Zielobjekttyp ein Array ist.

Dazu hier die Input Parameter für das Array Objekt direkt aus dem Azure Portal.

Start per Azure Portal

Startet man nun das Runbook mit exakt den Werten, die man aus dem Input Parameters Pane kopiert hat…

…werden diese vom Azure Portal in einen String konvertiert…

… und kommen auch nicht als Array Objekt im Runbook an.

Somit ist ein manueller Start dieses Runbooks, z.B. für Debuggingzwecke, aus dem Azure Portal nicht mehr möglich.

Es gibt jedoch einen Workaround.

Konvertierung der Variablen

Die zwei Skripte am Ende des Artikels bilden exakt das Verhalten ab, dass ich oben beschrieben habe. Jedoch mit einer Erweiterung.

Sollte ein String Objekt übermittelt werden, wird dieses in ein Array Objekt konvertiert.

Dabei ist zu beachten, das multiple Werte als JSON übermittelt werden, einzelne jedoch nur als String.
Daher wird im Skript erst versucht ein JSON in ein Array umzuwandeln, sollte das nicht funktionieren wird im Catch Block der String in ein Array umgewandelt.

Somit erhält man immer ein Array Objekt und kann das Runbook aus dem Azure Portal und einem Skript starten ohne sich weitere Gedanken um den Objekttyp zu machen.

Das Ergebnis aus dem vorherigen Beispiel sieht aus wie folgt.

Ich arbeite als IT Consultant bei Aequitas Integration und habe einen Fokus auf die Microsoft Enterprise Produktpalette.
Jedoch beschäftige ich mich schon lange auch mit Linux und finde auch die unteren OSI Schichten interessant.

Dieser Beitrag wurde unter Automation, Azure, PowerShell abgelegt am von .

Über

Ich arbeite als IT Consultant bei Aequitas Integration und habe einen Fokus auf die Microsoft Enterprise Produktpalette. Jedoch beschäftige ich mich schon lange auch mit Linux und finde auch die unteren OSI Schichten interessant.