Nachdem man – hoffentlich – erfolgreich einen Druckserver von einem Windows-Server auf einen anderen umgezogen hat ist der nächste Schritt die Umstellung auf den Clients. Wenn ich nicht Gruppenrichtlinien zur Druckerzuordnung verwenden kann verwende ich ein VB-Sript um die Drucker des Benutzers umzuziehen. Wenn der Benutzer das Script ausführt – entweder über eine Gruppenrichtlinie verteilt oder per login-script – werden die alten Drucker gelöscht und die Drucker automatisch über den neuen Druckserver verbunden – inklusive das setzten des Standarddruckers.
Bitte beachten: Die Freigabenamen der Drucker auf dem alten und auf dem neuen Druckserver müssen gleich sein. Falls es die für den alten Drucker verwendete Freigabe auf dem neuen Druckserver nicht gibt wird der Drucker gelöscht.
Hier das Script – die Variablen from_sv und to_sv anpassen und als .vbs abspeichern
Option Explicit Dim from_sv, to_sv, PrinterPath, PrinterName, DefaultPrinterName, DefaultPrinter Dim DefaultPrinterServer, SetDefault, key Dim spoint, Loop_Counter, scomma Dim WshNet, WshShell Dim WS_Printers DefaultPrinterName = "" spoint = 0 scomma = 0 SetDefault = 0 set WshShell = CreateObject("WScript.shell") from_sv = "\\sv-alt" 'Der alte Druckserver. to_sv = "\\sv-neu" 'Der neue Druckserver. On Error Resume Next key = "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device" DefaultPrinter = LCase(WshShell.RegRead (key)) If Err.Number <> 0 Then DefaultPrinterName = "" else spoint = instr(3,DefaultPrinter,"\")+1 DefaultPrinterServer = left(DefaultPrinter,spoint-2) if lcase(DefaultPrinterServer) = from_sv then DefaultPrinterName = mid(DefaultPrinter,spoint,len(DefaultPrinter)-spoint+1) scomma = instr(DefaultPrinterName,",") DefaultPrinterName = left(DefaultPrinterName,scomma -1) end if end if Set WshNet = CreateObject("WScript.Network") Set WS_Printers = WshNet.EnumPrinterConnections For Loop_Counter = 0 To WS_Printers.Count - 1 Step 2 PrinterPath = lcase(WS_Printers(Loop_Counter + 1)) if lcase(LEFT(PrinterPath,len(from_sv))) = from_sv then spoint = instr(3,PrinterPath,"\")+1 PrinterName = mid(PrinterPath,spoint,len(PrinterPath)-spoint+1) WshNet.RemovePrinterConnection from_sv+"\"+PrinterName if lcase(PrinterName) <> "c6100" then WshNet.AddWindowsPrinterConnection to_sv+"\"+PrinterName if DefaultPrinterName = PrinterName then WshNet.SetDefaultPrinter to_sv+"\"+PrinterName end if end if end if Next Set WS_Printers = Nothing Set WshNet = Nothing Set WshShell = Nothing ' wscript.echo "Drucker migriert"Wenn man das Script z.B. in einem Logon-Script beim Anmelden des Benutzers ausführen lässt, muss man in der Login-BAT bzw. CMD die Zeile
cscript //nologo drucker-migrieren.vbs
einfügen.
Dann werden beim anmelden alle Drucker automatisch umgezogen.
Funktionierte bei mir schon bei einigen Migrationen wunderbar 🙂
Hallo,
Ihr Script ist leider fehlerhaft, da größer und kleiner als leider im HTML Code angezeigt werden.
Bei der Verwendung Ihres Scripts kommt es daher leider zu einem Parsing Error in Zeile 20.
Hallo, auf was für einem System?
Ich hab das früher unter Windows7 verwendet -> unter Windwos10 würde ich das immer per GPO machen bzw. hab ich das Script noch nicht getestet…