System Center Orchestrator

User herausfinden welcher ein Runbook gestartet hat

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.

image

Initialize Data

Hier benötigen wir die Prozess ID, welche wir dem Runbook übergeben

image

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.

image

In den Verbindungseinstellungen seht ihr wieder eine Variable, diesmal für den SQL Server.

image

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.

image

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.

image

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

image

Natürlich müssen wir dazu die Return Data Werte zuvor im Runbook konfigurieren

image

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

image

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.

image

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

Leave a Comment

Your email address will not be published. Required fields are marked *

*