Détecter Windows Server version 32/64-bit dans CLI

Quel est le meilleur et le plus rapide moyen de détecter si vous exécutez une version 32 ou 64 bits de Windows Server à partir de la ligne de commande?

(Cygwin est installé)

Un moyen légèrement plus rapide serait de vérifier l'existence du répertoire% ProgramFiles (x86)%. S'il existe alors, vous exécutez 64 bits, s'il n'existe pas, vous utilisez 32 bits.

Quick one-liner:

if exist "%ProgramFiles(x86)%" echo 64-bit 

Cela produira 64-bit si le répertoire existe. Cela échouerait, cependant, s'il n'existait pas en tant que variable, mais il existait en tant que répertoire (en tant que% ProgramFiles (x86)%).

Vous pouvez également utiliser l'outil de recherche pour avoir un moyen plus précis de déterminer le bit.

 set | find "ProgramFiles(x86)" 

Ou en utilisant la commande systeminfo précédemment

 systeminfo | find /I "System type" 

(Inclus le /I pour travailler dans XP / 2003/2008 / etc)

Que diriez-vous:

 echo %PROCESSOR_ARCHITECTURE% 

Cela renverra x86 sur les systèmes 32 bits et AMD64 (ou IA64 ) sur les systèmes 64 bits.

 systeminfo 

Il énumérera un peu, environ 10 champs, il y en a un appelé System Type. Cela vous dira si c'est x86 ou x64

 systeminfo | find /I "System type" 

Ceci dépend de la localisation et lent .

 echo %PROCESSOR_ARCHITECTURE% 

Notez que c'est x86 dans cmd.exe 32 bits.

Voie correcte:

 set Arch=x64 if "%PROCESSOR_ARCHITECTURE%" == "x86" ( if not defined PROCESSOR_ARCHITEW6432 set Arch=x86 ) 

Autre façon de vérifier avec une requête WMI:

PowerShell:

 (gwmi win32_computersystem).SystemType 

CMD:

 wmic OS get OSArchitecture 

Extrait d'ici: http://www.sysadmit.com/2015/10/windows-como-saber-si-es-de-32-o-64-bits.html

Il existe de nombreuses façons de vérifier l'architecture du processeur sous Windows:

  • Le moyen le plus rapide, le plus simple et le plus compatible pour vérifier l'architecture du processeur dans au moins Windows 2000 et en haut consiste à examiner la variable d'environnement PROCESSOR_ARCHITECTURE :

    echo %PROCESSOR_ARCHITECTURE%

  • Cependant, cela peut donner des résultats différents, selon la manière dont l'invite de commande est ouverte. Pour éviter d'obtenir des résultats inattendus en raison de WoW64 , vous pouvez le lire directement à partir du registre (Microsoft a fait au moins deux fautes de frappe dans la clé ):

    reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE

  • Microsoft suggère également de lire le magasin d'informations matérielles à partir du registre:

    reg query "HKLM\Hardware\Description\System\CentralProcessor\0" /v Identifier

  • Vous pouvez également vérifier l'existence de la version x86 du répertoire Program Files (ou de la variable d'environnement qui le pointe) car cela n'existerait que sur un système 64 bits. Contrairement à la variable PROCESSOR_ARCHITECTURE , cela ne dépend pas de la manière dont l'invite de commande est exécutée car le répertoire existe (ou non) indépendamment de la façon dont l'invite est ouverte:

    • ::via env-var
      if not defined ProgramFiles(x86) echo 32-bit

    • ::via file-system
      if not exist "%systemdrive%\Program Files (x86)" echo 32-bit

Ces méthodes peuvent être combinées dans un fichier batch unique (par exemple, cpuinfo.bat ) et fournit un moyen agréable et cpuinfo.bat de vérifier le système à partir d'une invite de commande Windows NT standard sans avoir à recourir à d'autres programmes ou frameworks.

Cela a été testé sur les systèmes 32 bit et Intel 64 bits (testez sur AMD64), donnant des résultats corrects en <1 seconde:

 @echo off echo PROCESSOR_ARCHITECTURE var: echo %PROCESSOR_ARCHITECTURE% | find /i "x86" > nul if %errorlevel%==0 ( echo 32-bit ) else ( echo 64-bit ) echo. echo PROCESSOR_ARCHITECTURE reg: reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE | find /i "x86" > nul if %errorlevel%==0 ( echo 32-bit ) else ( echo 64-bit ) echo. echo CentralProcessor reg: reg query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > nul if %errorlevel%==0 ( echo 32-bit ) else ( echo 64-bit ) echo. echo ProgramFiles(x86) var: if not defined ProgramFiles(x86) ( echo 32-bit ) else ( echo 64-bit ) echo. echo ProgramFiles(x86) dir: if not exist "%systemdrive%\Program Files (x86)" ( echo 32-bit ) else ( echo 64-bit ) echo. 

Bien que ce ne soit pas la réponse idéale, et systeminfo.exe devrait être votre méthode préférée pour déterminer le type de système, c'est-à-dire 32 bits ou 64 bits, cette solution fonctionne un peu plus rapidement si vous ne souhaitez pas attendre systeminfo.exe pour Finit ses travaux.

La commande:

 reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | find "BuildLabEx" 

Avec les modifications correctes à la requête de registre et à la chaîne de recherche, vous pouvez également vérifier les versions du système d'exploitation aussi loin que Windows 95. systeminfo.exe est plus exacte et la manière correcte d'interroger, la reg.exe query est plus rapide et plus compatible avec l'arrière.

SOLUTION GENERIQUE

J'ai vraiment dû creuser cela et avoir un véritable coup d'oeil dans WMI.

La meilleure option à mon avis est d'utiliser simplement cette chaîne PowerShell

 (Get-WmiObject win32_ComputerSystem -ComputerName $ComputerName).SystemType 

Cela fonctionne même avec les anciens Windows 2003 et XP

La réponse sera l'une des

  • PC basé sur X86
  • PC basé sur x64

PC basé sur x64

Ou si vous revenez à certains outils cmd à l'ancienne

 wmic computersystem get systemtype 

Meilleure solution:

Méthode 1:
(Validation en deux étapes avec PROCESSOR_ARCHITECTURE et PROCESSOR_ARCHITEW6432 )

 set Arch=x64 if "%PROCESSOR_ARCHITECTURE%" == "x86" ( if not defined PROCESSOR_ARCHITEW6432 set Arch=x86 ) if %Arch% == "x64" ( msg * "yessss" ) else ( msg * "noooo" ) 

Méthode 2:

 reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x32" > NUL && set OS=32BIT || set OS=64BIT if %OS%==32BIT echo "YESSS" if %OS%==64BIT echo "NOOO" 

Source: https://superuser.com/a/293143/249349

À l'aide de l'interface WMI, sous l'invite de commande. Ouvrez l'invite de commande en tant qu'administrateur, et tapez wmic OS get OSArchitecture et appuyez sur Entrée