加速WMI查询以选择单个远程打印机

问题描述:

我们有一台包含〜800台打印机的打印服务器,我正在寻找一种快速的方法来仅选择PowerShell v3中的一个打印机对象。加速WMI查询以选择单个远程打印机

这里是我试过的方法:

$printer = Get-Wmiobject win32_printer -computername $server | where {$_.name -Match $printer} 
$printer = Get-Wmiobject win32_printer -computername $server -filter "name='$printer'" 
$printer = Get-Wmiobject win32_printer -computername $server -filter "name='$printer'" -property name 
$printer = Get-Wmiobject -query "SELECT * FROM win32_printer WHERE name = '$printer'" -computername $server 

所有4这些方法需要〜25秒。有什么办法可以快速选择远程打印机吗?

+0

恐怕不太可能。虽然WMI功能非常强大,但速度并不快。 – arco444 2014-12-03 17:50:05

+0

您是否正在运行PS V4?如果是这种情况,您可以将其与c​​mdlet'Get-Printer' – 2014-12-03 18:29:34

+0

进行比较,但我不幸遇到了V3。 – 2014-12-03 18:45:17

正在返回的WMI对象将具有Path属性。你可以用它来建立一个WMI对象,将直接进入到打印机,一旦你知道路径:

[WMI]'\\Server1\root\cimv2:Win32_Printer.DeviceID="Printer1"' 

您可能要构建成一个包含已知的打印机名称和WMI的哈希表的功能路径,或者如果您知道确切的服务器和打印机名称,则可以构建该字符串。

这应该几乎立即返回结果。

+0

这适用于我。需要2秒钟才能使用此方法抓取打印机。谢谢! – 2014-12-03 19:38:04

+0

在大型打印服务器上,此方法速度快100倍! – Alban 2017-09-29 09:22:17