Já me perguntaram isso algumas vezes, então pensei em postar. Existem três maneiras.
- Execute o winver.exe
- Executar ver.exe
- Verifique o registro
Para mais detalhes, veja aqui: link
Durante a versão beta do Windows 10, era difícil saber qual versão você estava executando, a menos que fosse postada na área de trabalho. Uma vez que não estava lá - como você diz qual versão / build você está executando?
Isso se tornará mais um problema quando a Microsoft começar a liberar mais compilações com o novo mecanismo de atualização.
Já me perguntaram isso algumas vezes, então pensei em postar. Existem três maneiras.
Para mais detalhes, veja aqui: link
GUI: configurações, sistema, sobre
Não tenho certeza se essa é a maneira "correta", mas você pode obter a Win10 vocalizou / falou sobre 'versão' (1511, 1607, etc.) através deste cmd:
Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseId
Verificar a versão ou o número de compilação do Windows 10 não é muito útil porque não muda com o tempo.
Acontece que a primeira frase está errada; Isso era verdade em todas as versões anteriores do Windows, mas agora estamos em um novo mundo do Windows 10. Os últimos insiders builds têm um número de compilação de 10525
em comparação com "RTM": 10240
.
Existem várias maneiras de obter o número da compilação na linha 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
O último dos três é o mais rápido.
Se preferir a GUI, você pode usar o winver.exe ou a entrada About
no menu Help
da maioria dos aplicativos de área de trabalho do Windows.
Sem service packs, o nível de patch no sistema operacional depende das atualizações instaladas. Existem várias maneiras de encontrá-las, GUI, systeminfo.exe, wmi, etc.
A maneira recomendada e mais eficiente de fazer coisas como esta é usar o PowerShell:
Get-HotFix
mostra 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
Você pode filtrar por atualizações nos últimos 10 dias:
Get-Hotfix | Where {$_.InstalledOn -gt $(Get-Date).AddDays(-10) -and $_.Description -eq "Update"}
Ou mostre as três últimas atualizações instaladas:
Get-Hotfix | Sort-object InstalledOn -Descending | Select -First 3
Você pode verificar se uma atualização específica está instalada:
if ((get-hotfix -id kb3087916) -ne $null) {"patched..."}
Você pode encontrar on-line o número do patch kb mais recente como:
(New-Object Net.WebClient).DownloadString('https://microsoft.com/...')
E, em seguida, verifique se existe na máquina.
Nota: isto é apenas um exemplo. Eu não sei de uma página que atualmente lista isso, e você ainda tem que analisá-lo.
A pergunta é: com o tempo, a Microsoft mudará tanto a funcionalidade do Windows 10 que você terá que verificar se ela faz seu aplicativo ou script funcionar.
Pode ser uma boa ideia verificar se um recurso específico que você precisa existe no sistema, em vez de procurar um número de versão.
O WMI não possui atualmente propriedades que possam ser usadas para identificar completamente a versão do Windows 10 (como 1607) ou o número de compilação completo (como 10.0.14393.577). Como afirmado em outros comentários, esta informação é visível no registro sob esta chave:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
Os seguintes valores nessa chave correspondem às informações exibidas pelo 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)
Além disso, a versão números está nesses dois valores dessa chave de registro:
CurrentMajorVersionNumber = 10
CurrentMinorVersionNumber = 0
A compilação é alterada quando a versão (como 1607) é alterada ou quando as compilações internas são instaladas. No entanto, o UBR (Update Build Revision) muda com certas atualizações conforme indicado na lista de lançamentos da Microsoft .
No PowerShell,
[System.Environment]::OSVersion.Version
retorna Major, Minor e Build da mesma forma que a chave do Registro, mas sempre parece reportar a revisão como 0. Um pouco de código de um usuário do Reddit fornece uma substituição adequada que inclui o UBR do registro como o número de revisão:
$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
Nenhuma das formas postadas anteriormente funciona, e nenhuma delas fornece o Build do SO como aparece na seção Configurações → Sobre . Está faltando as informações de atualização cumulativa.
Você poderia fazer algo assim
$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'
}
}
em um script do PowerShell, mas é preciso algo que sempre foi uma linha única e dificulta o monitoramento. Você pode ver as atualizações aqui:
Histórico de atualizações do Windows 10
Espero que a Microsoft atualize seus patches para que eles comecem a modificar o BuildNumber.
O msinfo32.exe ainda está por aí (era a partir de 8.1)? Fornece muitas informações úteis, incluindo números de série e números de modelo que podem ajudar muito os portáteis.
Você pode extrair a versão do registro. Aqui está um snipit do PowerShell para fazer isso:
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
O PowerShell é sempre a resposta:
Get-CimInstance win32_operatingsystem
Mais informações:
Get-CimInstance Win32_OperatingSystem | Select-Object buildnumber,version
Retorna:
buildnumber version
----------- -------
10240 10.0.10240
Você pode usar isso para obter essas informações rapidamente e, além disso, pode criá-las em uma função e usá-las para coletar essas informações de toda a frota, se necessário.
Em um domínio do AD, você pode usar o cmdlet Get-ADComputer do PowerShell
Get-ADComputer -Filter {OperatingSystem -eq "Windows 10 Pro"} -Property * | Format-Table Name,OperatingSystem,OperatingSystemVersion -Wrap -Auto
Você pode usar Reg Query em um comando FOR para obter o Buildversion, por exemplo, 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)
Ao tentar encontrar uma maneira de exibir a versão do Windows 10 e sua revisão para um único computador remoto, notei que a revisão de versão do PowerShell seguiu a revisão do Windows.
Isso me levou a construir o seguinte script. Eu adicionei um teste para saber se o computador remoto precisa ser reiniciado para a conclusão da atualização.
$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)"}
}
Isso dá esse tipo de resultado:
Computer_Name Version Windows 10 Enterprise 1703, revision 296
Em um domínio AD , você pode substituir seu único < Computer_Name > por uma variável que contém os computadores inteiros de uma UO.
Precisamos verificar qual patch cumulativo está instalado para conformidade. Usar o get-hotfix funciona, mas causa problemas se um patch cumulativo posterior estiver instalado. A melhor solução é comparar o número da compilação, incluindo a parte do hotfix. A única maneira de obter isso por linha de comando é usar o comando comando ver ver que não funciona diretamente no 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"}
Tags windows