更改打印队列的默认设置

时间:2019-03-28 09:25:57

标签: .net powershell printing

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

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

带有PageOrientation

的示例

在服务器的打印队列上,选择Properties > Preferences > Basic,在其中设置PageOrientation = Landscape。当用户在其系统上安装网络打印机时,将使用以下设置:

Default printing preferences

在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 trayPaper type,...,最重要的是设置它们的值?

0 个答案:

没有答案