california92
Goto Top

Drucker in der Domäne per AnmeldeSkript löschen

Wir installieren in unserer Domäne (Windows 2003) die Netzwerkdrucker vom Druckserver per VBS Skript.

Beispiel:

Option Explicit
On Error Resume Next
Dim WSHNetwork, PrintSRV
PrintSRV = "Druckserver"
Set WshNetwork = Wscript.CreateObject("WScript.Network")
WshNetwork.RemovePrinterConnection "Druckername"
WshNetwork.AddWindowsPrinterConnection "\\" & PrintSRV & "\Druckername"
'WshNetwork.SetDefaultPrinter "\\" & PrintSRV & "\Druckername"

Nun habe ich aber das Problem, dass die Drucker installiert bleiben. Wenn der Drucker physikalisch nicht mehr existiert, bleibt der Installierte Drucker beim User als "Altlast" zurück.

Gibt es die Möglichkeit die installierten Drucker in einem Abmeldeskript beim Herunterfahren des PCs zu entfernen? Lokal installierte Drucker sollen davon ausgenommen bleiben.

Da ich zum Entfernen von Netzwekdruckern nicht Brauchbares finden konnte stelle ich die Frage hier mal ein.

Vielen Dank für Euere Hilfe.

california92

Content-Key: 47139

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

Printed on: April 18, 2024 at 03:04 o'clock

Member: Quenck
Quenck Dec 20, 2006 at 11:05:13 (UTC)
Goto Top
Google mal nach WSHNetwork.Enumprinterconnections

Damit kannst du dir ein Array der Druckerverbindungen erzeugen und in einer for...each schleife mit RemovePrinterConnection entfernen.

Marko
Member: gemini
gemini Dec 20, 2006, updated at Oct 18, 2012 at 15:57:34 (UTC)
Goto Top
Hi california,

ich hab momentan das hier laufen:
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")  
Set colPrinters =  objWMIService.ExecQuery("Select * from Win32_Printer")  
For Each objPrinter in colPrinters
	If Left(objPrinter.Name, 8) = "\\" & strPrintSRV2 Then  
		WshNetwork.RemovePrinterConnection "\\" & strPrintSRV2 & "\" & objPrinter.ShareName, blnForce  
	End If
Next

Tom73 hat in seinem Tutorial - Netzwerkdrucker automatisch verbinden - ein Lösungsvorschlag eine elegantere Lösung zum löschen eingesetzt
Set objNetwork = WScript.CreateObject("WScript.Network")  
Set objPrinters = objNetwork.EnumPrinterConnections
For intLoop = 0 to objPrinters.Count - 1
	objNetwork.RemovePrinterConnection objPrinters.Item(intLoop),-1,-1
	WScript.Sleep 500
Next

HTH,
gemini
Member: california92
california92 Dec 20, 2006 at 11:28:49 (UTC)
Goto Top
Ich habe dazu folgendes gefunden:

Set WshNetwork = WScript.CreateObject("WScript.Network")
Set Printers = WshNetwork.EnumPrinterConnections
li = "Installierte Drucker: " & vbcr
For i = 0 to Printers.Count - 1 Step 2
li = li & Printers.Item(i) & " " & Printers.Item(i+1) & vbcr
Next
msgbox(li)


Damit werden alle installierten Drucker in einer Infobox aufgelistet. Wenn ich damit versuchen werde die Drucker zu löschen gehen doch auch meine lokal installierten Drucker weg?
Was muss ich umschreiben im Skript, dass die Löschung per RemovePrinterConnection startet?

Danke!
Member: california92
california92 Dec 20, 2006 at 11:53:13 (UTC)
Goto Top
Bekomme leider kein brauchbares Ergebnis hin.

Gibt es denn nicht irgeneine Möglichkeit alle Drucker mit \\druckserver\druckername zu entfernen? Mit einem Dreizeiler installiert. Muss doch auch so wieder zum Löschen gehen?

Vielen Dank nochmal
Member: gemini
gemini Dec 20, 2006 at 12:14:13 (UTC)
Goto Top
Bekomme leider kein brauchbares Ergebnis hin.
Wo hakt es denn?
Ich habe dir oben zwei Möglichkeiten gepostet, die erste habe ich im Einsatz, ist zwar nicht so elegant aber funktioniert soweit, du musst nur die Variablen entspr. belegen und blnForce durch TRUE ersetzen.

Die zweite Möglichkeit habe ich nicht getestet, schaut aber sehr gut aus und funktioniert auch, sonst wäre das Feesback auf Tom73's Beitrag nicht so positiv gewesen.

Und mach zum testen das On Error Resume Next raus damit du siehst wo es kracht
Member: california92
california92 Dec 20, 2006 at 12:27:39 (UTC)
Goto Top
Ich habe die Lösung gefunden:

Option Explicit
On Error Resume Next

Dim WshNetwork, PrintSRV
PrintSRV = "Druckserver"

Set WshNetwork = Wscript.CreateObject("Wscript.Network")

WshNetwork.RemovePrinterConnection "\\" & PrintSRV & "\Druckername"


Set WshNetwork = Nothing


Ich nehme einfach die bei der Anmeldung installiereten Drucker mit in dieses kurze Abmeldeskript. Alle Drucker sind dann sauber entfernt.

Danke für Euere Unterstützung!
Member: gemini
gemini Dec 20, 2006 at 19:41:19 (UTC)
Goto Top
Ich habe die Lösung gefunden:
Das entlockt mir doch ein leichtes lächeln face-wink
Zum einem hattest du das in deinem Ursprungspost schon fast richtig drin, zum anderen fragtest du
Gibt es denn nicht irgeneine Möglichkeit __alle Drucker__ mit \\druckserver\druckername zu entfernen

Nun, deine Lösung hat zwei Nachteile:
1) Es werden nicht alle Drucker automatisch entfernt, sondern nur die für die du eine Zeile mit RemovePrinter... einfügst
2) Die Idee mit dem Abmeldescript bewirkt, dass du Änderungen beim Druckerbestand an zwei Stellen pflegen musst.

Ich entferne die Drucker im Loginscript bevor sie neu gemappt werden.
Evtl. Druckerleichen zu beseitigen ist dabei nur ein Nebeneffekt, der eigentliche Grund liegt darin, dass Änderungen der Druckereinstellungen so sicher und zuverlässig auf die Clients übertragen werden.

Was Pflegefreundlichkeit anbetrifft ist der Ansatz vom Tom73 der beste.
Wenn ich Zeit habe werde ich das auch noch implementieren.

Gruß,
gemini
Mitglied: 65440
65440 May 21, 2008 at 09:56:19 (UTC)
Goto Top
Hallo,

dafür gibt es das Tool con2prt.exe. (http://www.gruppenrichtlinien.de/tools/con2prt.exe)

Mit dem Parameter /f (z. B. "c:\con2prt.exe /f") werden alle installierten Drucker entfernt.