禁用打印机的“双向通信”?
Posted
技术标签:
【中文标题】禁用打印机的“双向通信”?【英文标题】:Disable 'Bidirectional communication' for a printer? 【发布时间】:2018-02-26 16:06:17 【问题描述】:如何使用 powershell 禁用“双向通信”?
运行时可以看到EnableBIDI
:
get-WmiObject -class Win32_printer | fl *
但是当我尝试这个时,它说找不到该属性?
Set-PrinterProperty -PrinterName "Some Printer" -PropertyName "EnableBIDI" -Value $False
【问题讨论】:
我之前在 HP JetDirect 上遇到过这个问题,代码不是纯 PowerShell,因为它使用 printui.dll 进行更改,但可能会对您有所帮助:Invoke-Expression -command "rundll32 printui.dll,PrintUIEntry /Xs /n 'MyPrinterName' attributes -EnableBidi"
EnableBIDI 属性为读/写,因此您应该可以使用 WMI 对象对其进行设置。
@JamesC。使用属性时如何指定值 -EnableBidi
另外,Set-PrinterProperty 仅设置某些属性。 docs.microsoft.com/en-us/powershell/module/printmanagement/…
【参考方案1】:
您正在混合来自两个不同 WMI 类的属性。 Set-PrinterProperty
操作 root/standardcimv2
命名空间中未记录的 MSFT_PrinterProperty
类的实例,该命名空间与您之前命令中的 Win32_Printer
class 具有不同的属性。
相反,操作 Win32_Printer
类的所需实例,因为它具有您想要的属性,然后调用 Put()
提交更改。这在使用海拔高度运行时对我有用:
$printer = Get-WmiObject -Class 'Win32_Printer' -Filter 'Name = ''My Printer Name'''
$printer.EnableBIDI = $false
$printer.Put()
使用较新的CimCmdlets
module,您可以使用Get-CimInstance
和Set-CimInstance
cmdlet 以类似的方式进行更改...
$printer = Get-CimInstance -ClassName 'Win32_Printer' -Filter 'Name = ''My Printer Name'''
$printer.EnableBIDI = $false
Set-CimInstance -InputObject $printer
...或将其简化为单个管道...
Get-CimInstance -ClassName 'Win32_Printer' -Filter 'Name = ''My Printer Name''' `
| Set-CimInstance -Property @ EnableBIDI = $false
...甚至将其简化为单个 cmdlet 调用...
Set-CimInstance -Query 'SELECT * FROM Win32_Printer WHERE Name = ''My Printer Name''' -Property @ EnableBIDI = $false
【讨论】:
以上是关于禁用打印机的“双向通信”?的主要内容,如果未能解决你的问题,请参考以下文章