【发布时间】:2019-03-28 09:25:56
【问题描述】:
我们正在创建一个从 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 等这些默认属性,最重要的是设置它们的值?
【问题讨论】:
-
几年前当我研究柯尼卡打印机时,我无法找到设置这些的方法,他们的支持也没有任何想法。看这个问题,看看其他人有没有运气!
标签: .net powershell printing