Как найти сборку / версию Windows 10

19

Во время бета-тестирования Windows 10 было трудно понять, какую версию вы используете, если она не была размещена на рабочем столе. Как только этого не было - как сказать, какую версию / сборку вы используете?

Это станет большей проблемой, так как Microsoft начинает выпускать больше сборок с новым механизмом обновления.

Брайан Льюис
источник
Я не верю, что обновления изменяют номер сборки.
Joeqwerty

Ответы:

19

GUI: Настройки, Система, О программе

Не уверен, что это «правильный» способ, но вы можете получить Win10 озвученную / обсуждаемую «версию» (1511, 1607 и т. Д.) С помощью этого cmd:

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

Вот страница Microsoft, которая соотносит номера сборки с Win10 «версией» ( резервная ссылка [wiki] на всякий случай ). Помог мне, когда я получил build # с удаленного ПК:wmic /node:HOSTNAME os get BuildNumber

Gregg
источник
6
Спасибо - это мне очень помогло. Просто на всякий случай - PowerShell версия вашей команды будет(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId
Антон Кроуглов
Это не работает в Windows 10 Enterprise LTSB. Только решения, которые читают версию из powershell, работают для меня напрямую
phuclv
Я сам управляю LTSB, и у меня это работает?
Грегг
он также не работает в моей последней Windows 10 Pro: на 10.0.17730.1000 (т.е. сборка 17730) он дает ReleaseId REG_SZ 1803. Это и это работает
phuclv
@AntonKrouglov это идентификатор выпуска, а не текущая сборка. Вы должны использовать (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сравнению с «РТМ»: 10240.

Есть несколько способов получить номер сборки в командной строке:

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

Последний из трех самый быстрый.

Если вы предпочитаете графический интерфейс, вы можете использовать winver.exe или Aboutзапись в Helpменю большинства настольных приложений Windows.

Поскольку никаких пакетов обновлений больше нет, уровень исправлений в ОС зависит от установленных обновлений. Есть несколько способов найти их: графический интерфейс, 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 (Update Build Revision) действительно меняется с некоторыми обновлениями, как указано в списке выпусков 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
5

Меня несколько раз спрашивали об этом, поэтому я решил опубликовать это. Есть три способа.

  1. Запустите winver.exe
  2. Запустите ver.exe
  3. Проверьте реестр

Для получения более подробной информации смотрите здесь: http://myhorstsonit.com/2015/07/what-build-version-of-windows-10-am-i-running/

Брайан Льюис
источник
2
К сожалению, Microsoft не предоставляет механизм для определения накопительной версии обновления. Поскольку они больше не предоставляют пакеты обновлений операционной системы, это будет полезной информацией. Альтернативой может быть использование команды WMIC для запроса конкретной версии накопительного пакета. Например, WMIC QFE GET HotfixID, InstalledOn, Description | FINDSTR /I "KB3081438"чтобы определить, установлен ли CU 15 августа 2015 года. Пустая дата Установлено означает, что система не перезапущена для завершения установки.
Грег Аскью
1
Номер сборки 10240 не меняется с обновлениями. Последнее число 16xxx изменяется, когда ядро ​​получает обновление.
magicandre1981
2
В моей книге это единственный верный правильный ответ. Несмотря на заявления о том, что он не отображает «накопительную версию обновления», которую он на самом деле делает, теперь вам нужно знать, какова текущая сборка, чтобы сравнить ее, но ни один из других ответов также не имеет отношения к этой проблеме.
Ramhound
Запуск winver в командной строке работает как шарм. Благодарность!
Андреас
это не будет работать для Windows 10 LTSB
phuclv
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.

d4rkcell
источник
«Надеюсь, Microsoft обновит свои патчи, чтобы они начали изменять BuildNumber», что произошло с 29 июля 2015 года ......
Ramhound
@ Случайно это произошло с 29 июля 2015 года или нет? Всякий раз, когда я звоню Win32_OperatingSystem.Version, я не получаю номер сборки ОС, я получаю 10.0.10586.0, когда сборка ОС в меню «Настройки»> «Система»> «О» равна 10.0.10586.164
d4rkcell
Сборка не изменялась до порога 2. После порога 2 номер сборки изменился с накопительными патчами. Я никогда не говорил, что Win32_OperatingSystem.Versionдолжен работать так, как вы описываете, но сборка меняется в соответствии с winver(другими словами, я говорю, что ваш скрипт виноват).
Ramhound
Нет, нет, он есть в пользовательском интерфейсе, но в WMI, особенно при запросе Win32_OperatingSystem, номер версии здесь по-прежнему говорит 10.0.10586, а BuildNumber по-прежнему говорит 10586. Я на машине с OSBuild 10586.164 в Настройках> Система о сборке ОС раздел, но в WMI это не так. Почему ты не читаешь то, что я напечатал?
d4rkcell
1

Msinfo32.exe все еще существует (был на 8.1)? Дает много полезной информации, в том числе серийные # и номера моделей, которые могут помочь ноутбукам.

radiks32
источник
(если это так, он будет находиться в области сводки системы под именем ОС вверху.)
radiks32
но он только запускает графический интерфейс, а не решение командной строки
phuclv
1

Вы можете вытащить версию из реестра. Вот фрагмент PowerShell для этого:

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

Вы можете использовать это, чтобы действительно быстро получить эту информацию, плюс вы можете встроить ее в функцию и использовать для получения этой информации от всего вашего парка, если вам нужно.

qovert
источник
2
Этот ответ может использовать немного больше объяснений.
Касперд
0

В домене AD вы можете использовать командлет Get-ADComputer PowerShell

Get-ADComputer -Filter {OperatingSystem -eq "Windows 10 Pro"} -Property * | Format-Table Name,OperatingSystem,OperatingSystemVersion -Wrap -Auto
ecortech
источник
0

Вы можете использовать Reg Query в команде FOR для получения Buildversion, например, 1607:

for /f "usebackq skip=2 tokens=3" %f in (`reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseID`) do (set buildver=%f)
user283868
источник
это не работает так же, как текущее решение с наибольшим количеством голосов . 1607 - это не версия для сборки, в которой используется "сборка ОС"
phuclv
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 вы можете заменить свое одиночное <Computer_Name> на переменную, которая содержит целые компьютеры OU.

Франц Копаницкий
источник
почему ты пишешь такой сложный сценарий? Это не работает на моем локальном ПК, который не объединен ни в какие домены. И просить пользователей ввести имя компьютера не дружелюбно. Кажется, единственная важная команда здесь 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 1000на 10.0.17730.1000, что неверно. Версия сборки 17730
phuclv
Видимо, у вас есть две учетные записи суперпользователей : Франц Копаницкий и Франц Копаницкий . Это будет мешать комментированию, редактированию ваших собственных сообщений и принятию ответа. Пожалуйста, найдите время, чтобы использовать это руководство Справочного центра и попросите сотрудников Суперпользователя объединить ваши учетные записи.
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"}
Iconiu
источник