Как определить платформу ОС с WMI?
Я пытаюсь выяснить, есть ли место в WMI, которое вернет архитектуру ОС (то есть 32-разрядную или 64-разрядную), которая будет работать во всех "всех" версиях Windows. Я подумал, что понял, смотрю ли я на свою систему Win2k8, когда нашел следующее:
Win32_OperatingSystem / OSArchitecture
Я был неправ. Не похоже, что это поле существует в системах Win2k3. Argh!
Итак, кто-нибудь знает о другом поле в WMI, которое "одинаково" в версиях сервера? Если нет, как насчет того же раздела реестра? Я использую инструмент, который позволяет мне настраивать простые полевые запросы, поэтому я не могу использовать сложный script для выполнения.
Любая помощь будет принята с благодарностью.
Ответы
Ответ 1
После некоторого поиска и тестирования я придумал "исправление/ответ", хотя это не совсем то, на что я надеялся. Выполнение запроса через реестр представляется согласованным во всей версии, имеющейся в моей лаборатории для Win2k3 и Win2k8. Здесь, где я извлекаю информацию из:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment
KEY: PROCESSOR_ARCHITECTURE
Отображается x86 или AMD64. Это не идеально, но, по крайней мере, это дает мне правильный ответ каждый раз.
Тем не менее, если кто-то знает последовательный ключ "Class" или "Registry", который будет выводить 32/64, 32-bit/64-bit или X86/X64, я был бы очень благодарен за информацию.
Ответ 2
Простой запрос WMI, который вы использовали, действительно возвращает результат для каждого физического процессора на компьютере. Он вернет только один результат, если у вас есть один процессор, многоядерный процессор. Мы можем с уверенностью предположить, что компьютер имеет по крайней мере один процессор, поэтому позволяет просто использовать информацию из CPU0.
Чтобы выбрать только 64-разрядные операционные системы...
select * from Win32_Processor where DeviceID="CPU0" and AddressWidth="64"
Чтобы выбрать только 32-разрядные операционные системы...
select * from Win32_Processor where DeviceID="CPU0" and AddressWidth="32"
Ответ 3
Попробуйте следующее:
wmic cpu get DataWidth /format:list
Ответ 4
Если вам нужна архитектура операционной системы, а не процессор, это работает, если вы уверены, что у вас нет 64-битных систем Windows 5.x:
Set colItems = objWMI.ExecQuery("Select * from Win32_OperatingSystem",,48)
on error resume next
For Each objItem in colItems
Ver = objItem.Version
OSname = split(objItem.Name,"|")
Arch = "32-bit"
if left(Ver,3) >= 6.0 then ' 5.x doesn't support this property
Arch = objItem.OSArchitecture
end if
Next
wscript.echo " OS Version: " & Ver & " {" & trim(OSname(0)) & " " & Arch & "}"
Ответ 5
Используйте следующий класс и свойство WMI. Это должно работать с 2003/XP и Win7/2008R2
ROOT\CIMV2\Win32_Processor
AddressWidth
Из Техника:
В 32-разрядной операционной системе это значение равно 32 и на 64-битной операционной системе 64. Это свойство наследуется от CIM_Processor.
Ответ 6
Чтобы развернуть первый ответ, используйте это:
select AddressWidth from Win32_Processor where DeviceID="CPU0"
Ответ 7
(Не проверено), но возможно:
Класс CIM_Processor (адресная ширина)
Ответ 8
В VBS:
On Error Resume Next
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", _
wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem In colItems
WScript.Echo "AddressWidth: " & objItem.AddressWidth
Next
Ответ 9
Я знаю, что это старо, я публикую это для всех в будущем. Попробуйте найти мой script. Он написан в BATCH и использует WMIC, если он находится на компьютере, но не нуждается в нем, чтобы определить, работает ли ОС 32-разрядной 64-разрядной ОС.
Ответ 10
Вы можете попробовать синтаксис ниже, используя wmic, чтобы определить платформу:
wmic path win32_processor where deviceid="cpu0" get Addresswidth
Ответ 11
В пакетном режиме
IF EXIST "%PROGRAMFILES% (x86)" goto 64BIT
goto 32BIT
:64BIT
echo tantalana a 64 bit
goto FINE
:32BIT
echo tantalaniccia a 32 bit
goto FINE
:FINE
echo ciao
Ответ 12
Переменная окружения PROCESSOR_ARCHITECTURE - это все, что необходимо. Так же, как вызов реестра, это вернет либо "AMD64", либо "x86".
Ответ 13
Это не совсем то, о чем вы просили, но я просто использовал это в запросе WMI (таргетинг на предпочтения групповой политики) и, похоже, работает до сих пор:
SELECT * FROM Win32_ComputerSystem WHERE SystemType="x64-based pc"