Viele nutzen die SCO Web Konsole um Runbooks zu starten die die täglichen Aufgaben erleichtern.
Leider bietet uns die Web Konsole keine Möglichkeit der Userinteraktion, somit können wir keinen Status zurückgeben.
Doch hier kommt mein Runbook ins Spiel, ich hab herausgefunden das in der Orchestrator DB der User steht, der ein Runbook startet, somit lese ich diesen User aus, hole mir seine Mail Adresse und schicke ihm zum Abschluss der Runbooks eine Meldung per Mail.
Somit kann ich dem User Werte übergeben oder ihm einfach mitteilen das das Runbook fertig ist.
Jetzt sehen wir uns das ganze etwas genauer an.
SQL Query
Jedes Runbook hat eine eindeutige Prozess ID, mit dieser suchen wir in der DB den User der das Runbook gestartet hat. Da auch die Orchestrator DB eine relationale Datenbank ist, stehen die Informationen die wir benötigen nicht in einer Tabelle sondern sind auf 3 Tabellen verteilt.
Somit müssen ein paar Joins her, aber das sollte kein Problem sei.
In unserem Beispiel suchen wir den User des Runbooks mit der Prozess ID 5696
use Orchestrator
Select Jobs.CreatedBy
From [Microsoft.SystemCenter.Orchestrator.Runtime].Jobs AS Jobs
INNER JOIN POLICIES ON Jobs.RunbookId = POLICIES.UniqueID
inner join POLICYINSTANCES on jobs.Id = POLICYINSTANCES.JobId
Where ProcessID = ‘5696’ and RunbookServers not like ‘null’
Zu Beginn stellen wir sicher das wir mit der richtigen DB arbeiten, danach holen wir uns die benötigten Tabellen mittels JOINS und zum Schluss filtern wir auf die gewollte Prozess ID und wollen nur Einträge die einen RunbookServer haben. Mit dem letzten Filter, stellen wir sicher das wir nur einen Eintrag zurückbekommen.
Als Resultat erhalten wir die User SID mit der wir nun weiterarbeiten.
CreatedBy
S-1-5-21-89866128-1600744-1478062314-1001
Das Runbook
Nun können wir das Runbook bauen.
Hier mal der Überblick wie unser Runbook aussehen wird.
Initialize Data
Hier benötigen wir die Prozess ID, welche wir dem Runbook übergeben
Query Database
Hier benötigen wir die SQL Query die wir zu Beginn dieses Artikels erstellt haben.
Wie ihr sehen könnt verwende ich hier hier die Variable “SCO_DB” in der der Name der Orchestrator DB steht, somit kann ich dieses Runbook einfach exportieren und wieder importieren und die Variable existiert auf allen Systemen die von uns betreut werden.
Zusätzlich verwende ich hier die “Published Data” ProcessID vom Activity “Initialize Data” welches dem Runbook übergeben wird.
In den Verbindungseinstellungen seht ihr wieder eine Variable, diesmal für den SQL Server.
Get User Properties
Hier das nächste Activity, um mit der SID, die uns die SQL Query liefet, die User Properties auszulesen.
Wer sich das PowerShell Script ansieht, dem sollte gleich auffallen das dieses Runbook schon für Server 2012 und höher bereit ist, sollte somit auf jedem Runbook Server funktionieren.
In der ersten Zeile setzen wir die Variable “$UserSID” mit dem Wert der SQL Query.
Zusätzlich müssen wir noch die PublishedData konfigurieren. Da ich das Runbook für mehrere Zwecke nutzen möchte, gebe ich nicht nur die Mail aus, sondern auch den vollen Namen, den SamAccountName und den DistinguishedName.
Hier noch das gesamte PowerShell Script
$UserSID="PublishedData" #Hier wird der Username als Eingabe für den Scriptteil, welcher in der PS 3.0 ausgeführt werden muss $inobj = new-object pscustomobject -property @{ UsernameforPipe = $UserSID } #Hier wird das oben angegebene Inputobjekt als Input für den Powershellpart genommen $result = $inobj | Powershell { #folgend werden die Objekte aus dem Input wieder weiterverarbeitet $inobject = $input | select -First 1 $user = $inobject.UsernameforPipe $aduser = get-aduser -Identity $user -Properties EmailAddress #Anschließend muss wieder eine Pscustomobject für die Ausgabeparamter verwendet werden new-object pscustomobject -property @{ mail = $aduser.EmailAddress SamAccountName = $aduser.SamAccountName Name = $aduser.Name DistinguishedName = $aduser.DistinguishedName } } #Falls ein User gefunden wurde, kann nun so auf den Namen zugegriffen werden: $DistinguishedName=$result.DistinguishedName $Name=$result.Name $SamAccountName=$result.SamAccountName $mail=$result.mail
Return Data
Das letzte Activity ist ein Return Data, in dem wir die ermittelten Werte zurückgeben. Hier könnt ihr sehen das wir die Published Data des “Get User Properties” Activity verwenden und die Return Data befüllen
Natürlich müssen wir dazu die Return Data Werte zuvor im Runbook konfigurieren
Der Aufruf
Dieses Runbook können wir jetzt aus jedem anderen Runbook aufrufen und übergeben ihm die ProzessID des ursprünglichen Runbooks
Hier ein Beispiel
Mit den ermittelten Werten können wir nun ein weiteres Runbook starten, welches die Mail mit dem gewünschten Text versendet.
Hier sehen wir bei dem Parameter “Recipient” die Returned Data des “GetUserFromRunbook” Runbooks, wo wir die Mail ermittelt haben.
Den Download findet ihr in der TechNet Gallery: http://gallery.technet.microsoft.com/Get-User-Informations-c3e64d6e
Alle meine Downloads in der TechNet Gallery findet ihr hier: http://gallery.technet.microsoft.com/site/search?f%5B0%5D.Type=Tag&f%5B0%5D.Value=TechguyAT&f%5B0%5D.Text=TechguyAT
Hättet ihr so was schon mal benötigt?
Michael Seidl aka Techguy