Как найти версию Windows из командной строки PowerShell - PullRequest
100 голосов
/ 07 сентября 2011

Как мне узнать, какую версию Windows я использую?

Я использую PowerShell 2.0 и попробовал:

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

Как мне это сделать?

Ответы [ 21 ]

137 голосов
/ 07 сентября 2011

Поскольку у вас есть доступ к библиотеке .NET, вы можете получить доступ к свойству OSVersion класса System.Environment, чтобы получить эту информацию. Для номера версии есть свойство Version.

Например,

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

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

Подробности версий Windows можно найти здесь .

97 голосов
/ 13 июня 2012
  1. Чтобы получить номер версии Windows, как отмечает Джефф в своем ответе , используйте:

    [Environment]::OSVersion
    

    Стоит отметить, что результат имеет тип[System.Version], поэтому можно проверить, скажем, Windows 7 / Windows Server 2008 R2 и более поздних версий с

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

    Однако это не скажет вам, является ли он клиентом илиWindows сервера, ни название версии.

  2. Используйте WMI Win32_OperatingSystem класс (всегда один экземпляр), например:

    (Get-WmiObject -class Win32_OperatingSystem).Caption
    

    вернет что-то вроде

    Microsoft® Windows Server® 2008 Standard

30 голосов
/ 28 апреля 2017

К сожалению, большинство других ответов не предоставляют информацию, специфичную для Windows 10.

Windows 10 имеет версий своих собственных: 1507, 15111607, 1703 и т. Д. .Это то, что показывает winver.

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

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

См. Также связанный вопрос о суперпользователе .

Что касается других версий Windows, используйте systeminfo.Оболочка Powershell:

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]:...

Вывод Windows 10 для той же команды:

OS Name             : Microsoft Windows 10 Enterprise N 2016 LTSB
OS Version          : 10.0.14393 N/A Build 14393
OS Manufacturer     : Microsoft Corporation
OS Configuration    : Standalone Workstation
OS Build Type       : Multiprocessor Free
System Type         : x64-based PC
System Directory    : C:\Windows\system32
System Locale       : en-us;English (United States)
Hotfix(s)           : N/A
23 голосов
/ 13 мая 2014
Get-WmiObject -Class Win32_OperatingSystem | ForEach-Object -MemberName Caption

Или игра в гольф

gwmi win32_operatingsystem | % caption

Результат

Microsoft Windows 7 Ultimate
16 голосов
/ 28 июля 2015

Это даст вам полную версию Windows (включая номер редакции / сборки) в отличие от всех описанных выше решений:

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

Результат:

10.0.10240.16392 (th1_st1.150716-1608)
10 голосов
/ 25 мая 2017

С PowerShell 5:

Get-ComputerInfo
Get-ComputerInfo -Property Windows*

Я думаю, что эта команда в значительной степени пробует 1001 различные способы обнаружения системной информации ...

8 голосов
/ 31 октября 2016

Я уточняю один из ответов

Я достиг этого вопроса, пытаясь сопоставить вывод winver.exe:

Version 1607 (OS Build 14393.351)

Мне удалось извлечь строку сборки с помощью:

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

Результат: 14393.351

Обновлено : Вот несколько упрощенный скрипт с использованием регулярных выражений

(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").BuildLabEx -match '^[0-9]+\.[0-9]+' |  % { $matches.Values }
8 голосов
/ 27 мая 2014

Если вы хотите различать Windows 8.1 (6.3.9600) и Windows 8 (6.2.9200), используйте

(Get-CimInstance Win32_OperatingSystem).Version 

, чтобы получить правильную версию.[Environment]::OSVersion не работает должным образом в Windows 8.1 (возвращает версию для Windows 8).

4 голосов
/ 10 августа 2018
PS C:\> Get-ComputerInfo | select WindowsProductName, WindowsVersion, OsHardwareAbstractionLayer

возвращает

WindowsProductName    WindowsVersion OsHardwareAbstractionLayer
------------------    -------------- --------------------------
Windows 10 Enterprise 1709           10.0.16299.371 
4 голосов
/ 23 сентября 2014

Как говорит MoonStom, [Environment]::OSVersion не работает должным образом в обновленной Windows 8.1 (возвращается версия Windows 8): ссылка .

Если вы хотите провести различие между Windows 8.1 (6.3.9600) и Windows 8 (6.2.9200), вы можете использовать (Get-CimInstance Win32_OperatingSystem).Version, чтобы получить правильную версию. Однако это не работает в PowerShell 2. Используйте это:

$version = $null
try {
    $version = (Get-CimInstance Win32_OperatingSystem).Version
}
catch {
    $version = [System.Environment]::OSVersion.Version | % {"{0}.{1}.{2}" -f $_.Major,$_.Minor,$_.Build}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...