Skriptregeln
Inhalt dieses Abschnitts:
Wissenswertes über Skripregeln
Mithilfe von Skriptregeln können benutzerdefinierte Regeln unter Verwendung von Windows PowerShell oder VB Scripts erstellt werden. Der Erfolg oder das Fehlschlagen des Skriptes bestimmen, ob die Sicherheitsstufe sowie die zulässigen und verweigerten Elemente, die Teil der Regel sind, auf den Benutzer zutreffen.
Skriptregeln können jede Schnittstelle nutzen, die über PowerShell oder VBScript zugänglich ist, z. B. COM (Component Object Model).
Jedes Skript wird bei Vorliegen der folgenden Bedingungen bewertet:
- Eine neue Konfiguration wird auf dem Computer bereitgestellt.
- Ein Benutzer meldet sich an.
Wechseln Sie zum Erstellen oder Bearbeiten von Skripten zum erforderlichen Skriptregelsatz im Application Control-Konfigurationseditor. Regelsätze > Skriptbasiert > [Regelsatzname]
Mithilfe der folgenden Skriptregeloptionen können Sie definieren, wann das Skript ausgeführt werden soll:
- Skript ausführen:
- Pro Sitzung als Benutzer – Das Skript wird für jeden Benutzer ausgeführt, der sich anmeldet. Die Einstellungen werden nur für die Dauer der Benutzersitzung angewendet.
- Pro Sitzung als System – Das Skript wird für jeden Benutzer, der sich anmeldet, einmal mit SYSTEM-Kontoberechtigungen ausgeführt. Die Einstellungen werden nur für die Dauer der Benutzersitzung angewendet.
- Pro Computer als System – Das Skript wird einmalig beim Starten des Computers mit SYSTEM-Kontoberechtigungen ausgeführt. Die Einstellungen werden für alle Benutzersitzungen so lange angewendet, bis der Computer neu gestartet wird, der Application Control-Agent neu gestartet wird oder sich eine Konfiguration ändert.
- Warten, bis Anmeldung abgeschlossen ist – Wählen Sie diese Option aus, um zu verhindern, dass das Skript ausgeführt wird, während die Benutzeranmeldung noch im Gange ist.
Achtung: Das Ausführen von Skripten als SYSTEM-Benutzer kann erheblichen Schaden auf dem Computer anrichten und sollte nur von erfahrenen Skriptautoren vorgenommen werden.
VBScripts
Jedes Skript wird innerhalb eines gehosteten Skriptmoduls ausgeführt. So erhalten Sie mehr Kontrolle über die Skriptausführung sowie über die Eingabe und Ausgabe.
- Es wird keine VBS-Datei verwendet.
- Es wird kein separater Prozess erzeugt.
Ein Skript muss als Funktion geschrieben werden und kann zahlreiche Funktionen enthalten. Es muss jedoch eine Hauptstartfunktion festgelegt werden. Die Startfunktion wird vom Application Control Agent ausgeführt und kann dazu verwendet werden, andere Funktionen aufzurufen.
Das AMScriptRule COM-Objekt ist im Skriptmodul integriert und bietet Zugriff auf die folgenden Methoden:
strUsername = AMScriptRule.UserName
strUserdomain = AMScriptRule.UserDomain
strSessionid = AMScriptRule.SessionID
strStationname = AMScriptRule.WinStation
Der Microsoft-Standard in dieser Instanz bewirkt, dass "WinStation" den Wert des Namens der Terminal Services-Sitzung zurückgibt. Dieser ergibt sich aus dem Sitzungstyp, dessen typische Werte "Console" oder "RDP-Tcp#34" lauten. Es wird nicht der Name der Arbeitsstation zurückgegeben, der in der Regel "WinSta0" lautet.
Das AMScriptRule COM-Objekt beinhaltet außerdem folgende Methoden:
strLog = AMScriptRule.Log "My Log Statement"
Ermöglicht Ihnen die Ausgabe von Protokollierungszeichenfolgen an die Agentprotokolldatei zur Verwendung mit Skriptregeln für die Fehlerbehebung.
strEnvironmentvar = AMScriptRule.ExpandEnvironment ("%MyEnvironmentVariables%")
Erweitert die Umgebungsvariablen des Benutzers, der das Skript ausführt.
Das Verwenden von WScript. shell zum Erweitern von Umgebungsvariablen gibt nur SYSTEM-Variablen zurück.
Windows-PowerShell-Skripte
Wenn das Skript den Wert 0 ausgibt oder mit 0 beendet wird, ist das Skript erfolgreich und die Regeln werden angewendet. Bei Ausgabe eines Werts ungleich null schlägt das Skript fehl und die Regeln werden nicht angewendet.
Jedes PowerShell-Skript wird in einer Instanz von PowerShell.exe ausgeführt. Application Control setzt daher keine bestimmte Syntax durch oder fügt Syntaxen hinzu. Jedes korrekt formatierte PowerShell-Skript funktioniert.
PowerShell muss auf allen Endpunkten installiert sein, die das Skript verwenden.
Beispielskripte
Das folgende VBScript veranschaulicht, wie Sie die Anwendungen steuern, auf die ein Benutzer Zugriff hat.
Function ScriptedRule()
’Name of Filter scan expected to pass
ExpectedFilter = "FWALL"
’Get Server Name
Set objNTinfo = CreateObject ("WinNTSystemInfo")
ServerName = lcase (objNTInfo.ComputerName)
’Set initial return value
ScriptedRule = False
’Create MetaFrame Session Object
Set MFSession = Createobject ("MetaFrameCOM.MetaFrameSession")
’Initialize the session filters for this session
For Each x in MFSession.SmartAccessFilters
’return true if our filter is found
If x = ExpectedFilter Then
ScriptedRule=True
AMScriptRule.Log "SmartAccessFilter match found."
End If
Next
End Function
Mit dem folgenden VBScript lässt sich bestimmen, ob ein Computer einer Computerorganisationseinheit angehört:
Function ScriptedRule()
ScriptedRule = vbFalse
strCompName = AMScriptRule.StationName
Set oRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = oRootDSE.Get("DefaultNamingContext")
Set oOU = GetObject("LDAP://OU=TheOUyouAreSearching,OU=Parent,OU=Parent," & strDNSDomain)
oOU.GetInfo
For each member in oOU
If UCase(strCompName) = UCase(member.CN) Then
ScriptedRule = vbTrue
Exit For
End If
Next
End Function
Das folgende Beispiel-VBScript zeigt die Hauptkomponenten eines Skriptes. Es veranschaulicht, wie Sie auf Informationen zum Benutzernamen des Benutzers zugreifen, der sich am System anmeldet, und wie Sie einen Abgleich mit einer bestimmten Domäne und Organisationseinheit durchführen:
Function MyScript()
'Get the username of the user logging in (also works when running as SYSTEM)
strUserName = AMScriptRule.UserName
'Get the domain of the user logging in (also works when running as SYSTEM)
strUserDomain = AMScriptRule.UserDomain
'Look up user environment variables (when running as SYSTEM, only SYSTEM variables are available)
strClientName = AMScriptRule.ExpandEnvironment ("%ClientName%")
'Log the output
AMScriptRule.Log strUserName & " logged in on " & strClientName
'Check if the user is a member of the domain
If strUserdomain = "MyDomain" Then
'If so, see if the user is in the MyOU OU
Set objOU = GetObject ("LDAP://ou=MyOU,dc=MyDomain,dc=com")
objOU.Filter = Array("user")
For Each objUser In objOU
'Check if there is a match with the user logging on
If objUser.sAMAccountName = strUserName Then
'if there is, then set the function to True
MyScript = True
End If
Next
End If
'Unless there is a username match, the function defaults to False
End Function
Das folgende Beispielskript für Windows-PowerShell zeigt die Hauptkomponenten eines Skriptes. Es veranschaulicht, wie Sie auf Informationen zum Benutzernamen des Benutzers zugreifen, der sich am System anmeldet, und wie Sie einen Abgleich mit einer bestimmten Domäne und Organisationseinheit durchführen:
#Script checks if the current user is a member of the OU specified
# Return 0 if TRUE
# 1 otherwise
$logonuser = $env:username
$bindpt = [adsi] "LDAP://OU=TS_Users,OU=Users,OU=MyUser,OU=MyOU,DC=MyDomain,DC=com"
$users = New-Object System.DirectoryServices.DirectorySearcher $bindpt
$users.Filter = "(&(objectClass=User)(sAMAccountName=$logonuser))"
$obj = $users.FindOne()
if($obj -eq $null)
{
#" Not a Member"
exit 1
}