Powershell 或 WMI 来提取打印机属性和附加驱动程序?

Powershell 或 WMI 来提取打印机属性和附加驱动程序?

我想要实现的目标:

使用 powershell 脚本(直接使用 WMI 或 cmdlet,或两者结合)查询具有 PrintServer 角色的 2003 或 2008 服务器,枚举共享的打印机,然后列出该打印机正在使用的驱动程序,特别是是否正在使用 x86 或 x64 驱动程序(或两者)。

我看过Win32_打印机Win32_打印机驱动程序获取打印机等等。这些似乎都不能告诉我有关 x64 驱动程序的信息,或者何时加载了多个特定于平台的驱动程序。类似于:

gwmi win32_printer -computername lebowski | %{$name = $_.name
$supported = $_.getrelated('Win32_PrinterDriver') | select supportedplatform, driverpath, version
Write-Host $name
return $supported 
} 

产生以下内容:

PCLOADLETTER
supportedplatform : Windows NT x86
driverpath        : C:\WINDOWS\system32\spool\DRIVERS\W32X86\3\RIC54Dc.DLL
version           : 3

但问题是该打印机还加载了 x64 驱动程序。我真的不想手动检查 100 台打印机的属性选项卡,只是为了看看它们是否加载了 x64 驱动程序。

答案1

你的脚本看起来不错。我建议使用Select-Object name, driverpath而不是select supportedplatform, driverpath, version

输出如下所示:

施乐 WorkCentre Pro C3545 PS,3,Windows x64 C:\Windows\system32\spool\DRIVERS\x64\3...

施乐 WorkCentre Pro C3545,3,Windows NT x86 C:\Windows\system32\spool\DRIVERS\W32X8...

当然,它可能仍然没有你想象的那么干净。我认为这会给你想要的东西。

答案2

这是一个非常有趣的谜题。

我能建议的最接近的是这样:

运行 powershell 脚本两次:

一次是“本机”(在 x64 系统上将以 64 位运行),再次是 32 位。在 32 位模式下,您应该只会看到具有 32 位驱动程序的打印机(我在这里稍微猜测了一下,但怀疑这是真的)。

您可以在几篇文章中了解如何以 x86 和 x64 运行脚本。以下是其中一篇: http://www.gregorystrike.com/2011/01/27/how-to-tell-if-powershell-is-32-bit-or-64-bit/

相同的脚本无论在 32 位还是 64 位上都可以正常运行。

然后,如果上述行为符合预期,则将脚本保存列表到文件,例如

32位打印机.txt 64位打印机.txt

然后第二个脚本比较列表,或者执行您需要的操作。

相关内容