首页 > 解决方案 > 更改打印队列的默认设置

问题描述

我们正在创建一个从 Excel 文件收集用户输入的脚本。每行代表一台打印机及其特定设置。所以对于每一行,我们需要在打印服务器上创建一个打印队列。

我们正在努力为打印机设置默认设置,因此当网络上的用户将打印机添加到他/她的系统时,设置会从打印服务器上的队列中接管。

示例PageOrientation

在服务器上的打印队列中,我们选择Properties > Preferences > Basic我们设置的位置PageOrientation = Landscape。当用户在他/她的系统上安装网络打印机时使用这些设置:

默认打印首选项

在 PowerShell 中,我们尝试请求 的值PageOrientation并期望找到Landscape但总是得到Portrait

一些代码:

Add-Type -AssemblyName System.Printing
$permissions = [System.Printing.PrintSystemDesiredAccess]::AdministrateServer
$queueperms = [System.Printing.PrintSystemDesiredAccess]::AdministratePrinter
$server = New-Object System.Printing.PrintServer -argumentList $permissions
$queues = @($server.GetPrintQueues())
$Printer = $queues.Where( {$_.Name -eq $testPrinter.PrinterName})

# Results all in 'Portrait' not 'Landscape'
$Printer.CurrentJobSettings.CurrentPrintTicket.PageOrientation
$Printer.DefaultPrintTicket.PageOrientation
$Printer.PropertiesCollection.UserPrintTicket.value.PageOrientation
$Printer.PropertiesCollection.DefaultPrintTicket.value.PageOrientation
$Printer.UserPrintTicket.PageOrientation

尝试Set-PrintConfiguration用于更改默认托盘在选中时会反映更改Get-PrinterConfiguration,但它在 GUI 中不可见,并且在用户添加网络打印机时也不会作为默认值应用。

$PrintConfiguration = Get-PrintConfiguration -PrinterName $PrinterName
$PrintTicketXML = [XML]$PrintConfiguration.PrintTicketXML
$CurrentTray = ($PrintTicketXML.PrintTicket.Feature).where( {$_.name -eq 'psk:JobInputBin'}).option.name
$NewTray = if ($Tray -eq 'AutoSelect') {"psk:$Tray"} else {"ns0000:$Tray"}
$UpdatedPrintTicketXML = $PrintConfiguration.PrintTicketXML -Replace "$CurrentTray", "$NewTray"
Set-PrintConfiguration -PrinterName $PrinterName -PrintTicketXml $UpdatedPrintTicketXML

我们在哪里可以找到这些默认属性,如Default tray, Paper type, ... 最重要的是设置它们的值?

标签: .netpowershellprinting

解决方案


大家好,我的回答可能为时已晚,但无论如何我都会发布,如果它可以帮助某人,您可以使用 KMDRVSET 来自柯尼卡美能达的 cmd 控制工具。它在 Konica InfoHub 上可用,如果您无法访问 InfoHub,请与 KM 技术人员联系。 手动的


推荐阅读