Frage Wie finde ich die Windows-Version über die PowerShell-Befehlszeile?


Wie finde ich heraus, welche Windows-Version ich verwende?

Ich verwende PowerShell 2.0 und habe versucht:

PS C:\> ver
The term 'ver' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify tha
t the path is correct and try again.
At line:1 char:4
+ ver <<<< 
    + CategoryInfo          : ObjectNotFound: (ver:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Wie mache ich das?


74
2017-09-07 07:20


Ursprung


Antworten:


Da Sie Zugriff auf die .NET-Bibliothek haben, können Sie auf die OSVersion Eigentum der System.Environment Klasse, um diese Informationen zu erhalten. Für die Versionsnummer gibt es die Version Eigentum.

Beispielsweise,

PS C:\> [System.Environment]::OSVersion.Version

Major  Minor  Build  Revision
-----  -----  -----  --------
6      1      7601   65536

Details zu Windows-Versionen können gefunden werden Hier.


104
2017-09-07 07:37



  1. Um die Windows-Versionsnummer zu erhalten, wie Jeff in seinem Antworten, benutzen:

    [Environment]::OSVersion
    

    Es ist erwähnenswert, dass das Ergebnis vom Typ ist [System.Version]So kann beispielsweise nach Windows 7 / Windows Server 2008 R2 und danach gesucht werden

    [Environment]::OSVersion.Version -ge (new-object 'Version' 6,1)
    

    Dies sagt Ihnen jedoch nicht, ob es sich um einen Client- oder Server-Windows oder den Namen der Version handelt.

  2. Verwenden Sie WMIs Win32_OperatingSystem Klasse (immer einzelne Instanz), zum Beispiel:

    (Get-WmiObject -class Win32_OperatingSystem).Caption
    

    wird etwas zurückgeben

    Microsoft Windows Server 2008 Standard


86
2018-06-13 09:56



Get-WmiObject -Class Win32_OperatingSystem | ForEach-Object -MemberName Caption

Oder golfte

gwmi win32_operatingsystem | % caption

Ergebnis

Microsoft Windows 7 Ultimate

20
2018-05-13 02:57



Dies wird dir das geben Vollversion von Windows (einschließlich Revisions- / Build-Nummer) im Gegensatz zu allen oben genannten Lösungen:

(Get-ItemProperty -Path c:\windows\system32\hal.dll).VersionInfo.FileVersion

Ergebnis:

10.0.10240.16392 (th1_st1.150716-1608)

13
2017-07-28 09:54



Leider enthalten die meisten anderen Antworten keine für Windows 10 spezifischen Informationen.

Windows 10 hat Versionen für sich selbst: 1507, 1511, 1607, 1703 usw. Das ist was winver zeigt an.

Powershell:
(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ReleaseId

Command prompt (CMD.EXE):
Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseId

Siehe auch verwandte Frage auf Superuser.

Wie für andere Windows-Versionen verwenden systeminfo. Powershell-Wrapper:

PS C:\> systeminfo /fo csv | ConvertFrom-Csv | select OS*, System*, Hotfix* | Format-List


OS Name             : Microsoft Windows 7 Enterprise
OS Version          : 6.1.7601 Service Pack 1 Build 7601
OS Manufacturer     : Microsoft Corporation
OS Configuration    : Standalone Workstation
OS Build Type       : Multiprocessor Free
System Type         : x64-based PC
System Locale       : ru;Russian
Hotfix(s)           : 274 Hotfix(s) Installed.,[01]: KB2849697,[02]: KB2849697,[03]:...

13
2018-04-27 21:13



Wenn Sie zwischen Windows 8.1 (6.3.9600) und Windows 8 (6.2.9200) unterscheiden möchten, verwenden Sie

(Get-CimInstance Win32_OperatingSystem).Version 

um die richtige Version zu bekommen. [Environment]::OSVersion funktioniert nicht ordnungsgemäß in Windows 8.1 (es gibt eine Windows 8-Version zurück).


6
2018-05-27 09:39



Ich verfeinere eines der Antworten

Ich habe diese Frage beim Versuch, die Ausgabe von winver.exe anzupassen, erreicht:

Version 1607 (OS Build 14393.351) 

Ich konnte die Build-Zeichenfolge mit extrahieren:

,((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name BuildLabEx).BuildLabEx -split '\.') | % {  $_[0..1] -join '.' }  

Ergebnis: 14393.351

Aktualisiert: Hier ist ein leicht vereinfachtes Skript mit Regex

(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").BuildLabEx -match '^[0-9]+\.[0-9]+' |  % { $matches.Values }

6
2017-10-31 20:52



Wie MoonStom sagt, [Environment]::OSVersion funktioniert nicht ordnungsgemäß auf einem aktualisierten Windows 8.1 (es gibt eine Windows 8-Version zurück): Verknüpfung.

Wenn Sie zwischen Windows 8.1 (6.3.9600) und Windows 8 (6.2.9200) unterscheiden möchten, können Sie verwenden (Get-CimInstance Win32_OperatingSystem).Version um die richtige Version zu bekommen. Dies funktioniert jedoch nicht in PowerShell 2. Verwenden Sie also Folgendes:

$version = $null
try {
    $version = (Get-CimInstance Win32_OperatingSystem).Version
}
catch {
    $version = [System.Environment]::OSVersion.Version | % {"{0}.{1}.{2}" -f $_.Major,$_.Minor,$_.Build}
}

4
2017-09-23 19:37