Ermitteln Sie Windows Server Version 32/64-Bit in der CLI

Antworten:

12

Eine etwas schnellere Möglichkeit wäre, nach dem% ProgramFiles (x86)% -Verzeichnis zu suchen. Wenn es vorhanden ist, wird 64-Bit ausgeführt. Wenn es nicht vorhanden ist, wird 32-Bit ausgeführt.

Schneller Einzeiler:

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

Das wird ausgegeben, 64-bitwenn das Verzeichnis existiert. Dies würde jedoch fehlschlagen, wenn es nicht als Variable, sondern als Verzeichnis (als% ProgramFiles (x86)%) existieren würde.

Sie können auch das Such-Tool verwenden, um die Bit-Qualität genauer zu bestimmen.

set | find "ProgramFiles(x86)"

oder mit dem systeminfoBefehl zuvor

systeminfo | find /I "System type"

(Beinhaltet das /Ifür XP / 2003/2008 / etc)

Joshua
quelle
Es sollte systeminfo | find "System type" Capitol T sein, das nichts zurückgibt.
Nathan DeWitt
Ja, das habe ich komplett verpasst. Danke Nathan! Natürlich können Sie auch die Option / I verwenden, um die Groß- und Kleinschreibung zu ignorieren.
Joshua
Server 2008, es ist eigentlich ein großes "T". In jedem Fall. Danke für die Antwort - perfekt.
Romantik
Fein! Ich habe das / I-Kommando zu systeminfo hinzugefügt, damit es gefunden wird, ob es sich um eine Groß- oder Kleinschreibung handelt. :)
Joshua
22

Wie wäre es mit:

echo %PROCESSOR_ARCHITECTURE%

Dies gibt x86 auf 32-Bit-Systemen und AMD64 (oder IA64 ) auf 64-Bit-Systemen zurück.

Gaff
quelle
2
Wie kommt es, dass dies 0 Stimmen hatte? oO (+1)
Apache
1
Dies ist eine viel bessere Lösung , als das Vorhandensein des Program Files (x86)Verzeichnisses zu überprüfen, wenn jemand anderes es gepostet hat. Sie können auch überprüfen, %PROGRAMFILES(X86)%ob die Umgebungsvariable vorhanden ist (wenn sie nicht vorhanden ist, befinden Sie sich auf einem x86-Computer).
Durchbruch
3
> Wie kommt es, dass dies 0 Stimmen hatte? Vielleicht, weil es nicht zuverlässig ist .
Synetech
2
DIESE ANTWORT HAT PROBLEME !! - stackoverflow.com/questions/1738985/…
T.Todua
9
systeminfo 

Es wird einiges auflisten, etwa 10 Felder weiter unten gibt es ein Feld namens Systemtyp. Hier erfahren Sie, ob es sich um x86 oder x64 handelt

MDMarra
quelle
8
systeminfo | find /I "System type"

Dies ist vom Gebietsschema abhängig und langsam .

echo %PROCESSOR_ARCHITECTURE%

Beachten Sie, dass es sich um x86 in 32-Bit handelt cmd.exe.

Der richtige Weg:

set Arch=x64
if "%PROCESSOR_ARCHITECTURE%" == "x86" ( 
    if not defined PROCESSOR_ARCHITEW6432 set Arch=x86
) 
Air Max
quelle
Stimmen Sie Ihren Gedanken zur Verwendung von "systeminfo" vollständig zu. Vielen Dank für Ihren Vorschlag, ich habe das in einem meiner Skripte verwendet
abstrask
Die beste Antwort! mit zusätzlichem ValidatorPROCESSOR_ARCHITEW6432
T.Todua
5

Es gibt zahlreiche Möglichkeiten, die Prozessorarchitektur unter Windows zu überprüfen:

  • Die schnellste, einfachste und kompatibelste Möglichkeit, die Prozessorarchitektur in mindestens Windows 2000 und höher zu überprüfen, besteht darin, die PROCESSOR_ARCHITECTURE Umgebungsvariable zu untersuchen :

    echo %PROCESSOR_ARCHITECTURE%

  • Dies kann jedoch zu unterschiedlichen Ergebnissen führen, je nachdem, wie die Eingabeaufforderung geöffnet wird. Um zu vermeiden, dass aufgrund von WoW64 „unerwartete Ergebnisse“ erzielt werden , können Sie diese direkt aus der Registrierung lesen (Microsoft hat nicht weniger als zwei Tippfehler im Schlüssel gemacht ):

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

  • Microsoft empfiehlt außerdem, den Hardware-Informationsspeicher aus der Registrierung zu lesen:

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

  • Sie können auch prüfen, ob die x86-Version des Program FilesVerzeichnisses (oder der darauf verweisenden Umgebungsvariablen ) vorhanden ist, da sie nur auf einem 64-Bit-System vorhanden wäre. Im Gegensatz zur PROCESSOR_ARCHITECTUREVariablen hängt dies nicht davon ab, wie die Eingabeaufforderung ausgeführt wird, da das Verzeichnis vorhanden ist (oder nicht), unabhängig davon, wie die Eingabeaufforderung geöffnet wird:

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

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

Diese Methoden können in einer einzigen Batch-Datei kombiniert werden (z. B. cpuinfo.bat) und bieten eine schöne, blitzschnelle Möglichkeit, das System über eine Windows NT-Standard-Eingabeaufforderung zu überprüfen, ohne dass andere Programme oder Frameworks ausgeführt werden müssen.

Dies wurde auf 32-Bit- und Intel 64-Bit-Systemen getestet (bitte auf AMD64 testen) und ergab korrekte Ergebnisse in <1 Sekunde:

@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.
Synetech
quelle
3

ALLGEMEINE LÖSUNG

Ich musste mich wirklich damit auseinandersetzen und mich in WMI umsehen.

Die beste Option ist meiner Meinung nach, einfach diese PowerShell-Zeichenfolge zu verwenden

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

Dies funktioniert sogar mit alten Windows 2003 und XP

Die Antwort wird eine von sein

  • X86-basierter PC
  • x64-basierter PC

x64-basierter PC

Oder wenn Sie auf einige altmodische cmd-Tools zurückgreifen

wmic computersystem get systemtype
Dennis
quelle
2

Obwohl dies nicht die ideale Antwort ist und systeminfo.exeIhre bevorzugte Methode zur Bestimmung des Systemtyps sein sollte, dh 32-Bit oder 64-Bit, läuft diese Lösung etwas schneller, wenn Sie nicht warten möchten, systeminfo.exebis die Arbeit abgeschlossen ist.

Der Befehl:

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

Mit den richtigen Änderungen an der Registrierungsabfrage und der Suchzeichenfolge können Sie auch Betriebssystemversionen ab Windows 95 überprüfen. Ist systeminfo.exegenauer und die richtige Art der Abfrage, reg.exe queryist schneller und abwärtskompatibler.

Justin
quelle
Vielen Dank, Tom, für die Änderungen. Sie haben wichtige Informationen aus der Antwort entfernt und anschließend einen Fehler gemeldet.
Justin
1
Anstatt die Ausgabe über den fehlerhaften "find" -Befehl von Microsoft weiterzuleiten, können Sie REG.EXE mit der reg query "HKLM\[..as before..]\Version" /v BuildLabEx
Option
0

Bessere LÖSUNG:

Methode 1:
(Bestätigung in zwei Schritten mit PROCESSOR_ARCHITECTUREund 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"
)

Methode 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"

Quelle: /superuser//a/293143/249349

T.Todua
quelle
-1

Verwenden der WMI-Oberfläche unter der Eingabeaufforderung. Öffnen Sie die Eingabeaufforderung als Administrator, geben Sie ein wmic OS get OSArchitectureund drücken SieEnter

Terry
quelle