【发布时间】:2026-02-06 10:15:02
【问题描述】:
我正在尝试对 GPO 进行故障排除以部署打印机,并且我需要查看当前登录用户在远程计算机上的网络打印机。当我这样做时
Get-WMIObject Win32_Printer -ComputerName PCNAME
我得到一个本地安装的打印机列表,当我尝试这个时
Get-WMIObject Win32_Printer -ComputerName PCNAME | where{$_.Name -like “*\\*”} | select sharename,name
我什么也得不到。有什么帮助吗?我使用的是 PowerShell 4.0,所以 Get-Printer 不起作用。
【问题讨论】:
-
问题是您正在运行的用户上下文,因为网络打印机是每个用户的。我相信您运行的 wmi cmdlet 将在远程机器上的系统上下文中运行。
Get-Printer在 PowerShell 4 中也可用,但需要 Win8 或更高版本,但同样会遇到此问题。我过去看到的这个问题的解决方案已经拉取了用户注册表的信息。 -
如果它作为 GPO 中的当前用户运行,为什么要指定
-computername?您的 where 过滤器逻辑看起来不在此范围内。 -
您是在生产环境还是测试环境中解决此问题?如果您在测试中,您始终可以使用应该映射打印机的用户帐户执行命令,如果您在 PROD 中使用实时用户帐户执行此操作,那实际上是不可能的。
-
我在生产环境中进行故障排除。在我的测试环境中,每台计算机都可以部署打印机。
-
登录用户的
SID,然后从HKEY_USERS\SID\Printers\Connections获取已安装的打印机。在我的生产环境中工作就像一个魅力。当然,您可以远程执行此操作,甚至无需启用WinRM。 @Matt 我相信 GPO 安装打印机,OP 使用脚本远程对其进行故障排除。
标签: powershell printing printers