如何确定与WMI OS平台?(How to determine OS Platform with W

2019-08-05 09:28发布

我试图找出是否存在WMI的位置,将返回的OS架构(即32位或64位),将跨Windows的“所有”版本。 我想我已经想通了看着我Win2k8系统的时候,我发现以下几点:

 Win32_OperatingSystem / OSArchitecture

我错了。 它不会出现这个字段上WIN2K3系统存在。 哎呀!

那么,有没有人知道另一场的WMI说:“是”同一个跨服务器版本? 如果不是这样,关于相同的注册表键值是什么? 我使用的一个工具,只允许我配置简单的现场查询,所以我不能使用复杂的脚本来执行。

任何帮助将不胜感激。

Answer 1:

如果您需要的操作系统架构,而不是处理器,这个作品,如果你有信心,你有没有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 & "}"


Answer 2:

试试这个:

wmic cpu get DataWidth /format:list


Answer 3:

你使用确实返回结果在计算机的每一个物理CPU的简单的WMI查询。 如果你有一个单一的处理器,多核心处理器将只返回一个结果。 我们可以安全地假设计算机有ATLEAST一个CPU,所以让我们只使用来自CPU0的信息。

要选择唯一的64位操作系统...

select * from Win32_Processor where DeviceID="CPU0" and AddressWidth="64"

要选择唯一的32位操作系统...

select * from Win32_Processor where DeviceID="CPU0" and AddressWidth="32"


Answer 4:

请使用以下WMI类和属性 - 这应该在2003 / XP和Win7 / 2008R2工作

ROOT\CIMV2\Win32_Processor
AddressWidth

从的Technet :

在32位操作系统,该值是32和64位操作系统上为64这个属性从CIM_Processor继承。



Answer 5:

一段时间的搜索和测试后,我想出了一个“修复/回答”虽然这不正是我所期待的。 从通过注册表进行查询似乎是在所有版本我在我的实验室进行WIN2K3与Win2k8一致。 这里就是我从拉动信息:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment

KEY: PROCESSOR_ARCHITECTURE

它显示x86或AMD64。 它并不完美,但至少它给了我正确的答案每次。

尽管如此,如果有人知道一致“类”或注册表项,将输出32/64,32位/ 64位,或X86 / X64,我将不胜感激的信息。



Answer 6:

为了扩大在第一个答案,使用:

select AddressWidth from Win32_Processor where DeviceID="CPU0"


Answer 7:

(未测试),但也许:

CIM_Processor类(AddressWidth)



Answer 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


Answer 9:

在批处理

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


Answer 10:

你可以试试下面用WMIC确定平台的语法:

wmic path win32_processor where deviceid="cpu0" get Addresswidth


Answer 11:

我知道这是旧的,我张贴这在未来的人。 试着看一下我的脚本 。 这是写在批处理,并使用WMIC如果它是计算机上,但该操作系统是否正在运行一个32位的64位操作系统并不需要它才能确定。



Answer 12:

环境变量“PROCESSOR_ARCHITECTURE”是所有需要。 就像注册表调用这将返回“AMD64”或“86”。



Answer 13:

这不正是你问什么,但我只是用这一个WMI查询(组策略首选项目标),它似乎迄今的工作:

SELECT * FROM Win32_ComputerSystem WHERE SystemType="x64-based pc"


文章来源: How to determine OS Platform with WMI?