mhard666
Goto Top

Beim Login auf Unterverzeichnis im Benutzerverzeichnis prüfen und dieses ggf. anlegen

Wir haben unsere Druck- und Kopiertechnik ausgetauscht und durch netzwerkfähige Geräte ersetzt. Diese können auch auf eine Netzwerkfreigabe scannen. Um nicht für zig Benutzer ein Scan-Verzeichnis von Hand einzurichten, möchte ich per Loginscript bei der Benutzeranmeldung prüfen, ob im Benutzerverzeichnis ein Unterverzeichnis "scan" existiert, dieses ggf. anlegen und einem Scan-Benutzer auf dieses Verzeichnis Schreibrechte geben.

Hallo allerseits.

Die Zielstellung habe ich oben bereits geschildert.

Die Anwendungsumgebung ist eine Win2k8R2-Domäne mit W2k3 Server und W2k8R2 Server als Fileserver und WXPPro und Win7Pro als Clientsysteme.

Die Benutzerverzeichnisse sind die im AD hinterlegten Basisverzeichnisse, welche bei der Anmeldung des Users als Laufwerk Z gemappt werden.

Mein grundlegendes Problem ist, dass ich nicht einfach per Loginscript (Batch) prüfen kann, ob ein Verzeichnis "\\SERVER\Benutzerverzeichnisse\%username%\scan" existiert, da das Benutzerverzeichnis (Basisordner im AD) nicht zwangsläufig "\\SERVER\Benutzerverzeichnisse\%username%" ist.

Ich müsste also auf den AD-Eintrag für das Basisordner zugreifen können, nur erschließt sich mir nicht, wie ich das anstellen kann. Per Batch fällt wohl aus. Meine Vorstellung wäre per kix, vbs oder AutoIT. Mit kix hab ich einige Erfahrung, nur wüsste ich nicht ob und wie ich den Basisordner des Users damit ermitteln kann. Mit vbs oder AutoIT lässt sich soetwas sicher realisieren, nur fehlt mir da wiederum die Erfahrung.

Hat wer eine ähnliche Lösung implementiert, oder eine Idee diesbezüglich, und/oder ein Code-Schnipsel das mir weiterhilft? Vielleicht denke ich ja auch zu kompliziert face-wink

Vielen Dank schon mal.

VG mhard666

Content-Key: 178924

Url: https://administrator.de/contentid/178924

Printed on: May 6, 2024 at 15:05 o'clock

Member: bastla
bastla Jan 14, 2012 at 20:21:03 (UTC)
Goto Top
Hallo mhard666!

Wenn doch ohnehin für alle Benutzer Laufwerk Z: gilt, sollte doch eigentlich
md Z:\Scan
bzw wenn der Batch sichtbar ablaufen sollte
md Z:\Scan 2>nul
genügen ...

Als Alternative (zum Testen in der CMD-Shell, daher nur "%i" anstatt "%%i"):
for /f "tokens=3" %i in ('net use^|findstr "Z:"') do @echo md "%i\Scan"
Fall es doch serverseitig sein sollte, könnte das etwa (als Direkteingabe in der CMD-Shell und ebenfalls mit einem "Sicherheits-echo" vor dem "md") so gehen:
for /f "tokens=2*" %i in ('dsquery * domainroot -filter "(&(objectCategory=Person)(objectClass=User))" -attr sAMAccountName distinguishedName homeDirectory -limit 0') do @if "%~j" neq "" echo @md "%~j\Scan"
wobei anstelle von "domainroot" natürlich auch eine bestimmte OU als Startpunkt festgelegt werden kann ...

Grüße
bastla
Member: gemini
gemini Jan 14, 2012 at 21:26:26 (UTC)
Goto Top
Hallo mhard666,

eine Skizze für eine VBS-Lösung:
Set objSysInfo = CreateObject("ADSystemInfo")  
Set objUser = GetObject("LDAP://objSysInfo.UserName")  
Set objFSO = CreateObject("Scripting.FileSystemObject")  
strHomeDirectory = objUser.homeDirectory
If Not objFSO.FolderExists(strHomeDirectory & "\Scan") Then objFSO.CreateFolder(strHomeDirectory & "\Scan")  

Hier eine Auflistung der Attribute für AD User (Windows 2000 / Windows 2003)

Gruß,
gemini
Member: mhard666
mhard666 Jan 17, 2012 at 14:54:53 (UTC)
Goto Top
Hi,

Danke erstmal.

@gemini

die VBS Lösung gefällt. Ein klitzekleiner Fehler ist allerdings drin: Zeile 2 muss lauten:

Set objUser = GetObject("LDAP://"+objSysInfo.UserName)  

@bastla

Die Überlegung auf Laufwerk Z: zu testen hatte ich auch. Zugegebenermaßen ist bei uns die Laufwerkszuweisung nicht so ganz konsequent umgesetzt. Manche User haben kein Benutzerlaufwerk gemappt, bei einigen ist es ein anderer Laufwerksbuchstabe. Von daher bevorzuge ich die vbs-Version.

Gruß, mhard666
Member: mhard666
mhard666 Feb 24, 2012 at 07:55:59 (UTC)
Goto Top
Hi,

bevor ich den Beitrag als gelöst markiere, poste ich noch mal die letztlich umgesetzte Lösung.
Zielstellung war, aus dem AD das HomeDir auszulesen, wenn es existiert den Scan-Ordner anzulegen und dem Scan-User entsprechende Berechtigungen auf den Scan-Ordner zuzuweisen. Das ganze soll beim Login des Benutzers passieren.
Der Erste Teil (HomeDir auslesen und Ordner anlegen) geht fantastisch mit der o.g. VBS-Variante, für die Zuweisung der Benutzerrechte muss aber auf externe Tools zurückgegriffen werden. Diese sind entweder kostenpflichtig oder erwarten das Passwort im Klartext, was keine Option darstellt. Aus diesem Grund habe ich für die Umsetzung auf AutoIt zurückgegriffen.

Hier das Script:

;***************************************************
; File:    chk_scandir.au3
;
;***************************************************

#include <String.au3>

$strEncPassword = "ein geheimer text :-)"  
$intEncrypt = 0
$strUser = _StringEncrypt($intEncrypt, "hier steht der verschlüsselte Benutzername...", $strEncPassword)  
$strPassword = _StringEncrypt($intEncrypt, "hier steht das verschlüsselte Passwort...", $strEncPassword)  
$strDomain = _StringEncrypt($intEncrypt, "hier steht die verschlüsselte Domäne...", $strEncPassword)  

$strHomeDirectory = ""  
$strScanDirectory = ""  

$objSysInfo = ObjCreate("ADSystemInfo")  
$String = "User name: " & $objSysInfo.UserName  
$objUser = ObjGet("LDAP://"& $objSysInfo.UserName)  
$strHomeDirectory = $objUser.homeDirectory

If $strHomeDirectory <> "" Then  
	If FileExists($strHomeDirectory) Then
		$strScanDirectory = $strHomeDirectory & "\scan"  
;		=== Wenn nicht existiert Ordner anlegen
		If Not FileExists($strScanDirectory) Then DirCreate($strScanDirectory)

;		=== Erneut prüfen, wenn existiert Berechtigungen setzen
		If FileExists($strScanDirectory) Then
			If RunAs ( $strUser, $strDomain, $strPassword, 2, "CACLS " & $strScanDirectory & " /E /C /G scanuser@myhome.local:C" ) = 0 Then  
				Msgbox(0,"Shell Windows","Fehler beim setzen der Zugriffsrechte")  
			EndIf
		EndIf
	Else
		Msgbox(0,"Shell Windows","Homedirectory " & $strHomeDirectory & "existiert nicht")  
	EndIf
Else
	Msgbox(0,"Shell Windows","Kein Homedirectory")  
EndIf


Scanuser, Benutzer, Passwort und Domäne sind fiktive Daten und entsprechend anzupassen.
Benutzer, Passwort und Domäne sind die mit $EncPassword verschlüsselten Werte.

Vielleicht hat noch jemand Verwendung dafür. Fragen und Anregungen sind jederzeit willkommen.

VG. mhard666