11
votes

Comment déterminer la plate-forme OS avec WMI?

J'essaie de comprendre s'il existe un emplacement dans WMI qui retournera l'architecture du système d'exploitation (c'est-à-dire 32 bits ou 64 bits) qui fonctionnera sur des versions "toutes" de Windows. Je pensais que j'avais compris que je regarde mon système Win2K8 lorsque j'ai trouvé ce qui suit:

 Win32_OperatingSystem / OSArchitecture


0 commentaires

13 Réponses :


0
votes

(non testé), mais peut-être:

CIM_Processor Classe (adressewidth) < / p>


1 commentaires

Christophe, cela semble retourner la bonne architecture. Cependant, s'il y a plus d'une (1) processeur, il apparaît qu'une requête simplement WMI renvoie le «adressewidth» pour chaque processeur. Si vous avez d'autres pensées, ils seraient grandement appréciés! Merci beaucoup!!! Bravo ... Cary



2
votes

Après un certain temps de recherche et de test, j'ai proposé une "solution / réponse" bien que ce ne soit pas exactement ce que j'espérais. L'exécution de la requête de via le registre semble être cohérente sur toute la version que j'ai dans mon laboratoire pour Win2K3 et Win2k8. Voici où je tire les informations de: xxx

Il affiche X86 ou AMD64. Ce n'est pas parfait, mais au moins cela me donne la bonne réponse à chaque fois.

Toujours, si quelqu'un connaît une «classe» cohérente ou une clé de registre qui produira 32/64, 32 bits / 64 bits , ou x86 / x64, j'apprécierais énormément les informations.


2 commentaires

Toute raison que vous interrogez Controlset001 au lieu de CurrentControlset? Les miens fonctionnent bien en utilisant ce dernier.


@ user172286 courantControlset serait définitivement meilleur. J'ai un ordinateur Windows où la clé de registre hklm \ system \ select a le fichier de registre actuel avec la valeur 3 et lastkannaykood < / Code> avec valeur 2 et où existe maintenant uniquement contrôlé003 étant actuelControlset et contrôlé002 . Cela a été causé à cause des fenêtres de démarrage avec contrôlé001 avait échoué il y a des années et a été supprimé par Windows après la copie de la dernière fois bien connue contrôlé002 sur contrôlé003 .



5
votes

La simple requête WMI que vous avez utilisée renvoie effectivement un résultat pour chaque processeur physique de l'ordinateur. Il ne renvoie qu'un seul résultat si vous avez un seul processeur, plusieurs processeurs principaux. Nous pouvons supposer en toute sécurité que l'ordinateur a au moins un processeur. Il suffit de simplement utiliser les informations de CPU0.

Pour sélectionner uniquement des systèmes d'exploitation de 64 bits ... p> xxx pré>

Pour sélectionner uniquement des systèmes d'exploitation 32 bits ... p>

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


1 commentaires

+1 B / C Ceci fonctionne, mais je préfère toujours win32_operatingysystem.osarchitecture , créature d'habitude que je suppose.



0
votes

dans 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 commentaires

François, merci pour la réponse! Malheureusement, j'essayais de trouver une "simple" requête WMI et de ne pas créer de requête. En d'autres termes, je voulais une sorte d'entrée unique au sein du WMI qui indiquerait le type de processeur à utiliser avec certains logiciels spéciaux. Je ne peux pas générer de requête, je ne peux fournir que l'emplacement dans WMI pour trouver les données. Merci! Bravo ... Cary



5
votes

Essayez ceci:

wmic cpu get DataWidth /format:list


0 commentaires

0
votes

Je sais que c'est vieux, je pose ceci pour quiconque à l'avenir. Essayez de regarder mon script. Il est écrit en lot et utilise WMIC s'il est sur l'ordinateur mais n'en a pas besoin pour déterminer si l'OS exécute un système d'exploitation 64 bits 32 bits.


0 commentaires

2
votes

Pour développer la première réponse, utilisez ceci:

select AddressWidth from Win32_Processor where DeviceID="CPU0"


0 commentaires

3
votes

Utilisez la classe et la propriété WMI suivantes - cela devrait fonctionner sur 2003 / XP et Win7 / 2008R2 xxx

de TechNet :

sur un système d'exploitation 32 bits, la valeur est 32 et sur un 64 bits Système d'exploitation Il est 64. Cette propriété est héritée de Cim_processor.


0 commentaires

0
votes

Vous pouvez essayer la syntaxe ci-dessous à l'aide de WMIC pour déterminer la plate-forme:

wmic path win32_processor where deviceid="cpu0" get Addresswidth


0 commentaires

0
votes

in lot xxx


1 commentaires

Vous n'utilisez pas WMI comme invité à OP.



6
votes

Si vous avez besoin de l'architecture du système d'exploitation par opposition au processeur, cela fonctionne si vous êtes sûr que vous n'avez pas de systèmes Windows 5.x 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 & "}"


4 commentaires

Après faire défiler sans fin, c'est le premier à laquelle j'ai vu cela répond à la question, à l'architecture du système d'exploitation par opposition à l'architecture du processeur.


@Bighomie La propriété d'Osarchitecture n'est pas disponible avec 2K3 Server ou XP.


@Tompickles L'affiche de cette réponse a rendu clairement clair et le PO ne limitait pas la réponse à une famille d'OS particulière, cette réponse est donc aussi valide que celle spécifique pour Win5.x


@Bighomie ah, n'a pas vu ça. Ma faute.



0
votes

La variable d'environnement 'processeur_architecture' est tout ce qui est nécessaire. Tout comme l'appel de registre, cela reviendra, soit 'AMD64' ou 'X86'.


1 commentaires

Ceci est incorrect si une application X86 exécutée sur Windows 64 bits dans l'environnement 32 bits est accessible à une variable d'environnement processor_architecture comme Microsoft documenté à la page sur WOW64 Détails de la mise en œuvre .



0
votes

Ce n'est pas exactement ce que vous avez demandé, mais je viens d'utiliser cela dans une requête WMI (ciblage de préférence de la stratégie de groupe) et il semble fonctionner jusqu'à présent:

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


0 commentaires