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+でこれを表示している場合、の答え無視マーク正しいとするとに直行1 正しいです。どういたしまして。
BrainSlugs83

回答:


186

.NETライブラリにアクセスできるためOSVersionSystem.Environmentクラスのプロパティにアクセスしてこの情報を取得できます。バージョン番号には、Versionプロパティがあります。

例えば、

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

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

Windowsバージョンの詳細については、こちらをご覧ください


4
注記[Environment]::OSVersionで働く窓-10OSVersion.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
アントンクルーグロフ2017

3
このメソッドは、Windows 8.1で廃止されました。詳細については、このリンクを参照してください。
Slogmeister Extraordinaire 2017

1
@SlogmeisterExtraordinaireコマンド[System.Environment]::OSVersionは非推奨ではなく、バックグラウンドで使用するメソッドは非推奨です。新しいPS版は、バックエンドの動作を変更している:github.com/PowerShell/PowerShell/issues/...
ランディ・

109
  1. Windowsのバージョン番号を取得するには、ジェフが彼の回答で述べているように、

    [Environment]::OSVersion

    結果がタイプ[System.Version]であることは注目に値します。たとえば、Windows 7 / Windows Server 2008 R2以降をチェックすることができます

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

    ただし、クライアントWindowsかサーバーWindowsか、バージョンの名前はわかりません。

  2. Win32_OperatingSystemたとえば、WMIのクラス(常に単一のインスタンス)を使用します。

    (Get-WmiObject -class Win32_OperatingSystem).Caption

    のようなものを返します

    Microsoft®WindowsServer®2008 Standard


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 2017

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 2018

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 2017年

2
@Der_Meister PSv3 +にのみ当てはまります
Maximilian Burszley 2018

20

これにより、上記のすべてのソリューションとは異なり、Windowsフルバージョン(リビジョン/ビルド番号を含む)が提供されます。

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

結果:

10.0.10240.16392 (th1_st1.150716-1608)

5
これは、リビジョン番号を正しく報告している限り、私にとっては最善の解決策です。他のどれも(少なくとも私がそれらをテストしたように)ありません。
BStateham 2016年

6
これは、これまでのところ、完全なビルド番号を取得できる唯一のソリューションです。ただし、system32内のすべてのファイルが更新のたびに更新されるわけではありません。たとえば、10.0.10586.0 (th2_release.151029-1700)winload.exe が更新されても、hal.dllは引き続き表示されます10.0.10586.63 (th2_release.160104-1513)
melak47 2016年

2
ここからバージョンを取得し、小さなスクリプトですDLL / EXE最高のビルド日付で:要旨
melak47

6
これは、Microsoft側の実装の詳細に依存しており、Microsoftが引き続き実行する保証はありません。現在は機能しますが、スクリプトを長期的に機能させたい場合は、これに依存しないようにする必要があります。
Nick

1
@Jaykulまあ、私は2つの理由で同意しません。(1)これらの「1803」のような番号は常に利用できるとは限らないため(Win8など)、そこで何を使用する必要がありますか?(2)正しいものが1つだけである必要があるという技術的な理由はありませんversion。OSは、カーネル、HAL、UBR、機能などのパーツによって構築(および更新)されます。そのため、これらすべてを実際に表示する必要があります。その点で、私が思うにBuildLabExKernelHAL(そのために)より適正与えるために最も適切な方法だろうバージョンを。しかし、あなたは何が悪いのかを知っているように見えるので、あなたは正しいものを投稿するべきです。
not2qubit 2018

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で働く窓-10OSVersion.Version.Majorリターン10
yzorg

1
どちら(Get-CimInstance Win32_OperatingSystem).Version[Environment]::OSVersion動作し、同じ結果を返します:6.3.9600.0
VirtualVDX

残念ながら6.3.9600はWin 8.1だけではなく、サーバー2012 R2も同じビルド番号を返します。
bytejunkie 2016年

8

答えの 1つを絞り込んでいます

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)
ランディ

4

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

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でテスト済み)とは異なり、完全で正しい(winver.exeを実行したときと同じバージョン番号)バージョンのWindows(リビジョン/ビルド番号を含む)REMOTELYが得られます。

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'によって返される)を使用するとエラーが発生しました-このソリューションを微調整して、サービスなどを有効にせずにローカルマシンから情報を取得することは可能ですか?
モノジョニー2017年

[xxxxxx]リモートサーバーxxxxxxへの接続は次のエラーメッセージで失敗しました:クライアントはリクエストで指定された宛先に接続できません。宛先のサービスが実行中であり、要求を受け入れていることを確認してください。宛先で実行されているWS-Managementサービス、最も一般的にはIISまたはWinRMのログとドキュメントを参照してください。宛先がWinRMサービスの場合は、宛先で次のコマンドを実行して、WinRMサービスを分析および構成します:「winrm quickconfig」。詳細については、[...]
monojohnny 2017年

私のために働いた。賛成。など1507年、1511年、1607年-それは窓10リリースID含まれる場合には、完璧なスクリプトになります
アントン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件以上の返信があるため、あなたの長所を公開することを検討してください。
DavidGarcíaBodego

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

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

問題は、「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.