use*_*286 11 architecture registry wmi operating-system
我试图弄清楚WMI中是否有一个位置将返回可在"所有"版本的Windows上运行的OS体系结构(即32位或64位).当我发现以下情况时,我以为我已经想到了看我的Win2k8系统:
Win32_OperatingSystem / OSArchitecture
Run Code Online (Sandbox Code Playgroud)
我错了.Win2k3系统上似乎不存在此字段.哎呀!
那么,是否有人知道WMI中的另一个字段在服务器版本中"相同"?如果没有,那么注册表键是一样的呢?我使用的工具只允许我配置简单的字段查询,所以我不能使用复杂的脚本来执行.
任何帮助将不胜感激.
小智 6
如果您需要操作系统体系结构而不是处理器,如果您确信没有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 & "}"
Run Code Online (Sandbox Code Playgroud)
小智 5
您使用的简单WMI查询确实为计算机中的每个物理CPU返回结果.如果您有一个处理器,多核CPU,它只会返回一个结果.我们可以安全地假设计算机至少有一个CPU,所以我们只使用来自CPU0的信息.
仅选择64位操作系统...
select * from Win32_Processor where DeviceID="CPU0" and AddressWidth="64"
Run Code Online (Sandbox Code Playgroud)
仅选择32位操作系统...
select * from Win32_Processor where DeviceID="CPU0" and AddressWidth="32"
Run Code Online (Sandbox Code Playgroud)
经过一段时间的搜索和测试,我想出了一个“修复/答案”,尽管这并不完全是我所希望的。通过注册表执行查询似乎在我实验室中的 Win2k3 和 Win2k8 的所有版本中都是一致的。这是我从中提取信息的地方:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment
KEY: PROCESSOR_ARCHITECTURE
Run Code Online (Sandbox Code Playgroud)
它显示 x86 或 AMD64。它并不完美,但至少每次都给我正确的答案。
尽管如此,如果有人知道将输出 32/64、32 位/64 位或 X86/X64 的一致“类”或注册表项,我将非常感谢这些信息。