Da es unter Windows 2008 R2 Probleme gibt, mit dsget -expand die Gruppen eines Benutzers auszulesen, und man für Powershell ein AD plugin benötigt wenn man dies mit powershell auslesen will,
Mein Hintergedanke war, ein Loginscript zu machen, indem geprüft wird, in welchen gruppen der Benutzer ist, und anhand dessen entsprechend der Gruppe eine CMD ausgeführt wird,
beispiel:
Benutzer:
Heinz
Gruppen:
PR111 <- Drucker
Verwaltung
Office
SAP
--------------
jetzt kommt Autoit ins spiel:
Spoiler anzeigen
#AutoIt3Wrapper_AU3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#AutoIt3Wrapper_AU3Check_Stop_OnWarning=N
#NoTrayIcon
; *****************************************************************************
; »
; *****************************************************************************
#include <AD.au3>
_AD_Open()
Global $aUser = _AD_GetUserGroups(@UserName)
For $i = 1 to UBound($aUser) -1
Local $sOutput = StringRegExpReplace($aUser[$i], '^CN=([^,]+),OU=.+$','$1')
local $sOutput2 = StringRegExpReplace($sOutput, '^CN=([^,]+),DN=.+$','$1')
local $sOutput3 = StringRegExpReplace($sOutput2, '^CN=([^,]+),CN=.+$','$1')
$sOutput3 = StringReplace($sOutput3, 'á', "ß")
$sOutput3 = StringReplace($sOutput3, 'š', "Ü")
$sOutput3 = StringReplace($sOutput3, '™', 'Ä')
$sOutput3 = StringReplace($sOutput3, 'š', 'Ö')
$sOutput3 = StringReplace($sOutput3, 'Ž', "ü")
$sOutput3 = StringReplace($sOutput3, '„', "ä")
$sOutput3 = StringReplace($sOutput3, '”', "ö")
;ConsoleWrite($aUser[$i] &@LF)
ConsoleWrite (_ANSI2OEM($sOutput3 &@LF))
Next
Func _ANSI2OEM($text) ;=Umlaute richtig in cmd Darstellen.
$text = DllCall('user32.dll', 'Int', 'CharToOem', 'str', $text, 'str', '')
Return $text[2]
EndFunc ;==>_ANSI2OEM
_AD_Close()
[/autoit] [autoit][/autoit] [autoit][/autoit]
Das script spuckt nun die Gruppen aus,
diese werden dann im weiteren Script verarbeitet, und die Drucker werden gemappt, und falls eine Batch Datei exestiert, wird diese ausgeführt:
(in dem fall habe ich das autoit script _gruppenprüfung genannt)
hier ein kleiner Ausschnitt aus findegruppen.cmd
Spoiler anzeigen
FOR /F "tokens=*" %%A IN ('%logonserver%\netlogon\files\_gruppenpruefung.exe') DO ( SET ____Gruppe.%%A=1)
rem Hier kommt ein Trick um in DOS bzw CMD ein Array zu erstellen.
FOR /F "tokens=2* delims=.=" %%A IN ('SET ____Gruppe.') DO CALL :GRUPPENVERARBEITUNG %%A
@exit
:GRUPPENVERARBEITUNG
rem
rem zuerst werden die spaces weggemacht
rem
Set input=%*
rem
rem jetzt werden leere zeilen verworfen
rem
if /I "%input%"=="" (
GoTo :EOF
)
rem
rem !! es wird nach PRxxx geschaut, wenn xxx größer als 1 und kleiner als 999 ist, !!
rem !! wird angenommen das es eine gruppe für einen drucker ist, und der Drucker wird installiert !!
rem
if "%input:~2,3%" GTR "1" (
if "%input:~2,3%" LSS "999" (
if /I "%input:~0,2%" == "PR" (
echo Drucker "%input%" gefunden
ADPRINTX.exe /c "\\%printserver%\%input%"
Alles anzeigen
Für das script wird <AD.au3> benötigt, was im AD 1.3.0.0 zu finden ist.
und auch ist es wichtig die autoit exe als consolen Anwendung zu compilen (einfach den Hacken bei Console? setzen)
Gruss zm0