#.net #powershell #printing
#.net #powershell #печать
Вопрос:
Мы создаем скрипт, который собирает вводимые пользователем данные из файла 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
, но оно не отображается в графическом интерфейсе и также не применяется по умолчанию, когда пользователь добавляет сетевой принтер.
$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
, … и, что наиболее важно, установить их значения?
Комментарии:
1. Я не смог найти способ установить их для принтеров Konica, когда я изучал это несколько лет назад, их служба поддержки также не имела ни малейшего представления. Просматриваю этот вопрос, чтобы узнать, повезло ли кому-нибудь еще!
Ответ №1:
Всем привет, мой ответ может быть слишком запоздалым, но я все равно публикую, если это может кому-то помочь, вы можете использовать KMDRVSET инструмент управления cmd от Konica minolta. это доступно на информационном портале Konica, обратитесь к специалисту по КМ, если у вас нет доступа к InfoHub. Руководство