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
13 Réponses :
(non testé), mais peut-être: p>
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
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: Il affiche X86 ou AMD64. Ce n'est pas parfait, mais au moins cela me donne la bonne réponse à chaque fois. P> 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. P> P>
Toute raison que vous interrogez Controlset001 au lieu de CurrentControlset? Les miens fonctionnent bien en utilisant ce dernier.
@ user172286 courantControlset code> serait définitivement meilleur. J'ai un ordinateur Windows où la clé de registre
hklm \ system \ select code> a le fichier de registre
actuel code> avec la valeur
3 code> et
lastkannaykood < / Code> avec valeur
2 code> et où existe maintenant uniquement
contrôlé003 code> étant
actuelControlset code> et
contrôlé002 code>. Cela a été causé à cause des fenêtres de démarrage avec
contrôlé001 code> 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 code> sur
contrôlé003 code>.
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> Pour sélectionner uniquement des systèmes d'exploitation 32 bits ... p> select * from Win32_Processor where DeviceID="CPU0" and AddressWidth="32"
+1 B / C Ceci fonctionne, mais je préfère toujours win32_operatingysystem.osarchitecture code>, créature d'habitude que je suppose.
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
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
Essayez ceci:
wmic cpu get DataWidth /format:list
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. P>
Pour développer la première réponse, utilisez ceci:
select AddressWidth from Win32_Processor where DeviceID="CPU0"
Utilisez la classe et la propriété WMI suivantes - cela devrait fonctionner sur 2003 / XP et Win7 / 2008R2 de TechNet : P> 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. P>
blockQuote> p>
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
in lot
Vous n'utilisez pas WMI comme invité à OP.
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 & "}"
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.
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'. p>
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 de code> comme Microsoft documenté à la page sur WOW64 Détails de la mise en œuvre .
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"