Verboten: Skripts auf Servern

4. Februar 2010

Bestimmte Skripts bereiten Probleme, wenn sie auf gewissen spezialisierten Maschinen zum Einsatz kommen. Ein gutes Beispiel dafür sind Domänen-Anmeldeskripten, die etwa auf Terminalserver-Maschinen oder anderen spezialisierten System laufen.

Es gibt zwar die Möglichkeit, mit Hilfe der Gruppenrichtlinien dieses Problem zumindest für die Anmeldeskripts zu umgehen. Doch eine generelle Vorgehensweise, die in einem jeden Skript verankert wird, bietet einige Vorteile. Sie agiert sozusagen auf einzelner Skriptbasis und kann dabei auch zwischen verschiedenen Computertypen unterscheiden. Zudem eignet sich dieser Ansatz auch für andere Aufgaben als Anmeldeskripts.

Es lässt sich recht einfach verhindern, dass ein Skript auf einem bestimmten Rechnertypus zum Einsatz kommt – aber nur wenn man weiß, wo sich die Informationen über die Rolle des Systems in der Domäne befindet.

Die Klasse Win32_ComputerSystem in der Windows Management Instrumentation (WMI) enthält dazu den numerischen Wert, der unter DomainRole zu finden ist. Die folgende Tabelle stellt einige DomainRole-Werte und ihre Bedeutung gegenüber.

DomainRole-Wert    Bedeutung
0                                alleinstehende Workstation/Arbeitsplatzsystem
1                                Member Workstation
2                                alleinstehender Server
3                                Member Server
4                                Backup-Domänencontroller
5                                Primärer Domänencontroller

Generell sollten übliche Anmeldeskripten nur auf Member Workstations zum Einsatz kommen – sie haben den Wert 1 in der DomainRole stehen. Es kann aber auch sein, dass Anmeldeskripten auf alleinstehenden Arbeitsplatzsystemen laufen sollen, etwa wenn man Home-PCs hat, die sich etwa über ein VPN (Virtual Private Network) mit den Firmennetzwerk verbinden.

Dabei kann zum Beispiel ein Anmeldeskript von Hand angestoßen werden, um damit ein Mapping der Ressourcen aus dem Unternehmensnetzwerk anzustoßen. In diesem Fall müsste man das Ablaufen von Skripts erlauben, bei denen der Wert für DomainRole bei 1 oder darunter liegt.

Die einfachste Lösung ist der Einsatz eines kurzen VBScript-Codes, das den Wert von DomainRole abfragt und dann die Abarbeitung beendet, wenn der Wert von DomainRole größer ist als 1.

Der folgende Code zeigt dazu ein Beispiel.

Dim instances, instance, cs
Set instances = GetObject(_
  "winmgmts://./root/cimv2")._
  InstancesOf(_
  "Win32_ComputerSystem")
 
For each instance in instances
    Set cs = instance
next
 
If cs.DomainRole > 1 Then
    WScript.Quit
End If

Dieselbe Technik lässt sich quasi auch als Wachmann für jedes Skript heranziehen, das nur auf bestimmten Maschinentypen zum Einsatz kommen darf. Angenommen ein Skript soll nur auf Member Servern laufen dürfen, doch auf das Skript kann von mehreren Stellen zugegriffen werden oder aber es wird zwischen Maschinen mit verschiedenen Rollen synchronisiert, dann eignet sich der Code aus dem vorherigen Listing auch. Es muss allerdings eine Umstellung vorgenommen werden: Die Zeile

if cs.DomainRole > 1 Then

muss geändert werden zu:

if cs.DomainRole <> 3 Then

Alex K. Angelopoulos/rhh

Lesen Sie auch