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
А затем второй скрипт сравнивает списки или делает то, что вам нужно.