如何找到Windows 10的版本


19

在Windows 10测试版中,除非将其发布到桌面上,否则很难知道您正在运行哪个版本。一旦不存在了-您如何知道正在运行的版本/版本?

随着Microsoft开始使用新的更新机制发布更多版本,这将成为一个更大的问题。


我不认为更新会更改内部版本号。
joeqwerty

Answers:


19

GUI:设置,系统,关于

不知道这是否是“正确”的方法,但是您可以通过以下cmd 获得Win10语音/有争议的“版本”(1511、1607等)

Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseId

这是Microsoft的页面,用于将内部版本号与Win10“版本”相关联以防万一,请使用备用链接[wiki])。当我从远程PC获得构建版本时对我有帮助:wmic /node:HOSTNAME os get BuildNumber


6
谢谢-这对我很有帮助。仅在这种情况下-您命令的PowerShell版本将为(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId
Anton Krouglov

这在Windows 10 Enterprise LTSB上不起作用。只有从powershell读取版本的解决方案
才对

我自己运行LTSB,对我有用吗?
gregg

它在我最新的Windows 10 Pro中也不起作用:在10.0.17730.1000(即内部版本17730)上,它提供了ReleaseId REG_SZ 1803这个这个工作
phuclv

@AntonKrouglov是发行版ID,而不是当前版本。您需要使用(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name CurrentBuildNumber).CurrentBuildNumber(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name CurrentBuild).CurrentBuild作为内部版本号
phuclv

9

检查Windows 10的版本或内部版本号不是很有帮助,因为它不会随时间变化。

事实证明,第一句话是错误的。在所有以前的Windows版本中都是如此,但是我们现在处在一个新的Windows 10世界中。最新的内部人员内部版本的内部版本号10525与“ RTM”相比:10240

有几种方法可以在命令行上获取内部版本号:

systeminfo.exe
(Get-CimInstance -ClassName Win32_OperatingSystem -Namespace root/cimv2).BuildNumber
(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name CurrentBuild).CurrentBuild

这三个中的最后一个是最快的。

如果您更喜欢GUI,则可以使用winver.exe或大多数Windows桌面应用程序菜单中的About条目Help

由于没有任何Service Pack,操作系统上的补丁程序级别取决于安装的更新。有几种找到它们的方法,GUI,systeminfo.exe,wmi等。

推荐的最有效的方法是使用PowerShell:

Get-HotFix

显示如下:

Source        Description      HotFixID      InstalledBy          InstalledOn
------        -----------      --------      -----------          -----------
WIN10         Security Update  KB3074663     NT AUTHORITY\SYSTEM  7/17/2015 12:00:00 AM
WIN10         Security Update  KB3074667     NT AUTHORITY\SYSTEM  7/21/2015 12:00:00 AM
WIN10         Security Update  KB3074674     NT AUTHORITY\SYSTEM  7/24/2015 12:00:00 AM
WIN10         Update           KB3074678     NT AUTHORITY\SYSTEM  7/31/2015 12:00:00 AM

您可以过滤最近10天内的更新:

Get-Hotfix | Where {$_.InstalledOn -gt $(Get-Date).AddDays(-10) -and $_.Description -eq "Update"}

或显示最近安装的三个更新:

Get-Hotfix | Sort-object InstalledOn -Descending | Select -First 3

您可以检查是否安装了特定的更新:

if ((get-hotfix -id kb3087916) -ne $null) {"patched..."}

您可以先在网上找到最新的补丁kb编号,例如:

(New-Object Net.WebClient).DownloadString('https://microsoft.com/...')

然后检查它是否存在于机器上。

注意:这仅是示例。我不知道当前列出这些内容的页面,您仍然必须对其进行解析。

问题是:随着时间的流逝,Microsoft会否对Windows 10的功能进行如此大的更改,以至于您必须对其进行检查才能使您的应用程序或脚本正常工作。

最好检查系统上是否存在所需的特定功能,而不要查找版本号。


“在所有以前的Windows版本中都是如此”,实际上,至少从Windows 95开始就不是这样。Windows 95和Windows 95 OSR2具有不同的内部版本号。Windows 98和Windows 98se也是如此。Windows XP,Windows XP SP1,Windows XP SP2等也是如此。
悬崖阿姆斯特朗

8

WMI当前不具有可用于完全识别Windows 10版本(例如1607)或完整内部版本号(例如10.0.14393.577)的属性。正如在其他评论说,这个信息就是在这个项下的注册表可见:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion

该键中的以下值对应于winver.exe程序显示的信息:

ReleaseID = Version (name based on year/month of release: 1507, 1511, 1607, 1703, etc.)
CurrentBuild or CurrentBuildNumber = OS Build (part before period)
UBR = OS Build (part after period)

此外,版本在该注册表项的以下两个值中:

CurrentMajorVersionNumber = 10
CurrentMinorVersionNumber = 0

当版本(如1607)更改或安装Insider构建时,构建也会更改。但是,UBR(更新版本修订)确实会随着Microsoft版本列表中指示的某些更新而更改。

在PowerShell中,

[System.Environment]::OSVersion.Version

返回与注册表项相同的Major,Minor和Build,但它似乎始终将Revision报告为0。Reddit用户的一点代码提供了足够的替换,包括注册表中的UBR作为Revision号:

$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

@Ramhound,即他的全部答案?!
oldmud0

@ oldmud0当然不是;有一些可以接受的东西
Ramhound

@RamHound感谢您的反馈。我削减了一些杂物。如果仍然太冗长,请告诉我。
谢姆·萨金特

这是正确的答案。它包括ReleaseID(例如1607),内部版本(例如14393)和UBR(随每个月发行的版本而变化的数字)。注意ReleaseID和build是多余的,因为两者之间存在1-1映射;我很想从Microsoft那里读到一些有关为什么这两个数字都存在的信息。
aggieNick02 '10

5

我已经被问过几次了,所以我认为我会发布它。有三种方法。

  1. 运行winver.exe
  2. 运行ver.exe
  3. 检查注册表

有关更多详细信息,请参见此处:http : //mythoughtsonit.com/2015/07/what-build-version-of-windows-10-am-i-running/


2
不幸的是,Microsoft没有提供确定累积更新版本的机制。由于它们实际上不再提供操作系统服务包,因此这将是有用的信息。一种替代方法是使用WMIC命令来查询特定的汇总版本。例如WMIC QFE GET HotfixID, InstalledOn, Description | FINDSTR /I "KB3081438",确定是否已安装2015年8月15日的CU。空白的InstalledOn日期表示它们尚未重新启动系统以完成安装。
格雷格·阿瑟

1
内部版本号10240不会随着更新而更改。当内核获得更新时,最后一个数字16xxx将更改。
magicandre1981

2
在我的书中,这是唯一正确的答案。尽管声称它没有显示实际的“累积更新版本”,但现在您需要知道当前的内部版本是什么,以便与之进行比较,但没有其他答案可以解决该问题。
Ramhound

在命令行上运行winver就像一个魅力。谢谢!
mrt

这不适用于Windows 10 LTSB
phuclv 18/3/19

2

以前发布的方法均无法正常工作,并且都无法按照“设置” →“ 关于”部分中显示的方式进行操作系统构建。它缺少累积更新信息。

你可以做这样的事情

$OSmBuild = (Get-WmiObject Win32_OperatingSystem).Version

if($OSmBuild -eq '10.0.10586')
{
    # Windows 10.0.10586.0
    $164 = Get-HotFix | where { $_.HotFixID -eq 'KB3140768' }
    $122 = Get-HotFix | where { $_.HotFixID -eq 'KB3140743' }
    $104 = Get-Hotfix | where { $_.HotfixID -eq 'KB3135173' }

    if($104 -and (!($122)) -and (!($164)))
    {
        Write-Host '104 installed'
    }
    elseif($104 -and $122 -and (!($164)))
    {
        Write-Host '122 installed'
    }
    elseif($104 -and $122 -and $164)
    {
        Write-Host '164 installed'
    }
}

在PowerShell脚本中,但它始终是一成不变的,并且使其监视起来更加困难。您可以在此处查看更新:

Windows 10更新历史记录

希望Microsoft将更新其补丁程序,以便他们开始修改BuildNumber。


“希望Microsoft将更新其补丁程序,以便他们开始修改自2015年7月29日以来的BuildNumber……”
Ramhound

@Ramhound它自2015年7月29日起发生或没有?每当我调用Win32_OperatingSystem.Version时,我都没有获得操作系统的内部版本号,而在“设置”>“系统”>“关于”中的“操作系统内部版本”为10.0.10586.164
d4rkcell的

直到阈值2,构建才发生变化。从阈值2开始,内部版本号已更改,并带有累积补丁。我从来没有说过Win32_OperatingSystem.Version应该按照您描述的方式工作,但是构建会根据每个版本进行更改winver(换句话说,我是说您的脚本有问题)。
Ramhound

不,它没有,它在UI中,但是在WMI中,尤其是在查询Win32_OperatingSystem时,这里的版本号仍然是10.0.10586,而BuildNumber仍然是10586。我所在的计算机上的“设置”>“系统关于OS Build”部分,但在WMI中却没有。你为什么不阅读我输入的内容?
d4rkcell

1

msinfo32.exe是否仍然存在(从8.1开始)?提供许多方便的信息,包括序列号和型号,这些信息对笔记本电脑有很大帮助。


(如果是,它将在顶部的OS Name下的系统摘要区域中。)
radiks32

但是它只是启动GUI而不是命令行解决方案
phuclv

1

您可以从注册表中提取版本。这是执行此操作的PowerShell snipit:

function Get-RegistryValue($key, $value) {
(Get-ItemProperty $key $value).$value
}
$a1 = Get-RegistryValue "HKLM:\software\microsoft\windows nt\currentversion" CurrentBuild
$a2 = Get-RegistryValue "HKLM:\software\microsoft\windows nt\currentversion" UBR
Write-Host Version $a1'.'$a2

1

PowerShell始终是答案:

Get-CimInstance win32_operatingsystem

更多信息:

Get-CimInstance Win32_OperatingSystem | Select-Object buildnumber,version

返回值:

内部版本号
----------- -------
10240 10.0.10240

您可以使用它来真正快速地获取该信息,此外,您可以将其构建为一个功能,并在需要时用于从整个车队中获取该信息。


2
这个答案可以使用更多的解释。
kasperd 2015年

0

在AD域中,可以使用PowerShell的Get-ADComputer cmdlet

Get-ADComputer -Filter {OperatingSystem -eq "Windows 10 Pro"} -Property * | Format-Table Name,OperatingSystem,OperatingSystemVersion -Wrap -Auto


0

在尝试找到一种显示单个远程计算机的Windows 10版本及其修订版的方法时,我注意到PowerShell的版本修订版紧随Windows版本。

它导致我构建以下脚本。我添加了一个测试,以了解远程计算机是否需要重新启动才能完成更新。

$OSChecked = (Read-Host "Computer Name?")
if (Test-Connection -ComputerName $OSChecked -Count 1 -ErrorAction SilentlyContinue)
{
    if ($((Get-Service WinRM -ComputerName $OSChecked).Status) -eq "stopped")
    {
        (Get-Service WinRM -ComputerName $OSChecked).Start()
    }
    Write-Host "`n$((Get-WmiObject win32_computersystem -ComputerName $OSChecked).Name) " -NoNewline ; Invoke-Command -ComputerName $OSChecked -ScriptBlock{if (Get-Item "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired" -ErrorAction SilentlyContinue) {Write-Host "Restart Required!" -BackgroundColor DarkYellow -ForegroundColor White}}
    Invoke-Command -ComputerName $OSChecked -ScriptBlock{Write-Host "Version $((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ProductName) $((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ReleaseId), revision $(($PSVersionTable).PSVersion.Revision)"}
}

这给出了这种类型的结果:

Computer_Name Version Windows 10 Enterprise 1703, revision 296

AD域中,可以用包含OU的整个计算机的变量替换单个<Computer_Name>。


你为什么要写这么复杂的脚本?它在未加入任何域的本地PC上不起作用。并要求用户键入计算机名称并不友好。似乎这里唯一重要的命令是Write-Host "Version $((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ProductName) $((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ReleaseId), revision $(($PSVersionTable).PSVersion.Revision)",但是它给了我Windows 10 Pro 1803, revision 100010.0.17730.1000的信息,这是不正确的。构建版本为17730
phuclv

显然,您有两个超级用户帐户:Frantz KopanickiFrantz Kopanicki。这会影响评论,编辑自己的帖子以及接受答案。请花点时间使用此帮助中心教程,并请超级用户人员合并您的帐户。
robinCTS

-1

我们需要验证安装了哪个累积补丁才能合规。使用get-hotfix可以工作,但是如果安装了更高版本的累积修补程序,则会导致问题。最好的解决方案是比较内部版本号,包括修补程序部分。通过命令行获得此命令的唯一方法是使用命令提示符ver命令,该命令在PowerShell中无法直接运行。

$verstring = cmd.exe /c ver
[version]$Winbuild = [regex]::Match($verstring,"(\d+\.\d+\.\d+\.\d+)").value
if ($verstring -ge [version]"10.0.16299.755") {write-host "Compliant"}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.