Jak znaleźć kompilację / wersję systemu Windows 10

19

Podczas wersji beta systemu Windows 10 trudno było wiedzieć, z której wersji korzystasz, chyba że została opublikowana na pulpicie. Kiedyś tego nie było - jak powiedzieć, którą wersję / kompilację używasz?

Stanie się to większym problemem, gdy Microsoft zacznie wypuszczać kolejne kompilacje z nowym mechanizmem aktualizacji.

Brian Lewis
źródło
Nie wierzę, że aktualizacje zmieniają numer kompilacji.
joeqwerty

Odpowiedzi:

19

GUI: Ustawienia, System, Informacje

Nie jestem pewien, czy jest to „właściwy” sposób, ale można uzyskać wersję wokalizowaną / mówioną o Win10 (1511, 1607 itd.) Za pomocą tego cmd:

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

Oto strona Microsoftu skorelować numerach kompilacji do Win10 „wersji” ( łącza zapasowego [wiki] na wszelki wypadek ). Pomógł mi, gdy otrzymałem kompilację # ze zdalnego komputera:wmic /node:HOSTNAME os get BuildNumber

gregg
źródło
6
Dziękuję - to bardzo mi pomogło. Na wszelki wypadek - wersja twojego polecenia PowerShell to(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId
Anton Krouglov
To nie działa w systemie Windows 10 Enterprise LTSB. Tylko rozwiązania, które odczytują wersję z PowerShell bezpośrednio działają dla mnie
phuclv
Sam prowadzę LTSB i to działa dla mnie?
gregg
nie działa również w moim najnowszym Windows 10 Pro: na 10.0.17730.1000 (tj. kompilacja 17730) daje ReleaseId REG_SZ 1803. To i to działa
phuclv
@AntonKrouglov to identyfikator wydania, a nie bieżąca wersja. Musisz użyć (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name CurrentBuildNumber).CurrentBuildNumberlub (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name CurrentBuild).CurrentBuilddla numeru kompilacji
phuclv
9

Sprawdzanie wersji lub numeru kompilacji systemu Windows 10 nie jest bardzo pomocne, ponieważ nie zmienia się z czasem.

Okazuje się, że pierwsze zdanie jest błędne; tak było we wszystkich poprzednich wersjach systemu Windows, ale teraz jesteśmy w nowym świecie Windows 10. Najnowszy build wtajemniczeni ma numer kompilacji 10525w porównaniu do „RTM”: 10240.

Istnieje kilka sposobów uzyskania numeru kompilacji w wierszu polecenia:

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

Ostatni z trzech jest najszybszy.

Jeśli wolisz GUI, możesz użyć programu winver.exe lub Aboutpozycji w Helpmenu większości aplikacji komputerowych Windows.

Bez żadnych dodatków Service Pack poziom łatek w systemie operacyjnym zależy od zainstalowanych aktualizacji. Istnieje kilka sposobów ich znalezienia, GUI, systeminfo.exe, wmi itp.

Zalecanym i najpotężniejszym sposobem wykonywania takich czynności jest użycie programu PowerShell:

Get-HotFix

pokazuje coś takiego:

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

Możesz filtrować aktualizacje w ciągu ostatnich 10 dni:

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

Lub pokaż trzy ostatnie zainstalowane aktualizacje:

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

Możesz sprawdzić, czy konkretna aktualizacja jest zainstalowana:

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

Najpierw możesz znaleźć najnowszy numer łatki kb w Internecie, taki jak:

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

A następnie sprawdź, czy istnieje na komputerze.

Uwaga: to tylko przykład. Nie znam strony, która obecnie je wyświetla, i nadal musisz ją przeanalizować.

Pytanie brzmi: z czasem Microsoft zmieni funkcjonalność systemu Windows 10 tak bardzo, że musisz go sprawdzić, aby aplikacja lub skrypt działał.

Lepszym pomysłem może być sprawdzenie, czy w systemie istnieje konkretna potrzebna funkcja, niż szukanie numeru wersji.

Peter Hahndorf
źródło
„było to prawdą we wszystkich poprzednich wersjach systemu Windows” W rzeczywistości nie było to prawdą, przynajmniej od Windows 95. Windows 95 i Windows 95 OSR2 miały różne numery kompilacji. Podobnie jak Windows 98 i Windows 98se. Podobnie jak Windows XP, Windows XP SP1, Windows XP SP2 i tak dalej.
Cliff Armstrong,
8

WMI nie ma obecnie właściwości, których można by użyć do pełnej identyfikacji wersji systemu Windows 10 (jak 1607) lub pełnego numeru kompilacji (jak 10.0.14393.577). Jak stwierdzono w innych komentarzach, informacje te widoczne w rejestrze pod tym kluczem:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion

Następujące wartości w tym kluczu odpowiadają informacjom wyświetlanym przez program 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)

Ponadto numery wersji są w tych dwóch wartościach z tego klucza rejestru:

CurrentMajorVersionNumber = 10
CurrentMinorVersionNumber = 0

Kompilacja zmienia się, gdy zmienia się wersja (jak 1607) lub gdy instalowane są kompilacje Insider. Jednak UBR (aktualizacja wersji kompilacji aktualizacji) zmienia się z pewnymi aktualizacjami, jak wskazano na liście wydań Microsoft .

W PowerShell

[System.Environment]::OSVersion.Version

zwraca Major, Minor i Build tak samo jak klucz rejestru, ale zawsze wydaje się zgłaszać wersję jako 0. Trochę kodu od użytkownika Reddit zapewnia odpowiednią wymianę, która zawiera UBR z rejestru jako numer zmiany:

$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
Shem Sargent
źródło
@Ramhound tj. Cała jego odpowiedź ?!
oldmud0
@ oldmud0 oczywiście nie; jest coś, co jest do zaakceptowania
Ramhound
@RamHound Dzięki za opinię. Pokroiłem trochę crufta. Jeśli nadal jest zbyt gadatliwy, daj mi znać.
Shem Sargent
To jest poprawna odpowiedź. Obejmuje ReleaseID (np. 1607), build (np. 14393) i UBR (liczba, która zmienia się z każdym miesięcznym wydaniem). Zauważ, że ReleaseID i build są redundantne, ponieważ istnieje odwzorowanie 1-1 między nimi; Chciałbym przeczytać coś od Microsoft o tym, dlaczego obie te liczby istnieją.
aggieNick02
5

Zostałem o to zapytany kilka razy, więc pomyślałem, że to opublikuję. Istnieją trzy sposoby.

  1. Uruchom program winver.exe
  2. Uruchom ver.exe
  3. Sprawdź rejestr

Aby uzyskać więcej informacji, patrz tutaj: http://mythoughtsonit.com/2015/07/what-build-version-of-windows-10-am-i-running/

Brian Lewis
źródło
2
Niestety Microsoft nie zapewnia mechanizmu określającego wersję aktualizacji zbiorczej. Ponieważ tak naprawdę nie zapewniają już dodatków Service Pack dla systemu operacyjnego, byłyby to przydatne informacje. Alternatywą byłoby użycie polecenia WMIC do zapytania o konkretną wersję pakietu. Np. W WMIC QFE GET HotfixID, InstalledOn, Description | FINDSTR /I "KB3081438"celu ustalenia, czy zainstalowano CU 15 sierpnia 2015 r. Pusta data Zainstalowania wskazuje, że system nie uruchomił się ponownie, aby dokończyć instalację.
Greg Askew
1
Numer kompilacji 10240 nie zmienia się wraz z aktualizacjami. Ostatnia liczba 16xxx zmienia się, gdy jądro otrzymuje aktualizację.
magicandre1981,
2
W mojej książce jest to jedyna prawdziwa poprawna odpowiedź. Pomimo twierdzeń, że tak naprawdę nie wyświetla „wersji aktualizacji zbiorczej”, teraz przyznano, że musisz wiedzieć, jaka jest obecna wersja, aby ją porównać, ale żadna z pozostałych odpowiedzi nie rozwiązuje tego problemu.
Ramhound,
Uruchamianie winver w wierszu poleceń działa jak urok. Dzięki!
Andreas,
to nie zadziała dla Windows 10 LTSB
phuclv
2

Żaden z wcześniej opublikowanych sposobów nie działa i żaden z nich nie udostępnia kompilacji systemu operacyjnego, tak jak jest wyświetlany w sekcji UstawieniaInformacje . Brakuje informacji o aktualizacji zbiorczej.

Możesz zrobić coś takiego

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

w skrypcie PowerShell, ale wymaga czegoś, co zawsze było jednowierszowe, i utrudnia monitorowanie. Aktualizacje możesz zobaczyć tutaj:

Historia aktualizacji systemu Windows 10

Mamy nadzieję, że Microsoft zaktualizuje swoje łatki, aby zaczęły modyfikować BuildNumber.

d4rkcell
źródło
„Mam nadzieję, że Microsoft zaktualizuje swoje łatki, aby zaczęli modyfikować BuildNumber”, co miało miejsce od 29 lipca 2015 r. ......
Ramhound
@Ramhound stało się to od 29 lipca 2015 roku, czy nie? Ilekroć zadzwonię do Win32_OperatingSystem.Version, nie otrzymuję numeru kompilacji systemu operacyjnego, dostaję 10.0.10586.0, gdy kompilacja systemu operacyjnego jest w Ustawieniach> System> Informacje o 10.0.10586.164
d4rkcell
Kompilacja zmieniła się dopiero po progu 2. Od progu 2 zmieniła się liczba kompilacji wraz z poprawkami zbiorczymi. Nigdy nie mówiłem, że Win32_OperatingSystem.Versionpowinien działać tak, jak to opisujesz, ale kompilacja zmienia się w zależności od winver(innymi słowy, mówię, że twój skrypt jest winny ).
Ramhound,
Nie, nie ma, ma w interfejsie użytkownika, ale w WMI, szczególnie podczas zapytania do Win32_OperatingSystem, numer wersji tutaj wciąż mówi 10.0.10586, a BuildNumber nadal mówi 10586. Jestem na komputerze, który ma OSBuild 10586.164 w Ustawienia> System o kompilacji systemu operacyjnego sekcja, ale w WMI tak nie jest. Dlaczego nie przeczytałeś tego, co napisałem?
d4rkcell,
1

Czy plik msinfo32.exe nadal istnieje (od wersji 8.1)? Zawiera wiele przydatnych informacji, w tym numery seryjne i numery modeli, które mogą bardzo pomóc laptopom.

radiks32
źródło
(jeśli tak, to będzie w obszarze podsumowania systemu pod nazwą OS na górze.)
radiks32
ale po prostu uruchamia GUI, a nie rozwiązanie wiersza poleceń
phuclv
1

Możesz pobrać wersję z rejestru. Oto snipit programu PowerShell, aby to zrobić:

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
Brian Lewis
źródło
1

PowerShell jest zawsze odpowiedzią:

Get-CimInstance win32_operatingsystem

Więcej informacji:

Get-CimInstance Win32_OperatingSystem | Select-Object buildnumber,version

Zwroty:

wersja numeru wersji
----------- -------
10240 10.0.10240

Możesz użyć tego, aby naprawdę szybko uzyskać te informacje, a ponadto możesz zbudować je w funkcji i użyć, aby pobrać te informacje z całej floty, jeśli potrzebujesz.

qovert
źródło
2
Ta odpowiedź przydałaby się nieco więcej wyjaśnień.
kasperd
0

W domenie AD można użyć polecenia cmdlet Get-ADComputer programu PowerShell

Get-ADComputer -Filter {OperatingSystem -eq "Windows 10 Pro"} -Property * | Format-Table Name,OperatingSystem,OperatingSystemVersion -Wrap -Auto
ecortech
źródło
0

Możesz użyć Reg Query w poleceniu FOR, aby uzyskać wersję Buildversion, na przykład 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)
użytkownik 283868
źródło
to nie działa tak jak obecnie najlepiej głosowane rozwiązanie . 1607 nie jest wersją kompilacji, która ma tę z „kompilacją systemu operacyjnego”
phuclv
0

Próbując znaleźć sposób wyświetlania wersji systemu Windows 10 i jego wersji dla pojedynczego komputera zdalnego, zauważyłem, że wersja wersji programu PowerShell jest zgodna z wersją systemu Windows.

Doprowadziło mnie to do zbudowania następującego skryptu. Dodałem test, aby dowiedzieć się, czy komputer zdalny wymaga ponownego uruchomienia w celu zakończenia aktualizacji.

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

To daje ten typ wyniku:

Computer_Name Version Windows 10 Enterprise 1703, revision 296

W domenie AD możesz zastąpić swój singiel <nazwa_komputera> zmienną zawierającą całe komputery jednostki organizacyjnej.

Frantz Kopanicki
źródło
dlaczego piszesz tak skomplikowany skrypt? Nie działa na moim lokalnym komputerze, który nie jest przyłączony do żadnej domeny. A proszenie użytkowników o wpisanie nazwy komputera nie jest przyjazne. Wydaje się, że jedynym ważnym poleceniem jest tutaj 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)", ale daje mi to Windows 10 Pro 1803, revision 100010.0.17730.1000, co jest nieprawidłowe. Wersja kompilacji to 17730
phuclv
Najwyraźniej masz dwa konta Super User: Frantz Kopanicki i Frantz Kopanicki . Będzie to przeszkadzać w komentowaniu, edytowaniu własnych postów i akceptowaniu odpowiedzi. Poświęć trochę czasu na skorzystanie z tego samouczka w Centrum pomocy i poproś personel superużytkownika o połączenie kont.
robinCTS
-1

Musimy sprawdzić, która łata zbiorcza jest zainstalowana w celu zapewnienia zgodności. użycie get-hotfix działa, ale powoduje problemy, jeśli zainstalowana zostanie późniejsza łata zbiorcza. Najlepszym rozwiązaniem jest porównanie numeru kompilacji, w tym części poprawki. Jedynym sposobem uzyskania tego za pomocą wiersza polecenia jest użycie wiersza polecenia ver, który nie działa bezpośrednio w programie 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
źródło