PowerShell 명령 줄에서 Windows 버전을 찾는 방법


133

사용중인 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

어떻게해야합니까?


4
당신이 2019+이를보고있는 경우, 있어요 답 무시 표시 올바른로하고 직진 하나 입니다 올바른을 . 천만에요.
BrainSlugs83

답변:


186

.NET 라이브러리에 액세스 할 수 OSVersion있으므로 System.Environment클래스 의 특성에 액세스 하여이 정보를 얻을 수 있습니다. 버전 번호에는 Version속성이 있습니다.

예를 들어

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

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

Windows 버전에 대한 자세한 내용은 여기를 참조하십시오 .


4
참고 [Environment]::OSVersion작동 창-10 , OSVersion.Version.Major반환 (10)
yzorg

4
실행 winver하면 버전 1607이 표시됩니다. 그러나 위의 powershell 명령은 1607을 제공하지 않습니다. Powershell에서이 "1607"번호는 어디서 얻습니까?
CMCDragonkai

6
@CMCDragonkai(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId
Anton Krouglov

3
이 방법은 Windows 8.1부터 더 이상 사용되지 않습니다. 자세한 내용은이 링크 를 참조하십시오.
Slogmeister Extraordinaire

1
@SlogmeisterExtraordinaire이 명령 [System.Environment]::OSVersion은 더 이상 사용되지 않으며 백그라운드에서 사용되는 방법은 더 이상 사용되지 않습니다. 새로운 PS 버전은 백엔드 동작을 변경하고 있습니다 : github.com/PowerShell/PowerShell/issues/…
Randy

109
  1. Jeff가 answer 에서 언급 한 것처럼 Windows 버전 번호를 얻으려면 다음을 사용하십시오.

    [Environment]::OSVersion

    결과가 type [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 표준


61

불행히도 대부분의 다른 답변은 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

3
이것은 winver데스크탑과 systeminfo 서버 에서 기억하기 쉽습니다 . 이 정보를 얻는 통일 된 방법이 없다는 것은 몇 년 동안 저를 당황스럽게했습니다.
MortenB

2
실제로 유용한 MS 정보에 대한 훌륭한 링크. Win8.1 (및 이하)의 경우 표시되는 정보는 다음과 같습니다 OS Version : 6.3.9600 N/A Build 9600. 따라서 W81 이하 버전에서는 (항상 간과 된) LTSB 버전을 보는 것이 더 유익 할 수 있습니다. 출력을 참조하십시오 (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").BuildLabEx처럼 보일 수있다 : 9600.19179.amd64fre.winblue_ltsb_escrow.181015-1847. 내 생각 에 그 181015부분은 빌드 날짜이고 반면에 1847빌드 또는 릴리스 버전입니다. 이것을 커널 hal 과 비교해야 할 수도 있습니다 .
not2qubit

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

또는 골프

gwmi win32_operatingsystem | % caption

결과

Microsoft Windows 7 Ultimate

4
새 코드에서는 Get-WmiObject 대신 Get-CimInstance를 사용하는 것이 좋습니다.
Der_Meister

2
@Der_Meister PSv3 +에만 해당
Maximilian Burszley

20

위의 모든 솔루션과 달리 Windows정식 버전 (개정 / 빌드 번호 포함) 이 제공됩니다.

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

결과:

10.0.10240.16392 (th1_st1.150716-1608)

5
개정 번호를 올바르게보고하는 한 이것이 가장 좋은 해결책입니다. 다른 사람은 (적어도 내가 테스트 한대로) 없습니다.
BStateham

6
이것은 전체 빌드 번호를 얻을 수있는 유일한 솔루션입니다. 그러나 system32의 모든 파일이 각 업데이트로 업데이트 10.0.10586.0 (th2_release.151029-1700)되는 것은 아닙니다 10.0.10586.63 (th2_release.160104-1513). 예를 들어, winload.exe에는 hal.dll이 계속 표시 됩니다.
melak47

2
여기에서 버전을 얻는 작은 스크립트의 DLL이 / EXE 가장 높은 빌드 날짜 : 요점
melak47

6
이것은 Microsoft 측에서 구현 세부 사항에 의존하며 계속 보장 할 수는 없습니다. 그것은 지금 작동하지만 장기적으로 스크립트가 작동하기를 원한다면 이것에 의존하지 않아야합니다.
Nick

1
@Jaykul 글쎄, 나는 두 가지 이유로 동의하지 않습니다. (1) "1803"과 같은 숫자가 항상 사용 가능한 것은 아니기 때문에 (예 : Win8에서) 어떤 점에서 사용해야합니까? (2) 단지가되어야하는 이유 기술적 이유가없는 정확한 version. OS는 커널, HAL, UBR 및 기능 등과 같은 부분에 의해 빌드 및 업데이트됩니다 . 따라서 우리는 모든 것을 실제로 표시해야합니다. 내가 생각하는 점에서 BuildLabEx, Kernel그리고 HAL(순서대로) 더 적절한 제공 할 수있는 가장 적절한 방법이 될 것입니다 버전 . 당신이 무엇인지 아는 것 같은데하지만 이후 잘못 , 당신은 무엇을 할 전망 권리 .
not2qubit

18
Get-ComputerInfo | select WindowsProductName, WindowsVersion, OsHardwareAbstractionLayer

보고

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

@ not2qubit 정말요? 내 표면 도서 2. 1 초 소개
에릭 HERLITZ

14

PowerShell 5부터 :

Get-ComputerInfo
Get-ComputerInfo -Property Windows*

나는이 명령이 시스템 정보를 수집하기 위해 지금까지 발견 된 1001 가지 방법을 거의 시도한다고 생각합니다 ...


내가 얻은 응답의 일부는 이상합니다 ... 저는 Windows 10 1909에 있지만 "WindowsCurrentVersion"은 6.3입니다. 6.3은 Windows 8.1이므로 10이 될 것이라고 생각합니다. 그렇지 않으면, 나는이 명령이 제공 한 정보를 좋아합니다
Randy

8

Windows 8.1 (6.3.9600)과 Windows 8 (6.2.9200)을 구별하려면 다음을 사용하십시오.

(Get-CimInstance Win32_OperatingSystem).Version 

올바른 버전을 얻으려면. [Environment]::OSVersionWindows 8.1에서 제대로 작동하지 않습니다 (Windows 8 버전을 반환 함).


참고 [Environment]::OSVersion작동 창-10 , OSVersion.Version.Major반환 (10)
yzorg

1
모두 (Get-CimInstance Win32_OperatingSystem).Version[Environment]::OSVersion나를위한 작품과 같은 결과 반환 : 6.3.9600.0
VirtualVDX

불행히도 6.3.9600은 Win 8.1이 아니라 server 2012 R2도 동일한 빌드 번호를 반환합니다.
bytejunkie

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

업데이트 : 다음은 정규식을 사용하여 약간 단순화 된 스크립트입니다.

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

5

위의 스크립트를 가져 와서 이것을 생각해 내기 위해 약간 조정했습니다.

$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

다음과 같은 결과를 얻으려면

Microsoft Windows 10 Home 64 비트 버전 : 1709 빌드 : 16299.431 @ {WindowsInstallDateFromRegistry = 18-01-01 2:29:11 AM}

힌트 : 설치 날짜에서 접두사 텍스트를 제거하여 더 읽기 쉬운 헤더로 바꿀 수 있다는 점에 감사드립니다.


install date 명령을 실행하는 데 시간이 걸리므로 더 빠릅니다. [timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970')).AddSeconds($(get-itemproperty "HKLM:\Software\Microsoft\Windows NT\CurrentVersion").InstallDate) 조금 더 복잡하지만 훨씬 빠르게 실행됩니다. 시간대 부분을 생략 할 수도 있습니다.([datetime]'1/1/1970').AddSeconds($(get-itemproperty "HKLM:\Software\Microsoft\Windows NT\CurrentVersion").InstallDate)
Randy

4

MoonStom이 말했듯 [Environment]::OSVersion이 업그레이드 된 Windows 8.1 (Windows 8 버전을 반환 함)에서 제대로 작동하지 않습니다 : link .

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}
}

4

사용하다:

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

다음을 사용하여 버전 번호를 얻을 수도 있습니다. Get-WmiObject -class win32_operatingsystem | 버전 선택
KERR

출력을 표시하여이 답변을 개선 할 수 있습니다.
james.garriss

4

정보를 해독하려는 경우 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


2

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 

2

Windows 10 1809의 PowerShell v5에서 winver.exe에 동일한 출력을 생성하려면

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

또한 Windows 10의 "설정> 시스템> 정보"버전과 일치합니다. 그리고 많은 솔루션이 내 컴퓨터에없는 업데이트 빌드 수정 권한을 얻습니다.
Vimes

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

1

이것은 실제로 긴 스레드이며 아마도 정답은 근본적인 질문을 해결하지 못하기 때문에 아마입니다. 나는이 사이트를 보았습니다 : 버전 및 빌드 번호 는 Microsoft Windows 세계에서 무엇이 무엇인지에 대한 명확한 개요를 제공했습니다.

내가 다루고있는 정확한 Windows OS를 아는 것이 중요하기 때문에 전체 버전 무지개를 버리고 BuildNumber에 집중했습니다. 빌드 번호는 다음 중 하나를 통해 얻을 수 있습니다.

([Environment]::OSVersion.Version).Build

또는

(Get-CimInstance Win32_OperatingSystem).buildNumber

선택은 당신이 선호하는 방법입니다. 그래서 거기에서 나는 다음 라인을 따라 뭔가를 할 수 있습니다.

    switch ((Get-CimInstance Win32_OperatingSystem).BuildNumber) 
{
    6001 {$OS = "W2K8"}
    7600 {$OS = "W2K8R2"}
    7601 {$OS = "W2K8R2SP1"}    
    9200 {$OS = "W2K12"}
    9600 {$OS = "W2K12R2"}
    14393 {$OS = "W2K16v1607"}
    16229 {$OS = "W2K16v1709"}
    default { $OS = "Not Listed"}

}
Write-Host "Server system: $OS" -foregroundcolor Green

참고 : 서버 시스템에 대해서만 위의 내용을 사용했지만 워크 스테이션에 쉽게 적용하거나 두 가지 모두를 지원하도록 영리하게 확장 할 수도 있습니다.하지만이를 그대로 두겠습니다.

즐기고, 즐기십시오!


0

이렇게하면 다른 모든 솔루션 (Windows 10에서 테스트)과 달리 Windows 버전 (개정 / 빌드 번호 포함)의 정식 및 CORRECT (winver.exe를 실행할 때 찾은 것과 동일한 버전 번호)가 제공됩니다.

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

'localhost'로 이것을 실행하고 로컬 호스트에서 실제 컴퓨터 이름 ( 'hostname'으로 반환)을 사용하는 동안 오류가 발생했습니다. 서비스 등을 활성화하지 않고 로컬 컴퓨터에서 정보를 얻을 수 있도록이 솔루션을 조정할 수 있습니까?
monojohnny

[xxxxxx] 다음 오류 메시지와 함께 원격 서버 xxxxxx에 연결하지 못했습니다. 클라이언트가 요청에 지정된 대상에 연결할 수 없습니다. 대상의 서비스가 실행 중이고 요청을 수락하고 있는지 확인하십시오. 대상, 가장 일반적으로 IIS 또는 WinRM에서 실행중인 WS-Management 서비스에 대한 로그 및 문서를 참조하십시오. 대상이 WinRM 서비스 인 경우 대상에서 다음 명령을 실행하여 WinRM 서비스를 분석하고 구성하십시오 : "winrm quickconfig". 더 많은 정보를 원하시면, [...]
monojohnny

나를 위해 일했다. 공감. Windows 10 릴리스 ID-1507, 1511, 1607 등을 포함한다면 완벽한 스크립트가 될 것입니다.
Anton Krouglov

0

WSUS 서버가 잘못된 버전을 표시하기 때문에 정확한 버전을 찾기 위해 많은 것을 검색했습니다. UBR 레지스트리 키에서 개정판을 얻는 것이 가장 좋습니다.

    $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

0

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

0

[해결됨]

#copy all the code below:
#save file as .ps1 run and see the magic

 Get-WmiObject -Class Win32_OperatingSystem | ForEach-Object -MemberName Caption
 (Get-CimInstance Win32_OperatingSystem).version


#-------------comment-------------#
#-----finding windows version-----#

$version= (Get-CimInstance Win32_OperatingSystem).version
$length= $version.Length
$index= $version.IndexOf(".")
[int]$windows= $version.Remove($index,$length-2)  
$windows
#-----------end------------------#
#-----------comment-----------------#

SO에 오신 것을 환영합니다! 질문에 대답 할 때 조금 설명해보십시오. 이 경우 20 개의 답글이 더 있으므로 귀하의 프로를 공개하는 것이 좋습니다.
David García Bodego

0

OSVersion.Version.Major를 확인하여 이와 같은 것을 사용할 수도 있습니다.

IF ([System.Environment]::OSVersion.Version.Major -ge 10) {Write-Host "Windows 10 or above"}
IF ([System.Environment]::OSVersion.Version.Major -lt 10) {Write-Host "Windows 8.1 or below"}

-2

파이썬을 사용하여 작업을 단순화 할 수 있습니다 (모든 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

문제는 " PowerShell 명령 줄에서 Windows 버전을 찾는 방법 "입니다. 이것은 실제로 그 질문에 대한 답이 아니며 삭제를 고려해야합니다.
Alain O'Dea

-3
$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
   }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.