Назад | Перейти на главную страницу

Powershell или WMI для получения свойств принтера и дополнительных драйверов?

Чего я пытаюсь достичь:

Используйте сценарий PowerShell (WMI или командлеты напрямую или их комбинацию), чтобы запросить сервер 2003 или 2008 с ролью PrintServer, перечислить общие принтеры, а затем перечислить драйверы, используемые для этого принтера, и, в частности, если драйвер 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.

Ваш сценарий выглядит хорошо. Могу я предложить использовать 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 ...

Конечно, все же, вероятно, не так чисто, как вам, вероятно, хотелось бы. Это (я думаю) даст вам то, что вы ищете.

Это очень интересная головоломка.

Ближайшее, что я могу предложить, это следующее:

Дважды запустите свой сценарий 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.

Затем, если вышеуказанное ведет себя, как ожидалось, сделайте список сохранения скрипта в файл, например

32bitprinters.txt 64bitprinters.txt

А затем второй скрипт сравнивает списки или делает то, что вам нужно.