Powershell – Druckereinstellungen interaktiv kopieren

Viele Drucker speichern ihre Drucktreibereinstellungen in einer Art XML Format. Dies kann man nutzen um die Einstellungen von einem auf einen anderen Drucker mit gleichen Treiber zu kopieren.

Daher fr├Ągt das Skript von welchem Drucker die Einstellungen kopiert werden soll und schl├Ągt danach vor auf welche Drucker (mit dem gleichen Treiber) die Einstellungen eingef├╝gt werden k├Ânnen. Hierbei lassen sich alle m├Âglichen Einstellungen kopieren. Von Farbe, ├╝ber Duplex, Papierfach, Qulait├Ąt…

#Druckservername
$server = "srvprt1"
if (!$server) {
	write-warning "Kein Server gesetzt"
	break
}
$Error.Clear()
$allPrinters = get-printer * -ComputerName $server
if($Error) {
	write-error "Server konnte nicht ausgelesen werden"
	break
}
write-host "Gew├╝nschter Drucker dessen Eigenschaften kopiert werden soll w├Ąhlen"
$selectedPrinterSource = $allPrinters | Out-GridView -OutputMode Single -Title "Von welchem Drucker soll kopiert werden?"
if (!$selectedPrinterSource) {
	write-warning "Kein Drucker gew├Ąhlt"
	break
}
write-host "Lese Druckerkonfiguration ein"
$selectedSettings = Get-PrintConfiguration $selectedPrinterSource #Lade die gew├╝nschte Drucker Konfiguration
if (!$selectedSettings) {
	Write-Error "Die Einstellungen des Druckers konnten nicht ausgelesen werden"
	break
}

#Printer nur mit gleichem Treiber vorschlagen
$equalDriverPrinter = @()
foreach($printer in $allPrinters) {
	if($printer.DriverName -eq $selectedPrinterSource.DriverName) {
		$equalDriverPrinter += $printer
	}
}

write-host "Drucker ausw├Ąhlen in die die Eigenschaften eingef├╝gt werden sollen"
write-host -NoNewline "Soruce`t`tDestination`n$($selectedPrinterSource.ShareName) -> "
$selectedPrinterDestination = $equalDriverPrinter | Out-GridView -PassThru -Title "Auf welche Drucker sollen die Daten ├╝bertragen werden?"
if (!$selectedPrinterDestination) {
	write-host "`n" #Zeilenumbruch, damit die Warnung auch wirklich in der neuen Zeile ist
	write-warning "Kein Zieldrucker gew├Ąhlt"
	break
}

$errorCount = 0
$successCount = 0
foreach($printer in $selectedPrinterDestination) {
	write-host -NoNewline "$($printer.ShareName) "
	$Error.Clear()
	Set-PrintConfiguration -PrintTicketXml $selectedSettings.PrintTicketXML $printer
	if($Error) {
		$errorCount++
		write-host -NoNewline "`n"
		write-error "Einstellungen f├╝r Drucker $($printer.ShareName) konnte auf Server $server nicht angepasst werden"
	}
	else {
		$successCount++
	}
}

Write-Host "`n$successCount Drucker erfolgreich angepasst"
Write-Host "$errorCount Anpassungen fehlgeschlagen"

Schreibe einen Kommentar