我能够使用PowerShell创建和安装打印机。现在我还需要自动执行打印机配置,并需要在“管理”选项卡中更改多个值。从管理选项卡PowerShell更改打印机配置
我怎样才能做到这一点通过PowerShell的?我试过Set-PrinterProperty,但是我无法使它工作。
感谢
我能够使用PowerShell创建和安装打印机。现在我还需要自动执行打印机配置,并需要在“管理”选项卡中更改多个值。从管理选项卡PowerShell更改打印机配置
我怎样才能做到这一点通过PowerShell的?我试过Set-PrinterProperty,但是我无法使它工作。
感谢
的一种方式,我发现很容易实现,这是从当前的打印机配置开始,使用Get-PrinterConiguration,再看看xml和改变任何你需要,然后使用Set-PrinterProperty推升新的xml。
以下是我前一段时间创建的更新打印机托盘的功能。它应该(希望)让你开始。要做到这一点
Function Set-MyDefaultPrinterTray {
#Requires -module PrintManagement
<#
.SYNOPSIS
Update Default Tray assignment of printer
.EXAMPLE
> Set-MyDefaultPrinterTray -ComputerName (Get-Content C:\temp\epicprinter\servers.txt) -PrintQueue ZZZ_Adil_Test03 -Tray 4 -Verbose
VERBOSE: Change tray to Tray4 on epswcdcqvm001
VERBOSE: Getting PrintConfiguration...
VERBOSE: epswcdcqvm001 : CurrentTray is psk:AutoSelect
VERBOSE: epswcdcqvm001 : New Tray ns0000:Tray4
VERBOSE: Performing the operation "Update Tray" on target "epswcdcqvm001".
VERBOSE: epswcdcqvm001 : Setting new tray assignment
VERBOSE: epswcdcqvm001 : Adding to success table
VERBOSE: Change tray to Tray4 on epswcdcqvm002
VERBOSE: Getting PrintConfiguration...
VERBOSE: epswcdcqvm002 : CurrentTray is psk:AutoSelect
VERBOSE: epswcdcqvm002 : New Tray ns0000:Tray4
VERBOSE: Performing the operation "Update Tray" on target "epswcdcqvm002".
VERBOSE: epswcdcqvm002 : Setting new tray assignment
VERBOSE: epswcdcqvm002 : Adding to success table
VERBOSE: Change tray to Tray4 on epswcdcqvm001
VERBOSE: Getting PrintConfiguration...
VERBOSE: epswcdcqvm001 : CurrentTray is ns0000:Tray4
VERBOSE: epswcdcqvm001 : New Tray ns0000:Tray4
VERBOSE: Performing the operation "Update Tray" on target "epswcdcqvm001".
VERBOSE: epswcdcqvm001 : Setting new tray assignment
Name Value
---- -----
epswcdcqvm002 Succeed
epswcdcqvm001 Succeed
.EXAMPLE
D:\> Set-MyDefaultPrinterTray -PrintServer 'epswcdcqvm001','epswcdcqvm002' -PrintQueue ZZZ_Adil_Test03 -Tray Tray2 -Verbose
VERBOSE: Change tray to Tray2 on epswcdcqvm001
VERBOSE: Getting PrintConfiguration...
VERBOSE: epswcdcqvm001 : CurrentTray is psk:AutoSelect
VERBOSE: epswcdcqvm001 : New Tray ns0000:Tray2
VERBOSE: Performing the operation "Set-EpicDefaultPrinterTray" on target "epswcdcqvm001".
VERBOSE: epswcdcqvm001 : Setting new tray assignment
VERBOSE: Change tray to Tray2 on epswcdcqvm002
VERBOSE: Getting PrintConfiguration...
VERBOSE: epswcdcqvm002 : CurrentTray is psk:AutoSelect
VERBOSE: epswcdcqvm002 : New Tray ns0000:Tray2
VERBOSE: Performing the operation "Set-EpicDefaultPrinterTray" on target "epswcdcqvm002".
VERBOSE: epswcdcqvm002 : Setting new tray assignment
#>
[CMDLETBINDING(SupportsShouldProcess)]
param(
[Parameter(Mandatory,ValueFromPipeline,Position=0)]
[Alias('PrintServer')]
[string[]]$ComputerName,
#[string[]]$PrintServer,
[Parameter(Mandatory,Position=1)]
[string]$PrintQueue,
[ValidateSet('1','2','3','4','Tray1','Tray2','Tray3','Tray4','AutoSelect','ManualFeed')]
$Tray='AutoSelect'
)
BEGIN
{
switch ($tray)
{
1 {$tray='Tray1';break}
2 {$tray='Tray2';break}
3 {$tray='Tray3';break}
4 {$tray='Tray4';break}
}
$result = @{}
}
PROCESS
{
Foreach ($ps in $ComputerName)
{
Write-Verbose "Change tray to $tray on $ps"
try
{
if (! (Test-Connection -ComputerName $ps -Count 1 -Quiet)) {
throw "Not Pingable"
}
Write-Verbose "Getting PrintConfiguration..."
$PrintConfiguration = Get-PrintConfiguration -ComputerName $ps -PrinterName $PrintQueue
$PrintTicketXML = [xml]$PrintConfiguration.PrintTicketXML
$currentTray = ($PrintTicketXML.PrintTicket.Feature).where({$_.name -eq 'psk:JobInputBin'}).option.name
Write-Verbose "$ps : CurrentTray is $currentTray "
if ($Tray -eq 'AutoSelect') {
$NewTray= "psk:$Tray"
} else {
$NewTray= "ns0000:$Tray"
}
Write-Verbose "$ps : New Tray $NewTray "
$UpdatedPrintTicketXML = $PrintConfiguration.PrintTicketXML -replace "$currentTray","$NewTray"
if ($PSCmdlet.ShouldProcess($ps,"Update Tray") ) {
Write-Verbose "$ps : Setting new tray assignment"
Set-PrintConfiguration -ComputerName $ps -printername $PrintQueue -PrintTicketXml $UpdatedPrintTicketXML
if (!$result.ContainsKey($ps)) {
Write-Verbose "$ps : Adding to success table"
$result.Add($ps,'Succeed')
}
}
}
catch
{
if (!$result.ContainsKey($ps)) {
Write-Verbose "$ps : Adding to fail table"
$result.Add($ps,'Fail')
}
Write-Error $error[0].exception
}
}
}
END
{
$result
}
}
最好的方法是使用下面的Windows工具,它应该,但当然不能保证,用“管理选项卡”工作。
这个工具的工作原理是,你首先设置打印机你想要的设置方式(配置相应的管理选项卡),并设置有这样的命令导出到文件(在CMD或PowerShell中):
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Ss /n "PRINTER_NAME" /a "C:\printerSettings.dat" g d u
在“PRINTER_NAME”您输入您想要的打印机名称(带引号),并在“C:...”,其中设置文件要保存的位置。在这里结束的参数不一定,与你指定什么得到保存到文件,没有任何参数一切都得到保存,这可能是最好的...
现在,您的设置保存在一个文件,你会然后用该文件具有相同的驱动程序恢复对其他打印机设置像这样的东西:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Sr /n "PRINTER_NAME" /a "C:\printerSettings.dat" g d u p i r
,你可能会注意到,用于保存命令“/ SS”和差值“/ SR”在最后恢复和不同的参数。这里有一点棘手的事情要注意 - 如果你用管理权限运行这个代码,上面的代码应该可以正常工作,否则你会得到一个错误。这里的问题是“g”参数,因为它试图改变/恢复打印机的默认设置,而不仅仅是当前用户的设置。用“u”恢复当前用户的设置。所以你可能需要删除“g”参数。
其他参数的链接描述,更重要的,我会复制到这里(这是恢复 - “/ SR”命令):
好吧,我能够得到的功能,但没有对应的管理选项卡。在这里,我得到的选项:http://pastebin.com/8NsSU2za –
不幸的是,并不是所有的东西都可以用来管理这种方式。帮助中记录了可能的情况。我没有办法测试,但看看Get-PrinterProperty和Set-PrinterProperty,看看你想要的属性是否有变化:https://technet.microsoft.com/en-us/library/hh918351 (v = wps.630).aspx –
我知道...关于Set-PrinterProperty函数我怎么知道属性名称?我怎样才能得到一个完整的清单?我尝试了盲目的名字,但是错误返回了:( –