Чего я пытаюсь достичь:
Используйте сценарий 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
А затем второй скрипт сравнивает списки или делает то, что вам нужно.