(DR)NO 10 Geschrieben 4. Juni 2007 Melden Teilen Geschrieben 4. Juni 2007 Hi, ich Bastel gerade an der möglichkeit mit ADS Gruppen, die eine bestimmt Form haben Drucker per VBS Skript für User zu Verbinden. Die ADS Gruppen sind so aufgebaut das am Anfang "Drucker_" steht, danach der Freigabename kommt "HP-CLJ6-01" und dann noch ein Ende "_Server1". Die Gruppen stehen alle in einer OU! Beispielsname der Gruppe" Drucker_HP-CLJ6-01_Server1". Der Printserver ist immer gleich. Ich hatte also vor in einer Schleife zu überprüfen ob der User in einer der Gruppen ist, dann aus der Gruppe den Druckernamen "Herauszufiltern" und zu Verbinden. Hat vieleicht jemand schonmal so etwas geschrieben? Ich bekomme es nicht hin die User auszulesen um den Gruppennamen zu bekommen. Danke und Gruß Tobi Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 4. Juni 2007 Melden Teilen Geschrieben 4. Juni 2007 Mal'n paar Funktionen zum NThema User und Gruppen: Function GetUserID() On Error Resume Next strUser = WshProcEnv("UserName") if strUser = "" then strUser = WshNetwork.UserName ' won't work with cscript login GetUserID = strUser End Function Function GetGroups(strDomain,strUserID) Set objUser = GetObject("WinNT://" & strDomain & "/" & strUserID) GetGroups="" For Each objGroup In objUser.Groups GetGroups=GetGroups & "[" & UCase(objGroup.Name) & "]" Next End Function Function InGroup(strGroup) InGroup=False If InStr(MyGroups,"[" & UCase(strGroup) & "]") Then InGroup=True End If End Function EDIT: Am Anfang noch: Set WshShell = WScript.CreateObject("WScript.Shell") Set WshProcEnv = WshShell.Environment("Process") Zitieren Link zu diesem Kommentar
(DR)NO 10 Geschrieben 5. Juni 2007 Autor Melden Teilen Geschrieben 5. Juni 2007 Hi, danke erstmal für die Beispiele. Ich habe bis jetzt folgendes: Set WshShell = WScript.CreateObject("WScript.Shell") Set WshProcEnv = WshShell.Environment("Process") On Error Resume Next Set objOU = GetObject("LDAP://OU=Drucker,OU=Print,DC=beispiel,DC=de") objOU.Filter = Array("group") For Each objUser in objOU Drucker = Mid(objUser.Name,11,14) Set objGroup = GetObject("LDAP://" & objUser.Name & ",OU=Drucker,OU=Print,DC=beispiel,DC=de") For each objMember in objGroup.Members Wscript.Echo objMember.Name Next Wscript.Echo Drucker Next Was noch nicht funktioniert: Ich bekomme bei den Gruppennamen die ersten Zeichen weg damit man nur den Druckernamen hat, leider sind diese aber unterschiedlich lang. Dadurch kann ich das _Server1 am Ende der Gruppe nicht richtig entfernen. Danke und Gruß Tobi Zitieren Link zu diesem Kommentar
Gast Geschrieben 5. Juni 2007 Melden Teilen Geschrieben 5. Juni 2007 Hi Tobi, anbei ein Ausschnitt meines Anmeldscripts. Im Vorfeld werden alle möglichen Paramter abgefragt bzw. festgelegt. Im Grunde ist es doch eigentlich egal wie lange der Gruppenname ist. Ich habe hier für alle Hostnamen aller Endgeräte einheitliche Längen. Musst eben an den richtigen Stellen deine Gruppen und Freigaben angeben. Set WSHNetwork = WScript.CreateObject("WScript.Network") Set WSHShell = WScript.CreateObject("WScript.Shell") Set objFSO = CreateObject("Scripting.FileSystemObject") Set objNetwork = WScript.CreateObject("WScript.Network") Set objShell = WScript.CreateObject("WScript.Shell") strUserDesktop = objShell.SpecialFolders.Item("Desktop") strUserStartup = objShell.SpecialFolders.Item("Startup") strUserFavorites = objShell.SpecialFolders.Item("Favorites") Set colEnvironmentVariables = objShell.Environment("Volatile") strUserFolder = colEnvironmentVariables.Item("APPDATA") & "\Microsoft\Internet Explorer\Quick Launch" Const OverwriteExisting = TRUE Const OverWriteFiles = TRUE On Error Resume Next Domain = WSHNetwork.UserDomain UserName = "" While UserName = "" UserName = WSHNetwork.UserName MyGroups = GetGroups(Domain, UserName) Wend While ComputerName = "" ComputerName = WSHNetwork.ComputerName Wend ''********************************************************************************* ''Function:", GetGroups ''********************************************************************************* Function GetGroups(Domain, UserName) Set objUser = GetObject("WinNT://" & Domain & "/" & UserName) GetGroups="" For Each objGroup In objUser.Groups GetGroups=GetGroups & "[" & UCase(objGroup.Name) & "]" Next End Function ''******************************************************************************** ''Function:", InGroup ''******************************************************************************** Function InGroup(strGroup) InGroup=False If InStr(MyGroups,"[" & UCase(strGroup) & "]") Then InGroup=True End If End Function 'Hier werden die Drucker über die Zugehörigkeit der Gruppe "Drucker1" zugewiesen. 'und als Standarddrucker eingestellt. objNetwork.RemovePrinterConnection "\\SERVER\DRUCKER1" If INGROUP ("DRUCKER1") Then WshNetwork.AddWindowsPrinterConnection "\\SERVER\DRUCKER1" WshNetwork.SetDefaultPrinter "\\SERVER\DRUCKER1" End If objNetwork.RemovePrinterConnection "\\SERVER\DRUCKER2" If INGROUP ("DRUCKER2") Then WshNetwork.AddWindowsPrinterConnection "\\SERVER\DRUCKER2" WshNetwork.SetDefaultPrinter "\\SERVER\DRUCKER2" End If 'Hier wird dem jeweiligen User in Abhängikeit an welchem PC er sich anmeldet zugwiesen. If UCase(UserName) = "Meier1" Then If UCase (ComputerName) = "PC4711" Then WshNetwork.SetDefaultPrinter "\\SERVER\DRUCKER1" End If If UCase (ComputerName) = "PC4712" Then WshNetwork.SetDefaultPrinter "\\SERVER\DRUCKER2" End If End If If UCase(UserName) = "Mueller1" Then If UCase (ComputerName) = "PC4711" Then WshNetwork.SetDefaultPrinter "\\SERVER\DRUCKER1" End If If UCase (ComputerName) = "PC4712" Then WshNetwork.SetDefaultPrinter "\\SERVER\DRUCKER2" End If End If Zitieren Link zu diesem Kommentar
(DR)NO 10 Geschrieben 8. Juni 2007 Autor Melden Teilen Geschrieben 8. Juni 2007 Hi, erstmal danke für die Tips. Das Druckerskript habe ich jetzt fertig, füge es unten mit ein. Allerdings wollte ich jetzt das ganze noch für Netzlaufwerke nutzen wo einfach eine Gruppenmitgliedschaft abgefragt wird. Bei KIX wurden auch die Vererbten Gruppen berücksichtigt, wenn ich das ganze mit dem Beispiel unten "IF INGROUP" mache funktioniert dies nur wenn direkt User in der Gruppe stehen! Es kann aber bei uns vorkommen das bis zu 3 Gruppen untereinander Verbunden sind, also in der dritten Gruppe der User steht. Hat vieleicht dort jemand eine Idee? Danke und Gruß Tobi '---------------------------------------------------------- 'Instanzieren des Windows Scripting Hosts '---------------------------------------------------------- Set Network = CreateObject("Wscript.Network") '---------------------------------------------------------- 'Löschen eventuell bestehender Printerconnections '---------------------------------------------------------- For i = 0 To network.EnumPrinterConnections.Count - 1 On Error Resume Next network.RemovePrinterConnection network.EnumPrinterConnections.Item(i) Next On Error Resume Next '---------------------------------------------------------- 'Verbinden der Netzwerkdrucker mit dem Gruppennamen '---------------------------------------------------------- Set objADSysInfo = CreateObject("ADSystemInfo") strUser = objADSysInfo.UserName Set objUser = GetObject("LDAP://" & strUser) For Each strGroup In objUser.memberOf Set objGroup = GetObject("LDAP://" & strGroup) 'WScript.Echo objGroup.CN Drucker = Mid(objGroup.CN,1,5) If Drucker = "Print" Then 'MsgBox objGroup.cn Dim Druckername, SuchZeichen, PositionEnde,TeilMitte,printname Druckername = objGroup.cn SuchZeichen="User" PositionEnde = InStr(6, Druckername, SuchZeichen, 1) TeilMitte = PositionEnde - 8 'MsgBox TeilMitte printname = Mid(objGroup.CN, 7, TeilMitte) 'MsgBox printname Set WshNetwork = CreateObject("WScript.Network") WshNetwork.AddWindowsPrinterConnection "\\printserver\" & printname End If Next Zitieren Link zu diesem Kommentar
Gast Geschrieben 8. Juni 2007 Melden Teilen Geschrieben 8. Juni 2007 Hi Tobi, etwa so.. If INGROUP("Gruppe1") OR INGROUP("Gruppe2") OR INGROUP("Gruppe3") Then wshnet.MapNetworkDrive "G:", "\\Server\Freigabe" End If die Funktion IF INGROUP ist aus meinem ersten Scipt zu nehmen.. Gruß Sigi Zitieren Link zu diesem Kommentar
(DR)NO 10 Geschrieben 11. Juni 2007 Autor Melden Teilen Geschrieben 11. Juni 2007 Hi, leider kann ich die Gruppen nicht benennen im Skript da wir viel mit Berechtigungsblöcken in Form von Gruppen arbeiten. In Kixtart wurde ja auch eine Vererbung berücksichtigt, funktioniert dies in VBS nicht? Danke und Gruß Tobi Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.