web-dev-qa-db-ja.com

PowerShellコマンドラインからWindowsバージョンを見つける方法

使用している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

どうすればいいですか?

99
jrara

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

例えば、

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

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

Windowsバージョンの詳細は here にあります。

137
Jeff Mercado
  1. Jeffが answer で述べているように、Windowsのバージョン番号を取得するには、次を使用します。

    [Environment]::OSVersion
    

    結果が [System.Version] タイプであることに注意する価値があります。したがって、たとえばWindows

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

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

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

    (Get-WmiObject -class Win32_OperatingSystem).Caption
    

    のようなものを返します

    Microsoft®WindowsServer®2008標準

96
Richard

残念ながら、他の回答のほとんどは、Windows 10固有の情報を提供していません。

Windows 10には versions があります: 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
29
Anton Krouglov
Get-WmiObject -Class Win32_OperatingSystem | ForEach-Object -MemberName Caption

またはゴルフ

gwmi win32_operatingsystem | % caption

結果

 Microsoft Windows 7 Ultimate 
23
Steven Penny

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

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

結果:

10.0.10240.16392 (th1_st1.150716-1608)
16
Ihor Zenich

PowerShell 5以降:

Get-ComputerInfo
Get-ComputerInfo -Property Windows*

このコマンドは、システム情報を収集するためにこれまでに発見された1001種類の方法をほとんど試みていると思います...

10
Schadowy

Windows 8.1(6.3.9600)とWindows 8(6.2.9200)を区別したい場合

(Get-CimInstance Win32_OperatingSystem).Version 

適切なバージョンを取得します。 [Environment]::OSVersionは、Windows 8.1では正常に動作しません(Windows 8バージョンを返します)。

8
MoonStom

answers のいずれかを改良しています

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

Updated:これは、正規表現を使用したわずかに簡略化されたスクリプトです

(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").BuildLabEx -match '^[0-9]+\.[0-9]+' |  % { $matches.Values }
8
Fares
PS C:\> Get-ComputerInfo | select WindowsProductName, WindowsVersion, OsHardwareAbstractionLayer

返す

WindowsProductName    WindowsVersion OsHardwareAbstractionLayer
------------------    -------------- --------------------------
Windows 10 Enterprise 1709           10.0.16299.371 
4
Lars Fosdal

つかいます:

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

MoonStomが言うように、[Environment]::OSVersionはアップグレードされたWindows 8.1(Windows properly8バージョンを返します)では正しく動作しません: 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
mhu

上記のスクリプトを使用して、少し調整してこれを考え出しました。

$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-bitバージョン:1709ビルド:16299.431 @ {WindowsInstallDateFromRegistry = 18-01-01 2:29:11 AM}

ヒント:インストール日からプレフィックステキストを削除して、読みやすいヘッダーに置き換えることができれば幸いです。

3
Ron MVP

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
Vince Ypma

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
Michael Joyce
(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name BuildLabEx).BuildLabEx
1
Test

これにより、他のすべてのソリューション(Windows unlike10でテスト済み)とは異なり、完全かつ正しい(winver.exeを実行したときと同じバージョン番号)バージョンのWindows(リビジョン/ビルド番号を含む)が完全に提供されます。

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

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
Ali

物事を簡素化するために、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
0
Ruben Kelevra

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))"
0
James Russell

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
Dan Steve