我试图弄清楚WMI中是否存在将返回可在“所有”版本的Windows上运行的OS体系结构(即32位或64位)的位置。当我发现以下情况时,我以为我已经想到了我的Win2k8系统:
Win32_OperatingSystem / OSArchitecture
我错了。 Win2k3系统上似乎不存在此字段。哎呀!
那么,是否有人知道WMI中的另一个字段在服务器版本中“相同”?如果没有,那么注册表键是一样的呢?我使用的工具只允许我配置简单的字段查询,所以我不能使用复杂的脚本来执行。
非常感谢任何帮助。
答案 0 :(得分: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 & "}"
答案 1 :(得分:5)
您使用的简单WMI查询确实会为计算机中的每个物理CPU返回一个结果。如果您有一个处理器,多核CPU,它只会返回一个结果。我们可以安全地假设计算机至少有一个CPU,所以我们只使用来自CPU0的信息。
仅选择64位操作系统......
select * from Win32_Processor where DeviceID="CPU0" and AddressWidth="64"
仅选择32位操作系统...
select * from Win32_Processor where DeviceID="CPU0" and AddressWidth="32"
答案 2 :(得分:5)
试试这个:
wmic cpu get DataWidth /format:list
答案 3 :(得分:3)
使用以下WMI类和属性 - 这应该适用于2003 / XP和Win7 / 2008R2
ROOT\CIMV2\Win32_Processor
AddressWidth
来自Technet:
在32位操作系统上,该值为32且为64位 操作系统是64.这个属性是继承自的 CIM_Processor。
答案 4 :(得分:2)
经过一段时间的搜索和测试后,我想出了一个“修复/回答”,虽然这并不是我所希望的。通过注册表执行查询似乎与我在Win2k3&amp ;;实验室中的所有版本一致。 Win2k8。这是我从中提取信息的地方:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment
KEY: PROCESSOR_ARCHITECTURE
显示x86或AMD64。它并不完美,但至少它每次给我正确答案。
但是,如果有人知道一致的'Class'或注册表项将输出32 / 64,32位/ 64位或X86 / X64,我将非常感谢这些信息。
答案 5 :(得分:2)
要扩展第一个答案,请使用:
select AddressWidth from Win32_Processor where DeviceID="CPU0"
答案 6 :(得分:0)
(未经测试),但可能:
答案 7 :(得分:0)
在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
答案 8 :(得分:0)
我知道这已经过时了,我将来会发布这个。试着看my script。它是在BATCH中编写的,如果它在计算机上,则使用WMIC但不需要它以确定操作系统是否运行32位64位操作系统。
答案 9 :(得分:0)
您可以使用wmic尝试以下语法来确定平台:
wmic path win32_processor where deviceid="cpu0" get Addresswidth
答案 10 :(得分:0)
批处理
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
答案 11 :(得分:0)
环境变量'PROCESSOR_ARCHITECTURE'就是所需要的。就像注册表调用一样,这将返回'AMD64'或'x86'。
答案 12 :(得分:0)
这并不是您要求的,但我只是在WMI查询(组策略首选项定位)中使用它,它似乎工作到目前为止:
SELECT * FROM Win32_ComputerSystem WHERE SystemType="x64-based pc"