2009-09-11 17 views
10

Estoy tratando de averiguar si hay una ubicación en WMI que devuelva la arquitectura del sistema operativo (es decir, 32 bits o 64 bits) que funcionará en "todas" las versiones de Windows. Pensé que había descubierto mirando mi sistema Win2k8 cuando me encontré con lo siguiente:Cómo determinar la plataforma del sistema operativo con WMI?

Win32_OperatingSystem/OSArchitecture 

que estaba equivocado. No parece que este campo exista en los sistemas Win2k3. Argh!

Entonces, ¿alguien sabe de otro campo en WMI que "es" el mismo en todas las versiones de servidor? Si no, ¿qué pasa con una clave de registro que sea la misma? Estoy usando una herramienta que solo me permite configurar consultas de campo simples, por lo que no puedo usar un script complejo para realizar.

Cualquier ayuda sería muy apreciada.

Respuesta

2

Después de un tiempo de búsqueda y pruebas, se me ha ocurrido con una "respuesta fijar /" aunque no es exactamente lo que yo esperaba. La realización de la consulta desde el Registro parece ser coherente en toda la versión que tengo en mi laboratorio para Win2k3 & Win2k8. Aquí es donde estoy extrayendo la información de:

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

KEY: PROCESSOR_ARCHITECTURE 

Muestra x86 o AMD64. No es perfecto, pero al menos me da la respuesta adecuada todo el tiempo.

Aún así, si alguien conoce una 'Clase' o clave de Registro consistente que dará como resultado 32/64, 32-bit/64-bit o X86/X64, agradecería mucho la información.

+0

¿Algún motivo al realizar consultas en ControlSet001 en lugar de CurrentControlSet? El mío funciona bien usando este último. –

0

(no probado), pero tal vez:

CIM_Processor Class (AddressWidth)

+0

Christophe, Eso sí aparece para devolver la arquitectura correcta Sin embargo, si hay más de una (1) CPU, parece que una consulta WMI simplemente devuelve el 'Ancho de dirección' para cada CPU. ¡Si tiene alguna otra idea, sería muy apreciada! ¡¡¡Muchas gracias!!! Cheers ... Cary – user172286

5

La simple consulta de WMI que utilizó devuelve un resultado para cada CPU física en la computadora. Solo devolverá un resultado si tiene un solo procesador, CPU de núcleo múltiple. Podemos suponer con seguridad que la computadora tiene al menos una CPU, así que solo usemos la información de la CPU0.

Para seleccionar los sistemas operativos de 64 bits solamente ...

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

Para seleccionar los sistemas operativos de 32 bits solamente ...

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

+1 b/c esto funciona, pero todavía prefiero 'Win32_OperatingSystem.OSArchitecture', criatura de hábito, supongo. – MDMoore313

0

En 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 
+1

François, ¡Gracias por la respuesta! Desgraciadamente, estaba tratando de encontrar una consulta WMI "simple" y no crear realmente una consulta. En otras palabras, quería ordenar una sola entrada dentro de WMI que incluyera el tipo de procesador para usar con algún software especial. No puedo generar una consulta, solo puedo proporcionar la ubicación dentro de WMI para buscar los datos. ¡Gracias! Saludos ... Cary – user172286

5

Pruebe esto:

wmic cpu get DataWidth /format:list 
+0

en Windows 2008 x86, devuelve 64 que es incorrecto. – max

0

Sé que esto es viejo, estoy publicando esto para cualquier persona en el futuro. Intenta mirar my script. Está escrito en BATCH y usa WMIC si está en la computadora pero no lo necesita para determinar si el sistema operativo está ejecutando un sistema operativo de 32 bits de 64 bits.

1

Para ampliar la primera respuesta, utilice esto:

select AddressWidth from Win32_Processor where DeviceID="CPU0" 
3

Utilice la siguiente clase WMI y la propiedad - Esto debería funcionar en 2003/XP y Win7/2008R2

ROOT\CIMV2\Win32_Processor 
AddressWidth 

De Technet:

En un sistema operativo de 32 bits, el valor es 32 y en un sistema operativo de 64 bits es 64. Esta propiedad se hereda de CIM_Processor.

0

Usted puede probar la siguiente sintaxis utilizando wmic para determinar la plataforma:

wmic path win32_processor where deviceid="cpu0" get Addresswidth 
0

En el lote

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 
+0

No está utilizando WMI como se lo pidió OP. – Florent

5

Si necesita la arquitectura del sistema operativo en comparación con el procesador, esto funciona si está seguro de que no tiene sistemas de Windows 5.x de 64 bits:

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

Después de desplazarse infinitamente, esta es la primera vez que he visto que responde a la pregunta, arquitectura de sistema operativo en oposición a la arquitectura del procesador. – MDMoore313

+0

@BigHomie La propiedad OSArchitecture no está disponible con el servidor 2k3 o XP. –

+0

@TomPickles El póster de esta respuesta lo dejó en claro, y el OP no limitó la respuesta a una familia de sistema operativo en particular, por lo que esta respuesta es tan válida como una específicamente para Win5.x – MDMoore313

0

La variable de entorno 'PROCESSOR_ARCHITECTURE' es todo lo que se necesita. Al igual que la llamada de registro, esto devolverá 'AMD64' o 'x86'.

0

Esto no es exactamente lo que pidieron, pero me acaba de utilizar esto en una consulta de WMI (Preferencia de directiva de grupo de orientación) y parece que trabajar hasta el momento:

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