web-dev-qa-db-fra.com

Comment trouver la version Windows à partir de la ligne de commande PowerShell?

Comment trouver la version Windows que j'utilise?

J'utilise PowerShell 2.0 et j'ai essayé:

PS C:\> ver
The term 'ver' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify tha
t the path is correct and try again.
At line:1 char:4
+ ver <<<< 
    + CategoryInfo          : ObjectNotFound: (ver:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Comment puis-je faire cela?

85
jrara

Puisque vous avez accès à la bibliothèque .NET, vous pouvez accéder à la propriété OSVersion de la classe System.Environment pour obtenir ces informations. Pour le numéro de version, il existe la propriété Version.

Par exemple,

PS C:\> [System.Environment]::OSVersion.Version

Major  Minor  Build  Revision
-----  -----  -----  --------
6      1      7601   65536

Des détails sur les versions de Windows peuvent être trouvés ici .

125
Jeff Mercado
  1. Pour obtenir le numéro de version de Windows, comme le note Jeff dans son answer , utilisez:

    [Environment]::OSVersion
    

    Il est à noter que le résultat est de type [System.Version] , il est donc possible de vérifier, par exemple, Windows 7/Windows Server 2008 R2 et versions ultérieures avec

    [Environment]::OSVersion.Version -ge (new-object 'Version' 6,1)
    

    Cependant, cela ne vous dira pas s'il s'agit de Windows client ou serveur, ni le nom de la version.

  2. Utilisez Win32_OperatingSystem class de WMI (toujours une seule instance), par exemple:

    (Get-WmiObject -class Win32_OperatingSystem).Caption
    

    retournera quelque chose comme

    Microsoft® Windows Server® 2008 Standard

90
Richard
Get-WmiObject -Class Win32_OperatingSystem | ForEach-Object -MemberName Caption

Ou joué au golf

gwmi win32_operatingsystem | % caption

Résultat

 Microsoft Windows 7 Ultimate 
21
Steven Penny

Malheureusement, la plupart des autres réponses ne fournissent pas d'informations spécifiques à Windows 10.

Windows 10 a des versions propres: 1507, 1511, 1607, 1703, etc. . C'est ce que montre winver.

Powershell:
(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ReleaseId

Command Prompt (CMD.EXE):
Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseId

Voir aussi question relative au superutilisateur .

Comme pour les autres versions de Windows, utilisez systeminfo. Enveloppe Powershell:

PS C:\> systeminfo /fo csv | ConvertFrom-Csv | select OS*, System*, Hotfix* | Format-List


OS Name             : Microsoft Windows 7 Enterprise
OS Version          : 6.1.7601 Service Pack 1 Build 7601
OS Manufacturer     : Microsoft Corporation
OS Configuration    : Standalone Workstation
OS Build Type       : Multiprocessor Free
System Type         : x64-based PC
System Locale       : ru;Russian
Hotfix(s)           : 274 Hotfix(s) Installed.,[01]: KB2849697,[02]: KB2849697,[03]:...

Windows 10 en sortie pour la même commande:

OS Name             : Microsoft Windows 10 Enterprise N 2016 LTSB
OS Version          : 10.0.14393 N/A Build 14393
OS Manufacturer     : Microsoft Corporation
OS Configuration    : Standalone Workstation
OS Build Type       : Multiprocessor Free
System Type         : x64-based PC
System Directory    : C:\Windows\system32
System Locale       : en-us;English (United States)
Hotfix(s)           : N/A
19
Anton Krouglov

Cela vous donnera la version complète de Windows (y compris le numéro de révision/construction) contrairement à toutes les solutions ci-dessus:

(Get-ItemProperty -Path c:\windows\system32\hal.dll).VersionInfo.FileVersion

Résultat:

10.0.10240.16392 (th1_st1.150716-1608)
14
Ihor Zenich

Si vous souhaitez différencier Windows 8.1 (6.3.9600) et Windows 8 (6.2.9200), utilisez 

(Get-CimInstance Win32_OperatingSystem).Version 

pour obtenir la version appropriée. [Environment]::OSVersion ne fonctionne pas correctement sous Windows 8.1 (il retourne une version Windows 8).

7
MoonStom

Depuis PowerShell 5:

Get-ComputerInfo
Get-ComputerInfo -Property Windows*

Je pense que cette commande essaie assez bien les 1001 façons différentes découvertes jusqu'à présent de collecter des informations système ...

6
Schadowy
PS C:\> Get-ComputerInfo | select WindowsProductName, WindowsVersion, OsHardwareAbstractionLayer

résultats

WindowsProductName    WindowsVersion OsHardwareAbstractionLayer
------------------    -------------- --------------------------
Windows 10 Enterprise 1709           10.0.16299.371 
4
Lars Fosdal

Utilisation:

Get-WmiObject -class win32_operatingsystem -computer computername | Select-Object Caption
4
Mac

Comme le dit MoonStom, [Environment]::OSVersion ne fonctionne pas correctement sous Windows 8.1 mis à niveau (il renvoie une version Windows 8): link .

Si vous souhaitez différencier Windows 8.1 (6.3.9600) de Windows 8 (6.2.9200), vous pouvez utiliser (Get-CimInstance Win32_OperatingSystem).Version pour obtenir la version appropriée. Cependant, cela ne fonctionne pas dans PowerShell 2. Utilisez donc ceci:

$version = $null
try {
    $version = (Get-CimInstance Win32_OperatingSystem).Version
}
catch {
    $version = [System.Environment]::OSVersion.Version | % {"{0}.{1}.{2}" -f $_.Major,$_.Minor,$_.Build}
}
4
mhu

Windows PowerShell 2.0:

$windows = New-Object -Type PSObject |
           Add-Member -MemberType NoteProperty -Name Caption -Value (Get-WmiObject -Class Win32_OperatingSystem).Caption -PassThru |
           Add-Member -MemberType NoteProperty -Name Version -Value [Environment]::OSVersion.Version                     -PassThru

Windows PowerShell 3.0:

$windows = [PSCustomObject]@{
    Caption = (Get-WmiObject -Class Win32_OperatingSystem).Caption
    Version = [Environment]::OSVersion.Version
}

Pour l'affichage (les deux versions):

"{0}  ({1})" -f $windows.Caption, $windows.Version 
2
Vince Ypma

J'ai pris les scripts ci-dessus et les ai légèrement modifiés pour arriver à ceci:

$name=(Get-WmiObject Win32_OperatingSystem).caption
$bit=(Get-WmiObject Win32_OperatingSystem).OSArchitecture

$vert = " Version:"
$ver=(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ReleaseId

$buildt = " Build:"
$build= (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").BuildLabEx -match '^[0-9]+\.[0-9]+' |  % { $matches.Values }

$installd = Get-ComputerInfo -Property WindowsInstallDateFromRegistry

Write-Host $installd
Write-Host $name, $bit, $vert, $ver, `enter code here`$buildt, $build, $installd

Pour obtenir un résultat comme celui-ci:

Microsoft Windows 10 Édition Familiale 64 bits Version: 1709 Version: 16299.431 @ {WindowsInstallDateFromRegistry = 18-01-01 02:29:11}

Astuce: j'apprécierais qu'une main supprime le texte du préfixe de la date d'installation afin de pouvoir le remplacer par un en-tête plus lisible. 

2
Ron MVP
(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name BuildLabEx).BuildLabEx
1
Test

Si vous essayez de déchiffrer des informations, MS met son site de correctifs sur https://technet.Microsoft.com/en-us/library/security/ms17-010.aspx

vous aurez besoin d'un combo tel que:

$name=(Get-WmiObject Win32_OperatingSystem).caption $bit=(Get-WmiObject Win32_OperatingSystem).OSArchitecture $ver=(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ReleaseId Write-Host $name, $bit, $ver

Microsoft Windows 10 Édition Familiale 64 bits 1703

1
Michael Joyce

Cela vous donnera la version complète et CORRECT (le même numéro de version que vous avez trouvé lorsque vous exécutez winver.exe) de Windows (y compris le numéro de révision/de compilation) À DISTANCE, contrairement à toutes les autres solutions (testées sous Windows 10):

Function Get-OSVersion {
Param($ComputerName)
    Invoke-Command -ComputerName $ComputerName -ScriptBlock {
        $all = @()
        (Get-Childitem c:\windows\system32) | ? Length | Foreach {

            $all += (Get-ItemProperty -Path $_.FullName).VersionInfo.Productversion
        }
        $version = [System.Environment]::OSVersion.Version
        $osversion = "$($version.major).0.$($version.build)"
        $minor = @()
        $all | ? {$_ -like "$osversion*"} | Foreach {
            $minor += [int]($_ -replace".*\.")
        }
        $minor = $minor | sort | Select -Last 1

        return "$osversion.$minor"
    }
}
0
PowerShellGirl

J'ai beaucoup cherché la version exacte, car le serveur WSUS affiche la mauvaise version ..__ Le mieux est d'obtenir une révision à partir de la clé de registre 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
0
Ali

Vous pouvez utiliser python pour simplifier les choses (fonctionne sur toutes les versions de Windows et toutes les autres plates-formes):

import platform

print(platform.system()) # returns 'Windows', 'Linux' etc.
print(platform.release()) # returns for Windows 10 or Server 2019 '10'

if platform.system() = 'Windows':
    print(platform.win32_ver()) # returns (10, 10.0.17744, SP0, Multiprocessor Free) on windows server 2019
0
Ruben Kelevra

Pour produire une sortie identique à winver.exe dans PowerShell v5 sous Windows 10 1809:

$Version = Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\'
"Version $($Version.ReleaseId) (OS Build $($Version.CurrentBuildNumber).$($Version.UBR))"
0
James Russell

À l'aide de Windows Powershell, il est possible d'obtenir les données dont vous avez besoin de la manière suivante

Légende:

(Get-WmiObject -class Win32_OperatingSystem).Caption

ReleaseId:

(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId

version:

(Get-CimInstance Win32_OperatingSystem).version
0
Dan Steve