mhard666
Goto Top

Laufwerksmapping aller Freigegebenen Ordner einer OU mit vbScript

Ich möchte im Loginscript alle Freigegebenen Ordner einer OU mappen. Das ganze soll in vbScript realisiert werden.

Hallo allerseits.

Ich stehe vor dem o.g. Problem. Bin leider mit Googlen und suchen hier im Forum nicht weiter gekommen.

Ich habe im AD unterhalb einer OU die jeweiligen Benutzer und Ordnerfreigaben angelegt. Bei den Ordnerfreigaben in den Schlüsselwörtern sind die Laufwerksbuchstaben (können ggf. auch mehrere sein) hinterlegt.
Jetzt soll, wenn sich der Benutzer anmeldet, geprüft werden in welcher OU er angelegt wurde. Anschließend sollen alle Ordnerfreigaben der OU gemappt werden. Vorzugsweise sollen die Laufwerksbuchstaben aus den Schlüsselwörtern der Ordnerfreigabe (im AD) gelesen werden - wenn mehrere hinterlegt sind, sollte dann die Freigabe entsprechend als mehrere Laufwerke eingebunden werden (finde ich praktisch - wenn es einen guten Grund für eine andere Lösung gibt bin ich ganz Ohr (oder Auge face-wink ).

Bin leider nicht so der Crack in vbScript. Bin daher für jeden Lösungsansatz oder Codeschnipsel dankbar.

Falls es eine Lösung in KIXtart gibt, wäre mir das fast noch lieber.

mfG mhard666

Content-Key: 125712

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

Printed on: May 3, 2024 at 22:05 o'clock

Member: Ametrin
Ametrin Sep 28, 2009 at 19:04:25 (UTC)
Goto Top
Hallo!

Wenn ich Sie richtig verstanden habe sieht Ihre AD Stucktur ungefähr so aus:

root
>UO1
------> BeuntzerA
------> BenutzerB
------>FreigabeNameA

>UO2
------> BeuntzerC
------> BenutzerD
------>FreigabeNameB
------>FeigabenNameC

und Sie wollen jetzt Abhänging vom Benutzer in dessen übergeordneter UO nach beinhalteten Freigabe Namen suchen und dies je nach Laufwerksbuchstabe mappen?

mfg Ametrin
Member: mhard666
mhard666 Sep 30, 2009 at 14:39:49 (UTC)
Goto Top
genau so schaut's aus.

Mittlerweile habe ich schon ein gutes Stück Code zusammengeschrieben. Ich setz es mal hier rein - vielleicht kann ja jemand was mit anfangen oder hat noch die eine oder andere Idee...


' Region Description
'
' Name:			userloginscript.vbs
' Author:		Mirko Härtwig
' Version:		v0.1
' Description:	Userloginscript, 
'				- ermittelt die OU des angemeldeten Users, 
'				- mountet die In der OU eingetragenen Verzeichnisfreigaben
' 				- bereits gemountete Laufwerke werden dismountet
'               - mappt die in der OU eingetragenen Drucker (enthält die Beschreibung den String "Default" 
'                 wird der Drucker als Standarddrucker verwendet, der bisherige Standarddrucker wird dadurch überschrieben) 
' ToDo:         - Verknüpfungen kopieren
'               - Scriptinventory beim ersten Start in der Woche ausführen
'               - prüfen ob lokaler Drucker existiert, dann keinen Netzwerkdrucker als Standart setzen ?????? 
'                 * Option: Prüfen ob Drucker in einer Liste/Array existiert
' 
' EndRegion

Option Explicit

Dim objNetwork
Dim objADSysInfo
Dim objUser					' User
Dim objOU					' OrgUnit
Dim objV					' Volume
Dim objKey					' Keywords (Array)
Dim objPq					' PrintQueue
Dim objPdescr				' Printer Description

Dim defprt					' Default Printer (True/False)

  Set objNetwork = WScript.CreateObject( "WScript.Network" )
  Set objADSysInfo = CreateObject("ADSystemInfo")
  Set objUser = GetObject("LDAP://" & objADSysInfo.UserName)
  Set objOU = GetObject(objUser.parent)

  ' === Ausgabe diverser Angaben =============================================
  WScript.Echo "Username: ............... " + objNetwork.userName
  WScript.Echo "Domänenname: ............ " + objNetwork.userDomain
  WScript.Echo "Organisationseinheit: ... " + objOU.Name
  WScript.Echo "Computername: ........... " + objNetwork.ComputerName
  WScript.Echo "Clientname: ............. " 
  WScript.Echo "Sitename: ............... " + objADSysInfo.SiteName
  WScript.Echo "Anmeldeserver: .......... " 

  ' === Alle Verzeichnisfreigaben der OU mounten
  objOU.Filter = Array("volume")
  For Each objV In objOU
	For Each objKey In objV.keywords
		MapNetworkShare objKey, objV.uNCName
	Next
  Next

  objOU.Filter = Array("printqueue")
  For Each objPq In objOU
	defprt = False
	If InStr(UCase(objPq.description), UCase("Default")) <> 0 Then defprt = True
	
	MapPrinter objPq.printerpath, defprt
  Next


'Region Subroutines

Sub MapNetworkShare(LocalDrive, NetworkPath)
'
' Author:		Mirko Härtwig
' Description:	Mappt eine Netzwerkfreigabe auf ein spezielles Laufwerk. Ggf. vorhandene Mappings
'				auf dieses Laufwerk werden vorher entfernt

Dim objNetwork

	Set objNetwork = WScript.CreateObject("WScript.Network")
	On Error Resume Next

	objNetwork.RemoveNetworkDrive LocalDrive, True, True
	If Err.Number <> 0 Then WScript.Echo "Can not remove Networkdrive """ & LocalDrive & """ " & _
	Chr(13) & Chr(10) & "Reason: " & Err.Description
	
	objNetwork.MapNetworkDrive LocalDrive, NetworkPath
	If Err.Number <> 0 Then 
		WScript.Echo "Can not map path """ & NetworkPath & """ to drive """ & LocalDrive & """." & _
		Chr(13) & Chr(10) & "Reason: " & Err.Description
	Else
	    WScript.Echo "Connect network share """ & NetworkPath & """ to drive """ & LocalDrive & """."
	End If
	

End Sub

Sub MapPrinter(PrinterPath, DefaultPrinter)
'	
' Author:		Mirko Härtwig
' Description:	Mappt einen Drucker. Ggf vorhandene Mappings werden vorher nicht entfernt
'

Dim objNetwork

	Set objNetwork = WScript.CreateObject("WScript.Network")
	On Error Resume Next
	
	objNetwork.AddWindowsPrinterConnection PrinterPath
	If Err.Number <> 0 Then 
		WScript.Echo "Can not add Printer Connection """ & PrinterPath & """ " & _
		Chr(13) & Chr(10) & "Reason: " & Err.Description
	Else
		WScript.Echo "Add Printer Connection """ & PrinterPath & """."
	End If
	
	If DefaultPrinter Then 
		objNetwork.SetDefaultPrinter PrinterPath

		If Err.Number <> 0 Then 
			WScript.Echo "Can not set """ & PrinterPath & """ as default Printer." & _
			Chr(13) & Chr(10) & "Reason: " & Err.Description
		Else
			WScript.Echo "Set Printer Connection """ & PrinterPath & """ as default Printer."
		End If
	End If


End Sub

'EndRegion

Member: Ametrin
Ametrin Sep 30, 2009 at 16:39:37 (UTC)
Goto Top
Hmm ich weiß nicht wie man diesen Blau weißen Text macht.
Habe 2 Vorschläge für dich

1.) Wenn du mit Windows Server 2008 arbeitest funktionieren dir GPO Preferenzes ganz gut, ansonnsten würde ich dir empfehlen einfach Gruppen zu machen die der User(in) dann erhält. Auf die Art kann man dann bequem Freigaben oder Drucker adden die in einer anderen UO sind.
2.) Wenn du keine GPO Preferences einsetzen kannst oder willst dann hier ein Auszug eines simplen Logonscripts (simpel deswegen da keine Fehlerabfrage face-big-smile )
 Set wshShell = CreateObject("WScript.Shell")  
Set wshNetwork = CreateObject("WScript.Network")  
Set colDrives = wshNetwork.EnumNetworkDrives

Set objDomain = getObject("LDAP://rootDse")  
DomainString = objDomain.Get("dnsHostName")  
UserString = wshNetwork.UserName
Set UserObj = GetObject("WinNT://" & DomainString & "/" & UserString)  

On Error Resume Next
'---------------------Drucker & Laufwerke löschen------------------------------------  
For i = 0 to colDrives.Count-1 Step 2
    wshNetwork.RemoveNetworkDrive colDrives.Item(i)
Next

'---------------------------Die nächsten 5Zeilen sind nicht von mir--------------------  
Set wshNet = CreateObject("WScript.Network")  
Set wshPrn = wshNet.EnumPrinterConnections
For x = 0 To wshPrn.Count - 1 Step 2
If Left(wshPrn.Item(x+1),2) = "\\" Then wshNet.RemovePrinterConnection wshPrn.Item(x+1),True,True  
Next

'----------------------Gruppen Laufwerke & Drucker-----------------------------------  

For Each GroupObj In UserObj.Groups
Select Case GroupObj.Name

case "Freigabe1"			  
	ret = WSHNetwork.RemoveNetworkDrive("V:", True, True)  
	ret = WSHNetwork.MapNetworkDrive("V:", "\\SERVER\SHARENAME", False)   
	objShell.NameSpace("V:").Self.Name = "ARBEITSLAUFWERK"  
case "Drucker1"			  
	wshNetwork.AddWindowsPrinterConnection "\\SERVER\PRINTERSHARENAME",True  

End Select
Next
Member: mhard666
mhard666 Oct 01, 2009 at 13:42:19 (UTC)
Goto Top
Bezüglich der Code-Formatierung siehe Formatierungshilfe face-wink

Über die Zuordnung durch Gruppenmitgliedschaften hab ich auch schon nachgedacht, hat beides seine Vor- und Nachteile. Ich bin letztenendes bei den OUs geblieben, weil ab einer gewissen Größe nicht mehr so gut nachvollziehbar ist welcher User Mitglied in welchen Gruppen ist und demzufolge irgendwelche Laufwerke oder Drucker gemappt bekommt. Da finde ich eine Grafische Darstellung wie in der AD Computer und Benutzerverwaltung schon hilfreich. Außerdem sollen Co-Admins, die Verzeichnisse mappen müssen nicht in meinem Script rumschreiben müssen. Und schlussendlich muss es ja für irgendetwas gut sein, dass ich in den OUs Verzeichnis- und Druckerfreigaben hinterlegen kann face-smile Dafür nehme ich sogar den ggf. höheren Planungsaufwand in Kauf.

mfg. mhard666