Як знайти збірку / версію 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] на всякий випадок ). Допоміг мені, коли я збираю # з віддаленого ПК:wmic /node:HOSTNAME os get BuildNumber


6
Дякую - це мені дуже допомогло. Просто на випадок - версія вашої команди PowerShell була б(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId
Антон Круглов,

Це не працює в Windows 10 Enterprise LTSB. Тільки рішення, які читають версію з powershell, безпосередньо працюють для мене
phuclv

Я сам запускаю LTSB, і це працює на мене?
gregg

він також не працює в моєму останньому 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

Останній із трьох найшвидший.

Якщо ви віддаєте перевагу GUI, ви можете використовувати winver.exe або Aboutзапис у Helpменю більшості програм для настільних ПК Windows.

Без оновлення пакетів послуг рівень патчу в ОС залежить від встановлених оновлень. Існує кілька способів їх пошуку, 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..."}

Ви можете спочатку знайти останній номер патч-куб в Інтернеті, наприклад:

(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) або коли встановлюються інсайдерські збірки. Однак UBR (Update Build Revision) змінюється з певними оновленнями, як зазначено у списку випусків Microsoft .

У PowerShell,

[System.Environment]::OSVersion.Version

повертає Major, Minor та Build так само, як і ключ реєстру, але він, як видається, повідомляє про редакцію як 0. Трохи коду від користувача Reddit забезпечує адекватну заміну, яка включає 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

@Ramhound, тобто вся його відповідь ?!
oldmud0

@ oldmud0 звичайно ні; є щось, що є прийнятним
Рамхаунд

@RamHound Дякую за відгук. Я вирізав якусь корочку. Якщо це все ще занадто багатослівно, дайте мені знати.
Шем Сарджент

Це правильна відповідь. Він включає ReleaseID (наприклад, 1607), збірку (наприклад, 14393) та UBR (число, яке змінюється з кожним місячним випуском). Зауважте, що ReleaseID і збірка є надмірними, оскільки між ними є відображення 1-1; Я хотів би прочитати щось від Microsoft про те, чому існують обидва ці номери.
aggieNick02

5

Мене про це запитували кілька разів, тому я подумав, що відправлю це. Існує три способи.

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

Детальніше дивіться тут: http://myoughtsonit.com/2015/07/what-build-version-of-windows-10-am-i-running/


2
На жаль, Microsoft не забезпечує механізм визначення кумулятивної версії оновлення. Оскільки вони вже не надають пакети послуг для операційної системи, це буде корисною інформацією. Альтернативою може бути використання команди WMIC для запиту щодо конкретної зведеної версії. Наприклад, WMIC QFE GET HotfixID, InstalledOn, Description | FINDSTR /I "KB3081438"щоб визначити, чи встановлено МС 15 серпня 2015 року. Порожня дата InstalledOn вказує на те, що вони не перезапустили систему для завершення встановлення.
Грег Аскеу

1
th Buildnumber 10240 не змінюється оновленнями. Останнє число 16xxx змінюється, коли ядро ​​отримує оновлення.
magicandre1981

2
У моїй книзі це єдина правдива правильна відповідь. Незважаючи на твердження, що він не відображає "накопичувальну версію оновлення", яку вона насправді робить, тепер вам потрібно знати, що насправді складається, щоб порівняти її, але жоден з інших відповідей не вирішує цю проблему.
Рамхаунд

Запуск 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.


"Сподіваємось, Microsoft оновить свої патчі, щоб вони почали змінювати BuildNumber", що сталося з 29 липня 2015 року ......
Ramhound

@Ramhound це сталося з 29 липня 2015 року чи ні? Щоразу, коли я дзвоню Win32_OperatingSystem.Version, я не отримую номер збірки ОС, я отримую 10.0.10586.0, коли збирання ОС в Налаштуваннях> Система> Про це 10.0.10586.164
d4rkcell

Збірка не змінювалася до порогу 2. З моменту Порогу 2 число збірки змінилося із сукупними патчами. Я ніколи не казав, що Win32_OperatingSystem.Versionслід працювати так, як ви описуєте, але збірка змінюється відповідно winver(іншими словами, я кажу, що ваш сценарій винен).
Рамхаунд

Ні, ні, він є в інтерфейсі, але в WMI, особливо при запиті Win32_OperatingSystem, номер версії тут все ще говорить 10.0.10586, а BuildNumber все ще говорить 10586. Я працюю на машині, яка має OSBuild 10586.164 в Налаштуваннях> Система про ОС Windows розділ, але в WMI це не так. Чому ти не читаєш те, що я набрав?
d4rkcell

1

Чи все ще msinfo32.exe (станом на 8.1)? Дає багато зручної інформації, включаючи номери серійних номерів та номерів моделей, які можуть допомогти багато для ноутбуків.


(якщо він є, це буде в області підсумків системи під назвою ОС вгорі.)
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

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


2
Ця відповідь могла використовувати трохи більше пояснень.
kasperd

0

У домені AD можна використовувати командлет Get-ADComputer PowerShell

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

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)

це не працює так, як у поточному голосовому рішенні . 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 100010.0.17730.1000, що невірно. Версія збірки - 17730
phuclv

Мабуть, у вас є два облікові записи Супер Користувача: Франц Копаніцький та Франтц Копаніцький . Це заважатиме коментувати, редагувати власні публікації та приймати відповідь. Будь ласка, знайдіть час, щоб скористатися цим підручником довідкового центру та попросіть персонал Super User об'єднати ваші акаунти.
robinCTS

-1

Нам потрібно перевірити, який накопичувальний патч встановлений на відповідність. використання get-hotfix працює, але спричиняє проблеми, якщо встановлено пізніший накопичувальний патч. Найкраще рішення - порівняти номер збірки, включаючи виправлення. Єдиний спосіб домогтися цього за допомогою командного рядка - це використання командної версії командної версії, яка не працює безпосередньо в 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"}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.