Windows Powershell-Skript Probleme beim Drucken mit -PrintTo?
Hallo,
ich möchte gerne Dokumente über ein Script ausdrucken lassen. Wenn ich den Standarddrucker verwende ist alles ohne Probleme (-Verb Print). Wenn ich jedoch "-Verb PrintTo "Druckername"" angebe, zeigt der PDF-Viewer die Fehlermeldung, dass keine Druckerinformationen abgerufen werden konnten. Wie kann ich nur für dieses Script einen festen Drucker einstellen?
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