我想要实现的目标:
使用 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
然后第二个脚本比较列表,或者执行您需要的操作。