禁用所有 TCP/IP 打印机端口上的 SNMP 状态

禁用所有 TCP/IP 打印机端口上的 SNMP 状态

在Windows 7 / 8[.1]上,您可以以管理员身份通过命令行配置打印机和端口信息,例如:

cd /d %WINDIR%\System32\Printing_Admin_Scripts\en-US
prnmngr -s computer-01 -l

将使用我的登录凭据列出连接到的打印机computer-01。这将产生多行输出,包括打印机端口。我的目标是找到打印机端口(假设它是 TCP/IP 端口),然后运行命令prnport以禁用该端口上的 SNMP 状态。以下是两台不同打印机的示例输出,一台是 USB,另一台是 TCP/IP 打印机:

Server name
Printer name JMC-KMC224-BW
Share name
Driver name KONICA MINOLTA C364SeriesPCL
Port name IP_192.168.0.11
Comment
Location
Print processor KOAYTJ_P
Data type RAW
Parameters
Attributes 2628
Priority 1
Default priority 0
Average pages per minute 0
Printer status Idle
Extended printer status Unknown
Detected error state Unknown
Extended detected error state Unknown

Server name
Printer name DYMO LabelWriter 400
Share name
Driver name DYMO LabelWriter 400
Port name USB001
Comment
Location
Print processor winprint
Data type RAW
Parameters
Attributes 2624
Priority 1
Default priority 0
Average pages per minute 0
Printer status Idle
Extended printer status Unknown
Detected error state Unknown
Extended detected error state Unknown

(注意:这不是 XY 问题,制造商已知该问题并且禁用 SNMP 是已知的解决方案。)

我如何才能找到恰好是 TCP/IP 端口的端口名称,并将其放入可针对命令运行的变量中prnport

答案1

你会遇到的一个问题是端口姓名是自由文本:可以是任何内容;不保证一定是 IP 地址。除非您确定设置打印机的人明确将名称设置为以 开头IP_,否则不能保证一定是 IP 地址。

如果可以的话我建议使用 PowerShell;和Get-PrinterPort或者Set-PrinterPropertycmdlet Set-PrintConfigurationWin10 文档Win8 文档Win8.1 文档)看起来非常有用。不幸的是,它们仅适用于 Windows 8 或 Server 2012 及更高版本。我目前只能访问 Windows 7,无法对其进行测试。


如果失败,您可以prnport直接使用,而不必先执行prnmngrprnport -l将“列出所有 TCP 端口”。如果您将其与类似于 David 的脚本结合使用,您将得到正确的结果:

注意:您可能需要根据您的设置替换prnport调用cscript %windir%\System32\Printing_Admin_Scripts\en-US\prnport.vbs。此外,区域en-US可能会发生变化。

for /f "tokens=1,2,*" %%a in ('prnport -s computer-01 -l ^| find "Port name"') do (
    prnport -t -s computer-01 -r "%%c" -md
)

简要说明:

  • 这是一个扩展for循环。请参阅for /?以了解详情。
  • 我们正在循环全部 Port name foo输出中的行并foo从中获取。
  • 通过指定tokens=1,2,*,我们用空格对结果字符串进行标记,并将其设置%%aPort%%bname%%c到之后的所有内容(这就是星号的含义)。

您可能希望将计算机名称作为另一个变量传递。

还请注意,这不处理不存在 TCP/IP 打印机的情况。我认为它们不会执行任何操作,因为循环体永远不会执行。


另一种选择是直接使用 WMI,这是打印机管理脚本在后台执行的操作。

相关内容