Как найти версию Windows из командной строки PowerShell

Как найти версию 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

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

Ответ 1

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

Например,

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

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

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

Ответ 2

  • Чтобы получить номер версии Windows, как отмечает Джефф в своем ответе , используйте:

    [Environment]::OSVersion
    

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

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

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

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

    (Get-WmiObject -class Win32_OperatingSystem).Caption
    

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

    Стандарт Microsoft® Windows Server® 2008

Ответ 3

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

Windows 10 имеет собственные версии: 1507, 1511, 1607, 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

Ответ 4

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

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

gwmi win32_operatingsystem | % caption

Результат

Microsoft Windows 7 Ultimate

Ответ 5

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

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

Результат:

10.0.10240.16392 (th1_st1.150716-1608)

Ответ 6

Так как PowerShell 5:

Get-ComputerInfo
Get-ComputerInfo -Property Windows*

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

Ответ 7

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

(Get-CimInstance Win32_OperatingSystem).Version 

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

Ответ 8

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

Я достиг этого вопроса, пытаясь сопоставить результат с 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

Обновлено. Ниже приведено несколько упрощенное script с использованием regex

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

Ответ 9

Использование:

Get-WmiObject -class win32_operatingsystem -computer computername | Select-Object Caption

Ответ 10

Как говорит 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}
}

Ответ 11

PS C:\> Get-ComputerInfo | select WindowsProductName, WindowsVersion, OsHardwareAbstractionLayer

возвращается

WindowsProductName    WindowsVersion OsHardwareAbstractionLayer
------------------    -------------- --------------------------
Windows 10 Enterprise 1709           10.0.16299.371 

Ответ 12

Я взял приведенные выше сценарии и немного подправил их, чтобы придумать следующее:

$name=(Get-WmiObject Win32_OperatingSystem).caption
$bit=(Get-WmiObject Win32_OperatingSystem).OSArchitecture

$vert = " Version:"
$ver=(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ReleaseId

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

$installd = Get-ComputerInfo -Property WindowsInstallDateFromRegistry

Write-host $installd
Write-Host $name, $bit, $vert, $ver, 'enter code here'$buildt, $build, $installd

Чтобы получить такой результат:

64-разрядная версия Microsoft Windows 10 Home: 1709 Сборка: 16299.431 @{WindowsInstallDateFromRegistry = 18-01-01 2:29:11 AM}

Подсказка: я был бы признателен за ручную очистку текста префикса от даты установки, чтобы я мог заменить его более читаемым заголовком.

Ответ 13

Windows PowerShell 2.0:

$windows = New-Object -Type PSObject |
           Add-Member -MemberType NoteProperty -Name Caption -Value (Get-WmiObject -Class Win32_OperatingSystem).Caption -PassThru |
           Add-Member -MemberType NoteProperty -Name Version -Value [Environment]::OSVersion.Version                     -PassThru

Windows PowerShell 3.0:

$windows = [PSCustomObject]@{
    Caption = (Get-WmiObject -Class Win32_OperatingSystem).Caption
    Version = [Environment]::OSVersion.Version
}

Для отображения (обе версии):

"{0}  ({1})" -f $windows.Caption, $windows.Version 

Ответ 14

Если вы пытаетесь расшифровать информацию, которую MS размещает на своем сайте исправлений, например https://technet.microsoft.com/en-us/library/security/ms17-010.aspx

вам понадобится комбо, например:

$name=(Get-WmiObject Win32_OperatingSystem).caption $bit=(Get-WmiObject Win32_OperatingSystem).OSArchitecture $ver=(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ReleaseId Write-Host $name, $bit, $ver

Microsoft Windows 10 Home 64-битная 1703

Ответ 15

(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name BuildLabEx).BuildLabEx

Ответ 16

Это даст вам полный и CORRECT (тот же номер версии, который вы найдете при запуске winver.exe) версии Windows (включая номер версии/сборки) REMOTELY, в отличие от всех других решений (проверенных на Windows 10):

Function Get-OSVersion {
Param($ComputerName)
    Invoke-Command -ComputerName $ComputerName -ScriptBlock {
        $all = @()
        (Get-Childitem c:\windows\system32) | ? Length | Foreach {

            $all += (Get-ItemProperty -Path $_.FullName).VersionInfo.Productversion
        }
        $version = [System.Environment]::OSVersion.Version
        $osversion = "$($version.major).0.$($version.build)"
        $minor = @()
        $all | ? {$_ -like "$osversion*"} | Foreach {
            $minor += [int]($_ -replace".*\.")
        }
        $minor = $minor | sort | Select -Last 1

        return "$osversion.$minor"
    }
}

Ответ 17

Я много искал, чтобы узнать точную версию, потому что сервер WSUS показывает неправильную версию. Лучше всего получить ревизию из реестра UBR KEY.

    $WinVer = New-Object –TypeName PSObject
$WinVer | Add-Member –MemberType NoteProperty –Name Major –Value $(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion' CurrentMajorVersionNumber).CurrentMajorVersionNumber
$WinVer | Add-Member –MemberType NoteProperty –Name Minor –Value $(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion' CurrentMinorVersionNumber).CurrentMinorVersionNumber
$WinVer | Add-Member –MemberType NoteProperty –Name Build –Value $(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion' CurrentBuild).CurrentBuild
$WinVer | Add-Member –MemberType NoteProperty –Name Revision –Value $(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion' UBR).UBR
$WinVer

Ответ 18

Вы можете использовать Python для упрощения вещей (работает на всех версиях Windows и на всех других платформах):

import platform

print(platform.system()) # returns 'Windows', 'Linux' etc.
print(platform.release()) # returns for Windows 10 or Server 2019 '10'

if platform.system() = 'Windows':
    print(platform.win32_ver()) # returns (10, 10.0.17744, SP0, Multiprocessor Free) on windows server 2019

Ответ 19

Используя Windows Powershell, можно получить нужные данные следующим образом.

Надпись:

(Get-WmiObject -class Win32_OperatingSystem).Caption

ReleaseId:

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

версия:

(Get-CimInstance Win32_OperatingSystem).version

Ответ 20

Чтобы создать идентичный вывод для winver.exe в PowerShell v5 в Windows 10 1809:

$Version = Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\'
"Version $($Version.ReleaseId) (OS Build $($Version.CurrentBuildNumber).$($Version.UBR))"

Ответ 21

$OSVersion = [Version](Get-ItemProperty -Path "$($Env:Windir)\System32\hal.dll" -ErrorAction SilentlyContinue).VersionInfo.FileVersion.Split()[0]

В Windows 10 возвращается: 10.0.10586.420

Затем вы можете использовать переменную для доступа к свойствам для детального сравнения

$OSVersion.Major equals 10
$OSVersion.Minor equals 0
$OSVersion.Build equals 10586
$OSVersion.Revision equals 420

Кроме того, вы можете сравнить версии операционной системы, используя следующие

If ([Version]$OSVersion -ge [Version]"6.1")
   {
       #Do Something
   }