rzlbrnft
Goto Top

Powershell Script zur Migration auf einen neuen Druckserver (Printserver-Migration)

Wir sind gerade bei der Umstellung auf Server 2012 und haben mittlerweile alle XP Kisten aus unserem Netzwerk entfernt.
Da alle Server neue Namen bekommen stellte sich mir die Aufgabe eine Lösung zu finden um den jeweiligen Druckserver Namen möglichst einfach zu ändern.
Da viele User aufgrund von wechselnden Standorten individuelle Einstellungen nutzen verwenden wir keine per GPO bereitgestellten Drucker.

Wir hatten bereits einige Male VBScript verwendet, funktionierte manchmal gut manchmal nicht so, daher haben wir es jetzt mal mit Powershell versucht.
Heraus kam ein relativ einfaches übersichtliches Script was mit Parametern aus einer Batch heraus aufgerufen werden kann.
Vielleicht nützt es ja jemandem etwas der sowas sucht.

Hier das Script.

# Script changeprinters.ps1 by finzlbrother aka rzlbrnft
$ErrorActionPreference = "SilentlyContinue"  

# Read print server from the arguments
$OldPrintserver = $args 
$NewPrintserver = $args[1] 

# Script ends here if no arguments present
if($OldPrintserver -and $NewPrintserver)
{ 
	# Read all existing printers on the old server
	$Printers = Get-WMIObject Win32_Printer -Filter "Name LIKE '%$OldPrintserver%' "   

	# Create empty array for list of old printers
	$oldPrinters = @() 

	if($Printers) 
	{ 
		  # Define network object
		  $global:net = new-Object -com WScript.Network 

		  # Path to new printer connection is generated and connected, if printer is default the new printer is also set to default
		  foreach ($Printer in $Printers) 
		  { 

			$newPrinter = "\\" + $NewPrintserver + "\" + $Printer.Sharename  

			$global:net.AddWindowsPrinterConnection($newPrinter) 
			if ($Printer.Default) {	$global:net.SetDefaultPrinter($newPrinter) } 
			
			$newPrinter = ""   
			$oldPrinters += $Printer.Name

		  } 

		  #Old printers are deleted
		  foreach ($oldPrinter in $oldPrinters)
		  {
			$global:net.RemovePrinterConnection($oldPrinter) 
		  }
	} 
}

Dieses Script kann man jetzt als *.ps1 im Netlogon Ordner ablegen.
Aus einer Batchdatei heraus wird das Script folgendermaßen aufgerufen:

powershell Set-ExecutionPolicy RemoteSigned
powershell "\\domain.local\NETLOGON\PS\changeprinters.ps1 druckserver1 druckserver2"  

druckserver1 wäre hier der alte Server, druckserver2 der neue.
Voraussetzung ist, das der Druckername auf beiden Servern gleich bleibt und sowohl Treiber für 32bit als auch für 64bit Systeme vorhanden sind.

Auf Windows 7 ist das ausführen von unsignierten Scripts per default deaktiviert.
Macht hier natürlich wenig Sinn, heißt es muss entweder per Powershell die Policy auf RemoteSigned gesetzt werden oder in der GPO unter "Computerverwaltung\Administrative Vorlagen\Windows-Komponenten\Windows PowerShell" das Skripting für alle aktiviert werden. Wenn man mehr mit Powershell machen will macht der Weg über die GPO mehr Sinn.

Content-Key: 237265

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

Ausgedruckt am: 29.03.2024 um 00:03 Uhr