Как определить платформу ОС с помощью WMI?
Я пытаюсь выяснить, есть ли в WMI место, которое вернет архитектуру ОС (т. е. 32-разрядную или 64-разрядную), которая будет работать во всех "всех" версиях Windows. Я думал, что понял это, глядя на мою систему Win2k8, когда я нашел следующее:
Win32_OperatingSystem / OSArchitecture
Я был неправ. Не кажется, что это поле существует в системах Win2k3. Аргх!
Итак, кто-нибудь знает о другом поле в WMI, которое "является" одинаковым для всех версий сервера? Если нет, то как насчет тот же самый раздел реестра? Я использую инструмент, который позволяет мне настраивать только простые запросы полей, поэтому я не могу использовать сложный скрипт для выполнения.
любая помощь была бы весьма признательна.
13 ответов
простой запрос WMI, который вы использовали, действительно возвращает результат для каждого физического процессора на компьютере. Он вернет только один результат, если у вас есть один процессор, несколько основных процессоров. Мы можем с уверенностью предположить, что компьютер имеет по крайней мере один процессор, поэтому давайте просто использовать информацию из CPU0.
для выбора только 64-разрядных операционных систем...
select * from Win32_Processor where DeviceID="CPU0" and AddressWidth="64"
для выбора только 32-разрядных операционных систем...
select * from Win32_Processor where DeviceID="CPU0" and AddressWidth="32"
Если вам нужна архитектура операционной системы, а не процессор, это работает, если вы уверены, что у вас нет 64-битной Windows 5.х систем:
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 & "}"
используйте следующий класс и свойство WMI-это должно работать на 2003/XP и Win7/2008R2
ROOT\CIMV2\Win32_Processor
AddressWidth
С в TechNet:
в 32-разрядной операционной системе значение равно 32, а в 64-разрядной операционная система-64. Это свойство наследуется от CIM_Processor.
после некоторого времени поиска и тестирования я придумал "исправление/ответ", хотя это не совсем то, на что я надеялся. Выполнение запроса через реестр, по-видимому, согласовано во всей версии, которую я имею в своей лаборатории для Win2k3 & Win2k8. Вот откуда я черпаю информацию:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment
KEY: PROCESSOR_ARCHITECTURE
он отображает x86 или AMD64. Она не идеальна, но по крайней мере это дает мне правильный ответ каждый раз.
тем не менее, если кто-нибудь знает согласованный "класс" или раздел реестра, который будет выводить 32/64, 32-бит/64-бит или X86 / X64, я был бы очень признателен за информацию.
чтобы развернуть первый ответ, используйте следующее:
select AddressWidth from Win32_Processor where DeviceID="CPU0"
в 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
в пакете
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
вы можете попробовать синтаксис ниже, используя wmic для определения платформы:
wmic path win32_processor where deviceid="cpu0" get Addresswidth
Я знаю, что это старый, я публикую это для всех в будущем. Попробуйте посмотреть на мой скрипт. Он написан в пакете и использует WMIC, если он находится на компьютере, но не нуждается в нем, чтобы определить, работает ли ОС 32 бит 64-битной ОС.
переменная среды "PROCESSOR_ARCHITECTURE" - это все, что нужно. Просто как позвонить в реестре это вернуть или amd64 или х86'.
Это не совсем то, что вы просили, но я просто использовал это в запросе WMI( таргетинг предпочтений групповой политики), и он, похоже, работает до сих пор:
SELECT * FROM Win32_ComputerSystem WHERE SystemType="x64-based pc"