web-dev-qa-db-ja.com

プリンターのプロパティと追加のドライバーをプルするPowershellまたはWMI?

私が達成しようとしていること:

Powershellスクリプト(WMIまたはコマンドレットを直接、またはその組み合わせ)を使用して、PrintServerロールで2003または2008サーバーにクエリを実行し、共有されているプリンターを列挙してから、そのプリンターで使用されているドライバーを一覧表示します。具体的には、x86またはx64ドライバーが使用されているかどうかを示します。使用済み(または両方)。

Win32_PrinterWin32_PrinterDriverGet-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ドライバーがロードされていることです。 x64ドライバーがロードされているかどうかを確認するためだけに、100台のプリンターの[プロパティ]タブを手動で確認したくありません。

2
JeremiahJohnson

スクリプトは良さそうです。 Select-Object name, driverpathではなくselect supportedplatform, driverpath, versionを使用することをお勧めします。

出力は次のようになります。

Xerox WorkCentre Pro C3545 PS、3、Windows x64 C:\ Windows\system32\pool\DRIVERS\x64\3 .. ..

Xerox WorkCentre Pro C3545,3、Windows NT x86 C:\ Windows\system32\pool\DRIVERS\W32X8 .. ..

確かに、それでもおそらくあなたが望むほどきれいではありません。これは(私が思うに)あなたが探しているものをあなたに与えるでしょう。

1
Qwilson

これはとても面白いパズルです。

私が提案できる最も近いものはこれです:

PowerShellスクリプトを2回実行します。

かつては「ネイティブ」(x64システムでは64ビットとして実行されます)で、再び32ビットとして実行されます。 32ビットモードでは、32ビットドライバーを備えたプリンターのみが表示されます(ここでは少し推測していますが、これは本当だと思います)。

いくつかの記事で、スクリプトをx86およびx64として実行する方法を確認できます。これが1つです: http://www.gregorystrike.com/2011/01/27/how-to-tell-if-powershell-is-32-bit-or-64-bit/

同じスクリプトが32または64として正常に実行されます。

次に、上記が期待どおりに動作している場合は、スクリプトにリストをファイルに保存します。

32bitprinters.txt 64bitprinters.txt

次に、2番目のスクリプトがリストを比較するか、必要なことを実行します。