Role Definitions in ConnectWise Automate

In der Remote Monitoring- und Management-Lösung ConnectWise Automate können Role Definitions genutzt werden, um definierte Eigenschaften von Agents auszulesen und diese als Grundlage für die Zuweisung zu dynamischen Gruppen zu verwenden. Wie Role Definitions erstellt werden, können Sie in der Hersteller-Dokumentation nachlesen. Der Hersteller bietet standardmäßig bereits eine große Zahl voreingestellter Role Definitions an.

Jede Role Definition benötigt einen Detection String, dieser wird als sogenanntes "Active Replacement" erwartet. Es können mehrere Detections in einem Detection String logisch verknüpft werdenWie genau ein solcher Detection String aufgebaut wird, erläutern wir am Beispiel der standardmäßig verfügbaren Role Definition "Windows Terminal Services RemoteAdmin". Diese Role Definition prüft mit Hilfe von drei verschachtelten Powershell-Befehlen, ob ein Agent die Rolle "Windows Terminal Services RemoteAdmin" besitzt.


Der Detection String lautet:
{%_and|{%_or|{%_ct|{%@powershell.exe "(Get-WmiObject -Namespace Root\CimV2\TerminalServices -Query 'SELECT LicensingType FROM Win32_TerminalServiceSetting' -ErrorAction SilentlyContinue).LicensingType"@%}|1_%}|{%_ct|{%@powershell.exe "(Get-WmiObject -Query 'SELECT LicensingType FROM Win32_TerminalServiceSetting' -ErrorAction SilentlyContinue).LicensingType"@%}|1_%}_%}|{%_ct|{%@powershell.exe "(Get-WmiObject -Query 'SELECT Caption FROM Win32_OperatingSystem').Caption"@%}|Server_%}_%}
Wenn dieser String umformatiert wird, lässt sich die Struktur erkennen:
{%_and|
	{%_or|
		{%_ct|
			{%@powershell.exe "(Get-WmiObject -Namespace 
                        Root\CimV2\TerminalServices -Query 
                        'SELECT LicensingType FROM 
                        Win32_TerminalServiceSetting' -ErrorAction
                        SilentlyContinue).LicensingType"@%}|1_%}|
		{%_ct|
			{%@powershell.exe "(Get-WmiObject -Query 
                        'SELECT LicensingType FROM
                        Win32_TerminalServiceSetting' -ErrorAction 
                        SilentlyContinue).LicensingType"@%}|1_%}
	_%}|
	{%_ct|
		{%@powershell.exe "(Get-WmiObject -Query 'SELECT Caption 
                FROM Win32_OperatingSystem').Caption"@%}|Server_%}
	_%}
Bei den ersten beiden Powershell-Befehlen (Prüfung auf die WMI-Klasse TerminalServiceSetting) wird jeweils ermittelt, ob der Rückgabe-String den Wert 1 enthält. "ct" steht hier für "contains". Beide Abfragen werden mit einem logischen "or" verknüpft. Der dritte Powershell-Befehl ermittelt, ob es sich um einen Server handelt. Dieses Ergebnis wird per "and"-Logik mit dem ersten Ergebnis verknüpft.

Da in der "Active Replacements"-Syntax die geschweifte Klammer am Beginn und Ende eines Befehls zum Einsatz kommt, kann diese nicht innerhalb eines Powershell-Befehls (z.B. für if-Abfragen) verwendet werden. In der MSPGeek-Community finden Sie einen Workaround für dieses Problem. Um eine neue Role Definition zu testen, können Sie den gesamten Detection String (oder Teile des Strings) in den Command Prompt eines Agents eingeben. Dabei stellen Sie den Befehl "echo" voran. Beispiele:
echo {%_and|{%_or|{%_ct|{%@powershell.exe "(Get-WmiObject -Namespace Root\CimV2\TerminalServices -Query 'SELECT LicensingType FROM Win32_TerminalServiceSetting' -ErrorAction SilentlyContinue).LicensingType"@%}|1_%}|{%_ct|{%@powershell.exe "(Get-WmiObject -Query 'SELECT LicensingType FROM Win32_TerminalServiceSetting' -ErrorAction SilentlyContinue).LicensingType"@%}|1_%}_%}|{%_ct|{%@powershell.exe "(Get-WmiObject -Query 'SELECT Caption FROM Win32_OperatingSystem').Caption"@%}|Server_%}_%}
echo {%@powershell.exe "(Get-WmiObject -Namespace Root\CimV2\TerminalServices -Query 'SELECT LicensingType FROM Win32_TerminalServiceSetting' -ErrorAction SilentlyContinue).LicensingType"@%}
Wenn Sie Ihre neue Role Definition erfolgreich angelegt haben, führen Sie auf allen Agents zunächst den Befehl "Update Config" aus, um die aktualisierten Informationen an die Agents zu übermitteln. Anschließend führen Sie ebenfalls auf allen Agents den Befehl "Resend System Info" aus, damit diese die neu erkannte Rolle an Automate zurückmelden. Details zum Ausführen von Commands finden Sie hier. Anschließend finden Sie die neu erkannte Rolle in den Detected Roles und können eine Search erstellen, die auf der erstellten Role Definition basiert: