如何从PowerShell命令行findWindows版本?

如何find我正在使用的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 

我该怎么做呢?

由于您可以访问.NET库,因此可以访问System.Environment类的OSVersion属性以获取此信息。 对于版本号,有Version属性。

例如,

 PS C:\> [System.Environment]::OSVersion.Version Major Minor Build Revision ----- ----- ----- -------- 6 1 7601 65536 

Windows版本的细节可以在这里find。

  1. 为了得到Windows的版本号,正如Jeff在他的回答中指出的那样,使用:

     [Environment]::OSVersion 

    值得注意的是,结果是[System.Version]types,因此可以检查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®WindowsServer®2008 Standard

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

或者打高尔夫球

 gwmi win32_operatingsystem | % caption 

结果

微软Windows 7旗舰版

与以上所有解决scheme不同的是,这将为您提供Windows完整版本(包括版本/内部版本号)

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

结果:

 10.0.10240.16392 (th1_st1.150716-1608) 

我正在提炼一个答案

我在尝试匹配winver.exe的输出时遇到了这个问题:

Version 1607 (OS Build 14393.351)

我能够提取构buildstring:

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

结果: 14393.351

更新 :这是一个使用正则expression式的稍微简化的脚本

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

如果你想区分Windows 8.1(6.3.9600)和Windows 8(6.2.9200)使用

 (Get-CimInstance Win32_OperatingSystem).Version 

得到正确的版本。 [Environment]::OSVersion在Windows 8.1中无法正常工作(它返回一个Windows 8版本)。

使用:

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

不幸的是,大多数其他答案不提供特定于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 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 

正如MoonStom所说, [Environment]::OSVersion 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} } 

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

与其他所有解决scheme(在Windows 10上testing)不同的是,这会给你提供完整的和正确的(与运行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" } } 

如果您试图破译信息MS放在他们的修补站点,如https://technet.microsoft.com/en-us/library/security/ms17-010.aspx

你将需要一个组合,如:

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

Microsoft Windows 10 Home 64位1703

由于PowerShell 5:

 Get-ComputerInfo Get-ComputerInfo -Property Windows* 

我觉得这个命令几乎尝试了迄今为止发现的1001种不同的方式来收集系统信息。

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

在Windows 10上返回:10.0.10586.420

然后可以使用该variables来访问属性以进行精细比较

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