禁用打印机的“双向通信”?

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-CimInstanceSet-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 

【讨论】:

以上是关于禁用打印机的“双向通信”?的主要内容,如果未能解决你的问题,请参考以下文章

RN与IOS原生双向通信以及UI绑定通信的使用方式

autojs双向通信

独立程序的多对一双向通信

c#命名管道双向通信

使用 Websocket 的两个设备之间的双向通信

Thrift --- 支持双向通信