views:

1349

answers:

5

I am trying to figure out if there is a location in WMI that will return the OS Architecture (i.e. 32-bit or 64-bit) that will work across "all" versions of Windows. I thought I had figured it out looking at my Win2k8 system when I found the following:

 Win32_OperatingSystem / OSArchitecture

I was wrong. It doesn't appear that this field exists on Win2k3 systems. Argh!

So, is anyone aware of another field in WMI that "is" the same across server versions? If not, what about a registry key that is the same? I am using a tool that only allows me to configure simple field queries, so I cannot use a complex script to perform.

Any help would be greatly appreciated! Cheers...

Cary

A: 

(Not tested), but maybe:

CIM_Processor Class (AddressWidth)

ChristopheD
Christophe,That does appear to return the right architecture. However, if there is more then one (1) CPU, it appears that a simply WMI query returns the 'AddressWidth' for every CPU.If you have any other thoughts, they would be greatly appreciated! Thanks much!!!Cheers...Cary
A: 

After awhile of searching and testing, I've come up with a "fix/answer" although it's not exactly what I was hoping for. Performing the query from via the Registry appears to be consistent across all the version I have in my lab for Win2k3 & Win2k8. Here's where I am pulling the information from:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment KEY: PROCESSOR_ARCHITECTURE

It displays x86 or AMD64. It's not perfect, but at least it gives me the proper answer every time.

Still, if anyone knows a consistent 'Class' or Registry key that will output 32/64, 32-bit/64-bit, or X86/X64, I would greatly appreciate the information.

Thanks again Christophe for the reply!

Cheers...

Cary

+1  A: 

The simple WMI query that you used does indeed return a result for every physical CPU in the computer. It will only return one result if you have a single processor, multiple core CPU. We can safely assume the computer has atleast one CPU, so lets just use the information from CPU0.

To select only 64-bit operating systems...

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


To select only 32-bit operating systems...

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

Thomas York
A: 

In 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

Cordialement, François.

fboulant
A: 

François,

Thanks for the reply! Unfortuantely, I was trying to find a "simple" WMI query and not actually build a query. In other words, I wanted to kind a single entry within WMI that would list the processor type for use with some special software. I can't generate a query, I can only provide the location within WMI to find the data.

Thanks! Cheers...

Cary