วิธีค้นหารุ่นต่อไปของ Windows 10


19

ในช่วงเบต้าของ Windows 10 มันยากที่จะรู้ว่าคุณกำลังใช้รุ่นใดจนกว่าจะมีการโพสต์บนเดสก์ท็อป หลังจากนั้นก็ไม่มี - คุณจะบอกเวอร์ชัน / บิลด์ที่คุณใช้อยู่ได้อย่างไร?

สิ่งนี้จะกลายเป็นปัญหามากขึ้นเมื่อ Microsoft เริ่มปล่อยบิลด์เพิ่มเติมด้วยกลไกการอัพเดทใหม่


ฉันไม่เชื่อว่าการอัปเดตจะเปลี่ยนหมายเลขบิลด์
joeqwerty

คำตอบ:


19

GUI: การตั้งค่าระบบเกี่ยวกับ

ไม่แน่ใจว่านี่เป็นวิธีที่ 'ถูกต้อง' หรือไม่ แต่คุณสามารถรับWin10 vocalized / talked-about 'version' (1511, 1607 และอื่น ๆ )ผ่านทาง cmd นี้:

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

นี่คือหน้าของ Microsoft เพื่อเชื่อมโยงหมายเลขบิลด์กับ Win10 'version' ( ลิงก์สำรอง [วิกิ] ในกรณี ) ช่วยฉันเมื่อฉันได้รับบิลด์ # จากพีซีระยะไกล: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 สามารถใช้งานได้กับฉันโดยตรง
phuclv

ฉันใช้ LTSB ด้วยตัวเอง & ใช้งานได้สำหรับฉัน
gregg

มันไม่ทำงานในของฉันล่าสุดของ Windows 10 Pro อย่างใดอย่างหนึ่งใน 10.0.17730.1000 (เช่นการสร้าง 17,730) 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สำหรับหมายเลข
บิลด์

9

การตรวจสอบเวอร์ชั่นหรือหมายเลขบิลด์ของ Windows 10 นั้นไม่ค่อยมีประโยชน์เพราะมันจะไม่เปลี่ยนแปลงตลอดเวลา

ปรากฎว่าประโยคแรกนั้นผิด มันเป็นจริงใน Windows รุ่นก่อนหน้าทั้งหมด แต่เราอยู่ใน Windows 10 โลกใหม่ในขณะนี้ ล่าสุดภายในสร้างมีการสร้างจำนวน10525เมื่อเทียบกับ 10240"RTM":

มีหลายวิธีในการรับหมายเลขบิลด์บนบรรทัดคำสั่ง:

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..."}

คุณสามารถค้นหาหมายเลข patch ล่าสุดของ 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 และอื่น ๆ
Cliff Armstrong

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 (ปรับปรุงรูปร่าง Revision) ไม่เปลี่ยนแปลงมีการปรับปรุงบางอย่างตามที่ระบุในรายการเปิดตัวไมโครซอฟท์

ใน PowerShell

[System.Environment]::OSVersion.Version

ส่งคืน Major, Minor และ Build เหมือนกับรีจิสตรีคีย์ แต่มักจะรายงานการแก้ไขเป็น 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

@ แรมฮาวด์คือคำตอบทั้งหมดของเขา?!
oldmud0

@ oldmud0 ไม่แน่นอน มีบางอย่างที่ยอมรับได้
Ramhound

@ RamHound ขอบคุณสำหรับความคิดเห็น ฉันตัด cruft ถ้ามันยัง verbose เกินไปแจ้งให้เราทราบ
Shem Sargent

นี่คือคำตอบที่ถูกต้อง ซึ่งรวมถึง ReleaseID (เช่น 1607), บิลด์ (เช่น 14393) และ UBR (จำนวนที่เปลี่ยนแปลงกับการเปิดตัวแต่ละเดือน) โปรดทราบว่า ReleaseID และบิลด์ซ้ำซ้อนในการทำแผนที่ 1-1 ระหว่างสอง; ฉันชอบที่จะอ่านบางอย่างจาก Microsoft เกี่ยวกับสาเหตุที่ตัวเลขทั้งสองนี้มีอยู่
aggieNick02

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"เพื่อตรวจสอบว่ามีการติดตั้ง CU 15 สิงหาคม 2558 หรือไม่ วันที่ InstalledOn ที่ว่างเปล่าระบุว่าระบบยังไม่ได้รีสตาร์ทเพื่อให้การติดตั้งเสร็จสมบูรณ์
Greg Askew

1
Buildnumber 10240 ไม่เปลี่ยนแปลงด้วยการอัพเดท หมายเลข 16xxx สุดท้ายจะเปลี่ยนไปเมื่อเคอร์เนลได้รับการอัปเดต
magicandre1981

2
ในหนังสือของฉันนี่เป็นคำตอบที่ถูกต้องเพียงข้อเดียว แม้จะมีการอ้างสิทธิ์ว่าไม่ได้แสดง "เวอร์ชันการอัพเดทสะสม" จริง ๆ แล้วในตอนนี้การอนุญาตให้คุณต้องทราบว่าบิลด์ปัจจุบันคืออะไรเพื่อเปรียบเทียบกับ แต่ไม่มีคำตอบอื่นใดที่เกี่ยวข้องกับปัญหานั้น
Ramhound

การเรียกใช้ winver บน commandline ทำงานได้อย่างมีเสน่ห์ ขอบคุณ!
Andreas

สิ่งนี้จะไม่ทำงานสำหรับ Windows 10 LTSB
phuclv

2

ไม่มีการโพสต์ก่อนหน้านี้วิธีการทำงานและไม่มีของพวกเขาให้ OS รูปร่างตามที่ปรากฏในการตั้งค่าเกี่ยวกับส่วน ไม่มีข้อมูลการปรับปรุงที่สะสม

คุณสามารถทำอะไรเช่นนี้

$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 กรกฎาคม 2558 ......
Ramhound

@Ramhound มันเกิดขึ้นตั้งแต่วันที่ 29 กรกฎาคม 2015 หรือยัง? เมื่อใดก็ตามที่ฉันเรียก Win32_OperatingSystem.Version ฉันไม่ได้รับหมายเลขบิลด์ของระบบปฏิบัติการฉันได้รับ 10.0.10586.0 เมื่อ OS บิลด์ในการตั้งค่า> ระบบ> เกี่ยวกับคือ
10.0.10586.164

บิลด์ไม่เปลี่ยนแปลงจนกว่าจะถึงเกณฑ์ 2 ตั้งแต่เกณฑ์ 2 หมายเลขบิลด์มีการเปลี่ยนแปลงพร้อมกับแพ็ตช์สะสม ฉันไม่เคยพูดว่าWin32_OperatingSystem.Versionควรจะทำงานในแบบที่คุณอธิบาย แต่งานสร้างนั้นเปลี่ยนแปลงไปwinver(ในคำอื่น ๆ ที่ฉันบอกว่าสคริปต์ของคุณผิดพลาด)
Ramhound

ไม่มีมันมีอยู่ใน UI แต่ใน WMI โดยเฉพาะอย่างยิ่งเมื่อทำการสอบถาม Win32_OperatingSystem หมายเลขเวอร์ชันที่นี่ยังบอกว่า 10.0.10586 และ BuildNumber ยังบอกว่า 10586 ฉันอยู่ในเครื่องที่มี OSBuild 10586.164 ในการตั้งค่า> ระบบเกี่ยวกับ OS Build ส่วน แต่ใน WMI มันไม่ได้ ทำไมคุณไม่อ่านสิ่งที่ฉันพิมพ์?
d4rkcell

1

msinfo32.exe ยังอยู่ใกล้ ๆ หรือไม่ (จนถึง 8.1) ให้ข้อมูลที่มีประโยชน์มากมายรวมถึงหมายเลขซีเรียล # และหมายเลขรุ่นซึ่งสามารถช่วยเหลือแล็ปท็อปได้มาก


(ถ้าเป็นจะอยู่ในพื้นที่สรุประบบภายใต้ชื่อระบบปฏิบัติการที่ด้านบน)
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

0

ในโดเมน AD คุณสามารถใช้ PowerShell ของGet-ADComputer cmdlet

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 ไม่ใช่รุ่น
บิลด์

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 ซึ่งไม่ถูกต้อง รุ่น
บิลด์

เห็นได้ชัดว่าคุณมีสองซูเปอร์บัญชีผู้ใช้: ฟ KopanickiและKopanicki สิ่งนี้จะรบกวนการแสดงความคิดเห็นแก้ไขโพสต์ของคุณเองและรับคำตอบ โปรดสละเวลาในการใช้บทช่วยสอนของศูนย์ช่วยเหลือนี้และขอให้เจ้าหน้าที่ผู้ใช้ขั้นสูงรวมบัญชีของคุณ
robinCTS

-1

เราจำเป็นต้องตรวจสอบว่ามีการติดตั้งแพตช์สะสมสำหรับการปฏิบัติตาม ใช้การแก้ไขด่วนใช้งานได้ แต่ก่อให้เกิดปัญหาหากมีการติดตั้งโปรแกรมแก้ไขแบบสะสมในภายหลัง ทางออกที่ดีที่สุดคือการเปรียบเทียบหมายเลขบิลด์รวมถึงส่วนของโปรแกรมแก้ไขด่วน วิธีเดียวที่จะได้รับจากบรรทัดคำสั่งคือการใช้คำสั่ง 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"}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.