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.

2 ответа

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

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

Другие вопросы по тегам