Windows Powershell-Skript Probleme beim Drucken mit -PrintTo?

1 Antwort

Die richtige Angabe der Druckernamen ist immer eine heikle Sache. Allzu schnell liegt "Menschlein" falsch. Bist Du Dir wirklich sicher, das Du den Druckernamen so übergeben hast wie er im System eingetragen ist?

 Get-Printer | Select Name

vielleicht setzt Du einfach ein simples Auswahlmenü an den Anfang deines Scripts?

$MyPrinter = Get-Printer | Out-GridView -OutputMode Single
$MyPrinter #mal gesamte Information anzeigen
$PrintName = $MyPrinter.Name
$PrintName #Guck...
gci '*.pdf'| %{ Start-Process $_.FullName -Verb PrintTo $PrintName}

oder lass where-object mit den Operatoren -like oder -match automatisch, basierend auf relevanten Teilen des Druckernamen wählen: (ich hab hier nur zu Demo den M$-PDFdrucker verwendet, weil der auf jedem System zu finden ist)

Get-Printer | ? {$_.Name -like '*to PDF*'}
Get-Printer | ? {$_.Name -like 'Mi*PDF'}
Get-Printer | ? {$_.Name -match 'Microsoft.+PDF'}

vielleicht liegt der Fehler auch bei Deiner Druckanwendung, aber das ist dann nicht Sache des Poweshellscripts.

Du kannst auch einfach den DefaultDrucker neu festlegen:

 #DruckerDaten Für Default speichern
$OldPrinter = Get-CimInstance -ClassName CIM_Printer | WHERE {$_.Default -eq $True}
Write-Host Aktueller Defaultprinter: $OldPrinter.Name -fo green
$NewPrinter = (Get-Printer | ? {$_.Name -like 'Fax'}).Name
 # wir müssen mit Cimdatenobjekt arbeiten, also kleine Umwandlung
$PrinterData = Get-CimInstance -ClassName CIM_Printer |?{$_.Name -eq $NewPrinter}|Select-Object -First 1
$PrinterData | Invoke-CimMethod -MethodName SetDefaultPrinter #neue default Druckerkonfig setzen
Write-Host Aktueller Defaultprinter: $((Get-CimInstance -ClassName CIM_Printer |?{$_.Default -eq $True}).Name) -fo red

$OldPrinter|Invoke-CimMethod -MethodName SetDefaultPrinter #alte Druckerkonfig setzen
Write-Host Aktueller Defaultprinter: $((Get-CimInstance -ClassName CIM_Printer |?{$_.Default -eq $True}).Name) -fo green
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren