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