Map_Drives.kix

Dieses KIX Skript wird aus logon.kix aufgerufen und erstellt die Laufwerksverbindungen.


; Public Share für alle
USE P: /DEL
USE P: "\\$FS1\Public$"
IF @ERROR = 0
    color n/w+
    ? "\\$FS1\Public$ is mapped to drive P:"
ELSE
    Color r+/w+
    ? "ERROR while connecting \\$FS1\Public$ with P:"
ENDIF

;IF @ProductType = "Windows 95" OR @ProductType = "Windows 98" OR @ProductType = "Windows Me" OR @ProductType = "Windows NT Workstation"
IF $ADready = False
    GOSUB "MAP_Downlevel"
ELSE
    GOSUB "MAP"
ENDIF

GOTO "END"

:MAP_Downlevel
;Drive Mapping fuer Downlevel Clients
IF INGROUP("Groupname1")
    MapDrives("V:", "\\$FS1\Group1$")
ENDIF

IF INGROUP("Groupname2")
    MapDrives("V:", "\\$FS1\Group2$")
ENDIF
RETURN


:MAP
$conStr = "WinNT://" + @LDOMAIN + "/" + @USERID + ",user"
$User=GetObject($conStr)
IF @ERROR <> 0
    Color r+/w+
    ? "ERROR at GetObject($conStr) - " + @SERROR
    get $x
    exit
ENDIF
FOR EACH $Group IN $User.GROUPS
    color n/w+
    ;? "You are Member of the Domain Group " + $Group.Name
    IF INSTR($Group.Name,".") = 4 ;Gruppenname in der Form CN=UML.xxx an Position 4
        $map = UCASE(SUBSTR($Group.Name,3,1)) ;Laufwerksbuchstabe an dritter Stelle im Namen
        IF ASC($map) >= 69 AND ASC($map) <= 90 ;Nur wenn E bis Z
            $map = $map + ":"
            $GrpDesc=GETOBJECT("WinNT://@LDOMAIN/" + $Group.Name + ",Group")
            IF @ERROR = 0
                $pos = INSTR($GrpDesc.Description ,";")
                IF $pos > 0 AND SUBSTR($GrpDesc.Description,1,2) = "\\"
                    $share = SUBSTR($GrpDesc.Description,1,$pos-1)
                    $ret = MapDrives($map, $share)
                    IF $ret <> 0
                        Color r+/w+
                        ? "ERROR while connecting " + $share + " with " + $map
                    ENDIF
                ENDIF
            ENDIF
        ENDIF
    ENDIF
NEXT
RETURN

FUNCTION MapDrives($map, $share)
            USE $map /DEL
            USE $map $share
            IF @ERROR = 0
                color n/w+
                ? $share + " is mapped to drive " + $map
            ENDIF
            $MapDrives = @ERROR
ENDFUNCTION


:END
exit


Das KIX-Skript Map_Drives() wird aus dem Logonskript logon.kix aufgerufen.
Damit sollen die Laufwerksverbindungen hergestellt werden. Das Skript geht von einigen Voraussetzungen aus, die im Text unten besprochen werden.

MAP_Downlevel In dieser Subroutine werden die Laufwerksverbindungen für Clients < Windows 2000 erstellt. Die Gruppen, die in der KIX-Funktion INGROUP() verwendet werden, müssen natürlich existieren. Ebenso müssen die Laufwerksbuchstaben passen, die an die eigene Funktion MapDrive() übergeben werden.

MAP In dieser Subroutine wird zuerst ein Verbindungstring zur Anmeldedomäne des aktuellen Benutzers erzeugt. Mit diesem Verbindungstring wird dann ein COM Objekt zu dem Benutzerkonto über mit den WinNT:// Provider erstellt.
In einer Loop werden anschliessend die Gruppenmitgliedschaften des Benutzerkontos ermittelt. Anhand von Informationen im Gruppennamen und in der Beschreibung zur Gruppe, werden die Parameter für die Funktion MApDrive() generiert.

Voraussetzungen:
Die Gruppen haben einen Namen in der Form ABZ.FreiText, wobei ABZ jeweils für einen beliebigen Buchstaben steht. Z ist der 3. Buchstabe im Gruppennamen, gefolgt von einem Punkt und steht für den Laufwerksbuchstaben.
Im Beschreibungsfeld einer Gruppe muss am Anfang der Sharename von einem Strichpunkt stehen. Hinter dem Strichpunkt kann beliebiger Text sein.

Beispiel Gruppenname: UGL.AbteilungA
Beispiel Gruppenbeschreibung: \\Server\AbteilungA$; Abteilungsshare für AbteilungA

In diesem Beispiel bekommen Mitglieder der Gruppe UGL.AbteilungA das Laufwerk L:\ auf \\Server\AbteilungA$ verbunden.
UG könnte als Synonym für User Globalgroup stehen.
UP könnte als Synonym für User Permissiongroup stehen.

An die Funktion MapDrive() wird als Parameter der Laufwerksbuchstabe und das Share übergeben. Zuerst wird eine evtl. Verbindung zu dem Laufwerk getrennt und dann mit Share verbunden.
Als Returnwert gibt MapDrive() einen eventuellen Fehler Code zurück, der ausgewertet werden kann.


KIX Basics