beaver 10 Geschrieben 12. April 2010 Melden Teilen Geschrieben 12. April 2010 Hallo zusammen Eine kleine Frage.... Wir löschen mit folgendem Code alle Netzwerkdrucker beim Login und verbinden diese danach wieder neu. Je nachdem,in welcher AD Gruppe der Benutzer sich befindet, bekommt er dann die verschiedenen Drucker verbunden. Set WSHNetwork = WScript.CreateObject("WScript.Network") Dim colPrinters Set colPrinters = WshNetwork.EnumPrinterConnections For i = 0 to colPrinters.Count - 1 Step 2 'WScript.Echo "Port " & colPrinters.Item(i) & " = " & colPrinters.Item(i+1) WshNetwork.RemovePrinterConnection colPrinters.Item(i+1), true, True Next Das Problem dabei ist, das der Standarddrucker und alle Druckereinstellungen, die der Benutzer manuell gemacht hat, dabei verloren gehen. Hat jemand eine Idee wie man das am besten lösen könnte? Vielleicht irgendwie nur die Drucker löschen, die der Benutzer nicht benötigt....sprich, sich nicht in der entsprechenden Gruppe befindet? Kann man das überhaupt? Ich bin leider totaler VBS Anfänger :D Es handelt sich übrigens um ca. 50 Drucker! Ich bin sehr dankbar für jede Idee! :) Danke und Gruss Dani Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 12. April 2010 Melden Teilen Geschrieben 12. April 2010 Moin, bevor wir hier rumrätseln, was ihr mit diesem Verfahren erreichen wollt, willst du uns sicher erzählen, was denn eigentlich euer Ziel ist. Gruß, Nils Zitieren Link zu diesem Kommentar
beaver 10 Geschrieben 14. April 2010 Autor Melden Teilen Geschrieben 14. April 2010 Hallo Nils Danke für deine Antwort uns sorry das ich nicht gleich geschrieben habe was wir erreichen wollen. :rolleyes: Da wir viele Benutzer haben, die immer wieder intern den Arbeitsplatz wechseln und somit auch immer wieder andere Drucker benötigen, wollten wir eine Funktion ins Script einbauen die kontrolliert ob lokal ein Netzwerkdrucker exisitert, den der Benutzer gar nicht mehr benötigt. Zum Beispiel: 1. Benutzer ist in den AD Gruppen PR01 und PR02. PR01 und PR02 werden also übers Login-Script verbunden. 2. Benutzer wechselt den Standort 3. Benutzer wird in der AD aus den Gruppen Printer PR01 und PR02 herausgenommen und den Gruppen PR03 und PR04 (Drucker am neuen Standort) hinzugefügt. 4. Benutzer meldet sich am neuen Standort an und bekommt die neuen Drucker verbunden. Da die alten Drucker nicht gelöscht werden hat der Benutzer jetzt 4 Drucker wovon er 2 nicht mehr benötigt Zuerst haben wirs einfach damit versucht alle Netzwerkdrucker zu löschen bevor die Drucker über die Gruppenzugehörigkeit wieder verbunden werden. Das wäre ja ganz einfach zu lösen. Aber mit dieser Methode gehen ja, soweit ich weiss, die Druckereinstellungen, die ein Benutzer lokal gemacht hat immer wieder verloren. Also wollten wir ein Script das nur die nicht erforderlichen Drucker löscht und nicht gleich alle. Wir haben es jetzt folgendermassen gelöst ;) Das Script geht alle lokal verbundenen Netzwerkdrucker durch und nimmt den String \\Server\PR01 auseinander damit nur noch PR01 bleibt. Über die Funktion "If Not InGroup (PR01)" prüfe ich dann ob sich der Benutzer in der entsprechenden Gruppe befindet. Wenn nicht wird der Drucker gelöscht. Bei uns sind Gruppenname und Druckerfreigabename zum Glück identisch :) Set WshNetwork = WScript.CreateObject("WScript.Network") 'Ermittelt den aktuellen Benutzernamen,die Benutzerdomäne und alle Gruppen 'in der sich der Benutzer befindet While strUser = "" strDomain = WSHNetwork.UserDomain strUser = WSHNetwork.UserName MyGroups = GetGroups(strDomain, strUser) Wend 'Löscht Netzwerkdrucker die dem Benutzer nicht über eine AD Gruppe zugewiesen wurden Set Printers = WSHNetwork.EnumPrinterConnections For i = 0 To Printers.Count -1 Step 2 If Left(Printers.Item(i +1),2) = "\\" Then 'Definiert die Variablen DruckerName und Drucker DruckerName = Printers.Item(i+1) Drucker = Printers.Item(i+1) 'Ändert den Namen des Druckers damit nur PRXX angezeigt wird -> so heisst auch die Gruppe DruckerName = Replace(DruckerName, "\\Server\", "",1,-1,1) 'Löscht Netzwerkdrucker die dem Benutzer nicht über eine AD Gruppe zugewiesen wurden If Not InGroup (DruckerName) Then On Error Resume Next 'msgbox("Benutzer ist nicht in der Gruppe " & DruckerName & ". Der Drucker " & Drucker & " wird gelöscht") WshNetwork.RemovePrinterConnection Drucker, True, True End If End If Next 'Prüft ob sich der aktuelle Benutzer in der angegebenen Gruppe befindet Function InGroup(strGroup) InGroup=False If InStr(MyGroups,"[" & UCase(strGroup) & "]") Then InGroup=True End If End Function 'Ermittelt alle Gruppen, indem der aktuelle Benutzer ist 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 So...ich wollte das nur noch mitteilen. :D Gruss, Dani Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 14. April 2010 Melden Teilen Geschrieben 14. April 2010 Moin, ähm - das heißt, du hast die Sache jetzt selbst gelöst, richtig? Gruß, Nils Zitieren Link zu diesem Kommentar
beaver 10 Geschrieben 21. April 2010 Autor Melden Teilen Geschrieben 21. April 2010 genau ;-) Danke trotzdem! 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.