dani
Goto Top

Migration von Netzwerkdruckern auf Arbeitsplatzsystemen mit Hilfe von Powershell

Hallo zusammen,
wir ziehen in nächster Zeit alle Printserver auf Windows Server 2012R2 hoch. Das Problem dabei ist, dass diese Printserver neue IP-Adressen und DNS-Namen erhalten werden. D.h. an sämtlichen Arbeitsplatzsysteme müssen die alten Netzwerkdrucker gelöscht und die identischen vom neuen Druckserver verbunden werden.

Der Ablauf sieht in etwa so aus:
1) Alle Netzwerkdrucker auslesen
2) Standarddrucker auslesen
3) Alle Netzwerkdrucker löschen
4) Netzwerkdrucker auf dem neuen Druckserver verbinden
5) Standarddrucker setzen

Nun würden einige vielleicht sagen, dass Ganze soll jeder Mitarbeiter manuell für sich durchführen. Bei uns sind es zu viele Drucker und zu viele Mitarbeiter. Außerdem würden mit Sicherheit die Supportanfragen im Umstellungszeitraum stark zunehmen, was wiederum unnötig Supporter bindet. Es bleibt an Ende nur eine Möglichkeit: Automatisierte Umstellung ohne Benutzereingriff.

Bei uns bleiben die Druckernamen auf den neuen Systemen die Gleichen wie bisher. Diese Entscheidung kommt uns natürlich entgegen.
Ich habe mir bereits ein Batchskript angeschaut. Dies setzt leider diverse Tools, etc... voraus. Was mir eher ein Dorn im Auge ist. da man hinterher aufräumen muss.

Allgemein sind Skriptsprachen nicht mein Ding und habe mich daher für ein Powershellskript entschieden. Voraussetzung ist, dass auf den Clients min. Powershell Version 1 installiert ist.

Das Script sieht so aus:
# Author: xxx
# Create: 24.12.2013
# Modified: 02.01.2013

# Version: 0.2
- Fix case insensitive


$old_printserver = "printserver01"  
$new_printserver = "printserver02"  

# Alle Drucker auslesen, die als Netzwerkdrucker markiert sind und in ein Array speichern.
$printers = @(Get-WMIObject Win32_Printer | where{$_.network -eq "true"} | Select-Object -expandProperty Name)  


# Standarddrucker auslesen und in eine Variable speichern
$default_printer = Get-WMIObject Win32_Printer | where{$_.default -eq "true"} | Select-Object -expandProperty Name  


# Alle Drucker löschen, die im Array stehen.
foreach($element in $printers) { (New-Object -ComObject WScript.Network).RemovePrinterConnection("$element") }  


# Alle Drucker wieder anlegen, welche im Array stehen.
$printer = [WMIClass]"\\.\root\cimv2:Win32_Printer"  
foreach($element in $printers) { $printer.AddPrinterConnection($element -Replace("$old_printserver", "$new_printserver")) }  


# Standarddrucker wieder definieren
$default_printer = $default_printer.replace("$old_printserver", "$new_printserver")  

$printer = Get-WmiObject Win32_Printer | ? { $_.name -like "*$default_printer*"}  
$printer.SetDefaultPrinter()
Getestet wurde das Skript unter Windows Professional/Enterprise 7, SP1 (32Bit und 64Bit) mit UAC.
Gleich am Anfang definiert man den DNS-Namen des alten und neuen Printservers. Ansonsten ist nichts zu berücksichtigen.
Wichtig ist, wenn das Skript nicht entspechend signiert ist, muss die Skript-Ausführungsrichtlinie angepasst werden. Wie das geht steht in diesem Technetartikel.


Viele Grüße,
Dani

Content-Key: 225725

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

Printed on: April 20, 2024 at 02:04 o'clock