Jump to content

Drucker mit VBS Script neu verbinden - Gehen die Einstellungen verloren?


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...