Cómo encontrar la versión / compilación de Windows 10

19

Durante la versión beta de Windows 10, era difícil saber qué versión estaba ejecutando a menos que la publicara en el escritorio. Una vez que no estaba allí, ¿cómo sabes qué versión / compilación estás ejecutando?

Esto se convertirá en un problema a medida que Microsoft comience a lanzar más compilaciones con el nuevo mecanismo de actualización.

Brian Lewis
fuente
No creo que las actualizaciones alteren el número de compilación.
joeqwerty

Respuestas:

19

GUI: Configuración, Sistema, Acerca de

No estoy seguro de si esta es la forma 'adecuada', pero puede obtener la 'versión' vocalizada / comentada de Win10 (1511, 1607, etc.) a través de este cmd:

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

Aquí está la página de Microsoft para correlacionar los números de compilación con la 'versión' de Win10 ( enlace de respaldo [wiki] por si acaso ). Me ayudó cuando obtuve el número de compilación de una PC remota:wmic /node:HOSTNAME os get BuildNumber

Gregg
fuente
66
Gracias, eso me ayudó mucho. Solo por el caso: la versión de PowerShell de su comando sería(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId
Anton Krouglov el
Esto no funciona en Windows 10 Enterprise LTSB. Solo las soluciones que leen la versión de powershell funcionan directamente para mí
phuclv
Estoy ejecutando LTSB yo mismo y funciona para mí?
gregg
tampoco funciona en mi último Windows 10 Pro: en 10.0.17730.1000 (es decir, compilación 17730) da ReleaseId REG_SZ 1803. Esto y esto funciona
phuclv
@AntonKrouglov esa es la ID de lanzamiento y no la compilación actual. (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name CurrentBuildNumber).CurrentBuildNumber(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name CurrentBuild).CurrentBuild
Debe
9

Comprobar la versión o el número de compilación de Windows 10 no es muy útil porque no cambia con el tiempo.

Resulta que la primera oración está equivocada; era cierto en todas las versiones anteriores de Windows, pero ahora estamos en un nuevo mundo de Windows 10. La última información privilegiada de construcción tiene un número de compilación de la 10525comparación con "RTM": 10240.

Hay varias formas de obtener el número de compilación en la línea de comando:

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

El último de los tres es el más rápido.

Si prefiere la GUI, puede usar winver.exe o la Aboutentrada en el Helpmenú de la mayoría de las aplicaciones de escritorio de Windows.

Sin más service packs, el nivel de parche en el sistema operativo depende de las actualizaciones instaladas. Hay varias formas de encontrarlos, GUI, systeminfo.exe, wmi, etc.

La forma recomendada y más poderosa de hacer cosas como esta es usar PowerShell:

Get-HotFix

muestra algo como:

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

Puede filtrar las actualizaciones en los últimos 10 días:

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

O muestre las últimas tres actualizaciones instaladas:

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

Puede verificar si está instalada una actualización específica:

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

Primero puede encontrar el último número de parche kb en línea como:

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

Y luego verifique si existe en la máquina.

Nota: esto es solo un ejemplo. No conozco una página que actualmente enumere estos, y todavía tiene que analizarla.

La pregunta es: con el tiempo, Microsoft cambiará la funcionalidad de Windows 10 tanto que tendrá que verificarlo para que su aplicación o script funcione.

Puede ser una mejor idea verificar si existe una característica específica que necesita en el sistema, en lugar de buscar un número de versión.

Peter Hahndorf
fuente
"era cierto en todas las versiones anteriores de Windows" De hecho, no ha sido así desde Windows 95, al menos. Windows 95 y Windows 95 OSR2 tenían números de compilación diferentes. Al igual que Windows 98 y Windows 98se. Al igual que Windows XP, Windows XP SP1, Windows XP SP2, etc.
Cliff Armstrong el
8

Actualmente, WMI no tiene propiedades que se puedan usar para identificar completamente la versión de Windows 10 (como 1607) o el número de compilación completo (como 10.0.14393.577). Como se indicó en otros comentarios, esta información es visible en el registro bajo esta clave:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion

Los siguientes valores en esa clave corresponden a la información que muestra el programa 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)

Además, los números de versión están en estos dos valores de esa clave de registro:

CurrentMajorVersionNumber = 10
CurrentMinorVersionNumber = 0

La compilación cambia cuando la Versión (como 1607) cambia o cuando se instalan las compilaciones de Insider. Sin embargo, la UBR (Revisión de actualización de compilación) cambia con ciertas actualizaciones como se indica en la lista de versiones de Microsoft .

En PowerShell,

[System.Environment]::OSVersion.Version

devuelve Major, Minor y Build igual que la clave de registro, pero siempre parece informar que la Revisión es 0. Un bit de código de un usuario de Reddit proporciona un reemplazo adecuado que incluye el UBR del registro como número de Revisión:

$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
Sem Sargent
fuente
@Ramhound es decir, toda su respuesta ?!
oldmud0
@ oldmud0, por supuesto que no; hay algo que es aceptable
Ramhound
@RamHound Gracias por los comentarios. Cogí un poco costra. Si todavía es demasiado prolijo, que me haga saber.
Sem Sargent
Esta es la respuesta correcta. Incluye ReleaseID (por ejemplo, 1607), compilación (por ejemplo, 14393) y UBR (el número que cambia con cada lanzamiento mensual). Tenga en cuenta que ReleaseID y acumulación son redundantes en el que hay un mapeo 1-1 entre los dos; Me encantaría leer algo de Microsoft acerca de por qué estos dos números existen.
aggieNick02
5

Me han preguntado esto unas cuantas veces, así que pensé que iba a publicarlo. Hay tres maneras.

  1. Ejecutar winver.exe
  2. Ejecute ver.exe
  3. Revisa el registro

Para más detalles mira aquí: http://mythoughtsonit.com/2015/07/what-build-version-of-windows-10-am-i-running/

Brian Lewis
fuente
2
Lamentablemente, Microsoft no proporciona un mecanismo para determinar la versión de actualización acumulativa. Como ya no proporcionan realmente paquetes de servicio del sistema operativo, sería una información útil. Una alternativa sería utilizar el comando WMIC para consultar una versión de resumen específica. Por ejemplo, WMIC QFE GET HotfixID, InstalledOn, Description | FINDSTR /I "KB3081438"para determinar si está instalada la CU del 15 de agosto de 2015. Una fecha en blanco InstalledOn indica que el sistema no se ha reiniciado para completar la instalación.
Greg Askew
1
El número de compilación 10240 no cambia con las actualizaciones. El último número 16xxx cambia cuando el núcleo recibe una actualización.
magicandre1981
2
En mi libro esta es la única respuesta correcta verdadera. A pesar de las afirmaciones de que no muestra la "versión de actualización acumulativa" que en realidad lo hace, ahora se reconoce que necesita saber cuál es realmente la compilación actual, para poder compararla, pero ninguna de las otras respuestas se ocupa de ese problema.
Ramhound
Ejecutar winver en la línea de comandos funciona de maravilla. ¡Gracias!
Andreas
esto no funcionará para Windows 10 LTSB
phuclv
2

Ninguna de las formas publicadas anteriormente funciona, y ninguna de ellas proporciona la compilación del sistema operativo como aparece en la sección ConfiguraciónAcerca de . Falta la información de actualización acumulativa.

Podrías hacer algo como esto

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

en un script de PowerShell, pero se necesita algo que siempre ha sido de una sola línea y hace que sea más difícil de monitorear. Puedes ver las actualizaciones aquí:

Historial de actualizaciones de Windows 10

Esperemos que Microsoft actualice sus parches para que comiencen a modificar el BuildNumber.

d4rkcell
fuente
"Esperemos que Microsoft actualice sus parches para que comiencen a modificar el BuildNumber" que sucedió desde el 29 de julio de 2015 ......
Ramhound
@Ramhound, ¿ha sucedido desde el 29 de julio de 2015 o no? Cada vez que llamo Win32_OperatingSystem.Version no obtengo el número de compilación del SO obtengo 10.0.10586.0 cuando OS Build in Settings> System> About es 10.0.10586.164
d4rkcell
La compilación no cambió hasta el Umbral 2. Desde el Umbral 2, el número de compilación ha cambiado, con los parches acumulativos. Nunca dije que Win32_OperatingSystem.Versiondebería funcionar de la manera que usted describe, pero la compilación está cambiando por winver(en otras palabras, estoy diciendo que su script es culpable).
Ramhound
No, no lo ha hecho, tiene en la interfaz de usuario, pero en WMI, especialmente al consultar Win32_OperatingSystem, el número de versión aquí todavía dice 10.0.10586 y BuildNumber todavía dice 10586. Estoy en una máquina que tiene OSBuild 10586.164 en Configuración> Sistema Acerca de OS Build sección pero en WMI no lo hace. ¿Por qué no lees lo que escribí?
d4rkcell
1

¿Msinfo32.exe sigue existiendo (era a partir de 8.1)? Proporciona mucha información útil, incluidos números de serie y números de modelo que pueden ser de gran ayuda para las computadoras portátiles.

radiks32
fuente
(si es así, estará en el área de resumen del sistema debajo del Nombre del sistema operativo en la parte superior).
radiks32
pero solo inicia la GUI y no una solución de línea de comando
phuclv
1

Puede extraer la versión del registro. Aquí hay un fragmento de PowerShell para hacer eso:

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
fuente
1

PowerShell es siempre la respuesta:

Get-CimInstance win32_operatingsystem

Más información:

Get-CimInstance Win32_OperatingSystem | Select-Object buildnumber,version

Devoluciones:

versión de número de compilación
----------- -------
10240 10.0.10240

Puede usar esto para obtener rápidamente esa información, además, puede convertirla en una función y usarla para obtener esa información de toda su flota si lo necesita.

qovert
fuente
2
Esta respuesta podría usar un poco más de explicación.
Kasperd
0

En un dominio de AD, puede usar el cmdlet Get-ADComputer de PowerShell

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

Puede usar Reg Query en un comando FOR para obtener Buildversion, por ejemplo, 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)
usuario283868
fuente
Esto no funciona como la solución actual más votada . El 1607 no es la versión de compilación, que es la que tiene "compilación del sistema operativo"
phuclv
0

Al tratar de encontrar una manera de mostrar la versión de Windows 10 y su revisión para una sola computadora remota, noté que la revisión de la versión de PowerShell siguió a la revisión de Windows.

Me llevó a construir el siguiente script. Agregué una prueba para saber si la computadora remota necesita reiniciarse para completar la actualización.

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

Esto da este tipo de resultado:

Computer_Name Version Windows 10 Enterprise 1703, revision 296

En un dominio AD , puede reemplazar su único <Nombre_de_equipo> por una variable que contenga las computadoras completas de una unidad organizativa.

Frantz Kopanicki
fuente
¿Por qué escribes un guión tan complejo? No funciona en mi PC local que no está unida a ningún dominio. Y pedir a los usuarios que escriban el nombre de la computadora no es amigable. Parece que el único comando importante aquí es 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)", pero me da Windows 10 Pro 1803, revision 1000el 10.0.17730.1000 que es incorrecto. La versión de compilación es 17730
17730
Aparentemente tienes dos cuentas de Superusuario: Frantz Kopanicki y Frantz Kopanicki . Esto interferirá con los comentarios, la edición de sus propias publicaciones y la aceptación de una respuesta. Tómese el tiempo para utilizar este tutorial del Centro de ayuda y solicite al personal de Superusuario que combine sus cuentas.
robinCTS
-1

Necesitamos verificar qué parche acumulativo está instalado para el cumplimiento. el uso de get-hotfix funciona pero causa problemas si se instala un parche acumulativo posterior. La mejor solución es comparar el número de compilación, incluida la porción de revisión. La única forma de obtener eso mediante la línea de comandos es usar el símbolo del sistema ver el comando que no funciona directamente en 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
fuente