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?
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 .
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.
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
Get-WmiObject -Class Win32_OperatingSystem | ForEach-Object -MemberName Caption
Ou joué au golf
gwmi win32_operatingsystem | % caption
Résultat
Microsoft Windows 7 Ultimate
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
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)
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).
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 ...
PS C:\> Get-ComputerInfo | select WindowsProductName, WindowsVersion, OsHardwareAbstractionLayer
résultats
WindowsProductName WindowsVersion OsHardwareAbstractionLayer
------------------ -------------- --------------------------
Windows 10 Enterprise 1709 10.0.16299.371
Utilisation:
Get-WmiObject -class win32_operatingsystem -computer computername | Select-Object Caption
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}
}
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
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.
(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name BuildLabEx).BuildLabEx
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
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"
}
}
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
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
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))"
À 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