如何从PowerShell命令行findWindows版本?
如何find我正在使用的Windows版本?
我正在使用PowerShell 2.0并尝试:
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
我该怎么做呢?
由于您可以访问.NET库,因此可以访问System.Environment
类的OSVersion
属性以获取此信息。 对于版本号,有Version
属性。
例如,
PS C:\> [System.Environment]::OSVersion.Version Major Minor Build Revision ----- ----- ----- -------- 6 1 7601 65536
Windows版本的细节可以在这里find。
-
为了得到Windows的版本号,正如Jeff在他的回答中指出的那样,使用:
[Environment]::OSVersion
值得注意的是,结果是
[System.Version]
types,因此可以检查Windows 7 / Windows Server 2008 R2及更高版本[Environment]::OSVersion.Version -ge (new-object 'Version' 6,1)
但是,这不会告诉你,如果它是客户端或服务器的Windows,也不是版本的名称。
-
使用WMI的
Win32_OperatingSystem
类(总是单个实例),例如:(Get-WmiObject -class Win32_OperatingSystem).Caption
会返回类似的东西
Microsoft®WindowsServer®2008 Standard
Get-WmiObject -Class Win32_OperatingSystem | ForEach-Object -MemberName Caption
或者打高尔夫球
gwmi win32_operatingsystem | % caption
结果
微软Windows 7旗舰版
与以上所有解决scheme不同的是,这将为您提供Windows的完整版本(包括版本/内部版本号) :
(Get-ItemProperty -Path c:\windows\system32\hal.dll).VersionInfo.FileVersion
结果:
10.0.10240.16392 (th1_st1.150716-1608)
我正在提炼一个答案
我在尝试匹配winver.exe的输出时遇到了这个问题:
Version 1607 (OS Build 14393.351)
我能够提取构buildstring:
,((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name BuildLabEx).BuildLabEx -split '\.') | % { $_[0..1] -join '.' }
结果: 14393.351
更新 :这是一个使用正则expression式的稍微简化的脚本
(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").BuildLabEx -match '^[0-9]+\.[0-9]+' | % { $matches.Values }
如果你想区分Windows 8.1(6.3.9600)和Windows 8(6.2.9200)使用
(Get-CimInstance Win32_OperatingSystem).Version
得到正确的版本。 [Environment]::OSVersion
在Windows 8.1中无法正常工作(它返回一个Windows 8版本)。
使用:
Get-WmiObject -class win32_operatingsystem -computer computername | Select-Object Caption
不幸的是,大多数其他答案不提供特定于Windows 10的信息。
Windows 10有它自己的版本 : 1507,1511,1607,1703等 。 这是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
另请参阅有关超级用户的问题 。
至于其他Windows版本使用systeminfo
。 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 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 }
用于显示(两个版本):
"{0} ({1})" -f $windows.Caption, $windows.Version
正如MoonStom所说, [Environment]::OSVersion
OSVersion在升级的Windows 8.1(它返回一个Windows 8版本) 链接上无法正常工作。
如果您想区分Windows 8.1(6.3.9600)和Windows 8(6.2.9200),则可以使用(Get-CimInstance Win32_OperatingSystem).Version
来获取正确的版本。 但是这在PowerShell 2中不起作用。所以使用这个:
$version = $null try { $version = (Get-CimInstance Win32_OperatingSystem).Version } catch { $version = [System.Environment]::OSVersion.Version | % {"{0}.{1}.{2}" -f $_.Major,$_.Minor,$_.Build} }
(Get-ItemProperty -Path“HKLM:\ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion”-Name BuildLabEx).BuildLabEx
与其他所有解决scheme(在Windows 10上testing)不同的是,这会给你提供完整的和正确的(与运行winver.exe时相同的版本号)Windows版本(包括版本/内部版本号):
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" } }
如果您试图破译信息MS放在他们的修补站点,如https://technet.microsoft.com/en-us/library/security/ms17-010.aspx
你将需要一个组合,如:
PS C:\> $name=(Get-WmiObject Win32_OperatingSystem).caption PS C:\> $bit=(Get-WmiObject Win32_OperatingSystem).OSArchitecture PS C:\> $ver=(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ReleaseId PS C:\> Write-Host $name, $bit, $ver
Microsoft Windows 10 Home 64位1703
由于PowerShell 5:
Get-ComputerInfo Get-ComputerInfo -Property Windows*
我觉得这个命令几乎尝试了迄今为止发现的1001种不同的方式来收集系统信息。
$OSVersion = [Version](Get-ItemProperty -Path "$($Env:Windir)\System32\hal.dll" -ErrorAction SilentlyContinue).VersionInfo.FileVersion.Split()[0]
在Windows 10上返回:10.0.10586.420
然后可以使用该variables来访问属性以进行精细比较
$OSVersion.Major equals 10 $OSVersion.Minor equals 0 $OSVersion.Build equals 10586 $OSVersion.Revision equals 420
另外,您可以使用以下操作系统版本进行比较
If ([Version]$OSVersion -ge [Version]"6.1") { #Do Something }