Der Operations Manager unterstützt den Einsatz der Powershell durch die folgenden Methoden:
1. Berechnung von Registern im PreProzess
Neben den VBScript Registern können auch Powershell-Register verwendet werden, um Inhalte von Registern zu bestimmen. Hierfür wird das HDBCom (COM+ hierarchische Datenbank) als $HDB im Registerscript zur Verfügung gestellt. Wie auch beim VBScript wird der Registerinhalt durch Zuweisung auf die Variable {Registername} am Ende bestimmt. Die Powershell-Register sind zur Berechnung bzw. Transformation von Eingans- in Ausgangsdaten gedacht. Der Sicherheitskontext ist der des Web-Servers bzw. des Kontos unter dem Application-Pool. Grundsätzlich wird ein verlassen der Maschine übers Netzwerk in Powershell-Registern daher nicht unterstützt!
2. Modulfunktion 'NSOS.OS.RunShellRemote' (Powershell Befehl remote ausführen)
Über die Modulfunktion kann ein Registerwert zur Laufzeit des PreProzess mit dem Inhalt eines Powershell-Scripts gefüllt werden bzw. ein Script ausgeführt werden. Das Register wird nach Ausführung mit dem Console-Output des Scripts gefüllt. Zur Weiterverarbeitung wird dies häufig in ein VBScript-Register eingefügt, daher werden vor dem Einfügen die Zeilenumbrüche durch Pipes '|' ersetzt. In Modulfunktionen kann grundsätzlich beliebiger Code auf dem Zielsystem zur Ausführung kommen. Der Kontext ist entweder der unter dem Zielhost in der HDB hinterlegte oder alternative Anmeldeinformationen, die als Objekt mit hinterlegten Anmeldeinformationen als HDB-Pfad angegeben werden können:
3. Ausführen eines Powershell-Script in einer Elementar-Operation
Die Elementaroperation 'NSOS.OS.OSExecShellRemote' (Powershell Befehl remote ausführen) ist in den Parametern identisch mit der Modulfunktion:
Als Script wird immer ein Powershell-Script-Text angegeben, wie z.B.:
$Result = get-process | select name, id
foreach ($Line in $Result)
{
$Out += [string] ($Line.Name) + "~" + [string] ($Line.Id) +","
}
$Out = $Out.Trim(",")
$Out
Dieses Script berechnet z.B. die Quelle einer Prozess-Auflistung, die dann in einer Listbox angezeigt werden kann.
Probleme mit Powershell
Damit Powershell-Befehle remote ausgeführt werden können, muss auf dem Zielhost der Befehl:
WINRM quickconfig
ausgeführt worden sein. Dieser Befehl konfiguriert das System so, das per Powershell remote darauf zugegriffen werden kann. Für die Ausführung von Scripten muss ggfs. noch
Set-ExecutionPolicy -ExecutionPolicy unrestricted
ausgeführt werden.
Testen ob remote Powershell funktional
Mit dem folgenden Befehl aus der Powershell des Dispatcher kann überprüft werden, ob das Zielsystem remote Powershell unterstützt:
invoke-command -Computer RemoteServerName -ScriptBlock { Get-Process }
Dies sollte im angemeldeten Kontext des Diensteuser unter dem Host-Objekt funktionieren und die Liste der Prozesse vom Remote-System zurück liefern.