PowerShell或WMI来拉打印机属性和额外的驱动程序?

我正在努力实现的是:

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

我看过Win32_Printer , Win32_PrinterDriver , Get-Printer等。这些似乎都不能告诉我有关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驱动程序。

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

输出结果如下所示:

Xerox WorkCentre Pro C3545 PS,3,Windows x64 C:\ Windows \ system32 \ spool \ DRIVERS \ X64 \ 3 …

Xerox WorkCentre Pro C3545,3,Windows NT x86 C:\ Windows \ system32 \ spool \ DRIVERS \ W32X8 …

当然,还可能不像你可能会喜欢的那样干净。 这将(我认为)给你你正在寻找什么。

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

我可以build议的最接近的是:

运行你的powershell脚本两次:

一旦“本地”(在64位系统将运行为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。

然后,如果以上操作符合预期,则将脚本保存列表存档,例如

32bitprinters.txt 64bitprinters.txt

然后第二个脚本比较列表,或做你所需要的。