但是有没有办法使用类似于图像中提到的命令行输出来获取确切的版本字符串?
附件是运行中“winver”命令的输出。PS:我正在寻找批处理或 PowerShell 命令。
有一些替代方法可用于获取 Windows 版本,例如此 PowerShell 命令:
[System.Environment]::OSVersion
但是有没有办法使用类似于图像中提到的命令行输出来获取确切的版本字符串?
附件是运行中“winver”命令的输出。PS:我正在寻找批处理或 PowerShell 命令。
有一些替代方法可用于获取 Windows 版本,例如此 PowerShell 命令:
[System.Environment]::OSVersion
该ver
命令显示如下内容:
> ver
Microsoft Windows [Versión 10.0.17134.228]
但在 PowerShell(或 Git Bash)中,您必须通过以下cmd
命令调用它:
> cmd /c ver
以下命令将帮助您。如果您需要更多信息,只需输入systeminfo:
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
wmic os get Caption,CSDVersion /value
我在某个地方找到了它,PowerShell:
(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ReleaseId
要添加到@Bonifacio 的答案:
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | findstr ReleaseId
会更好,因为它只返回 ReleaseId 值,然后您可以将其通过管道传输到文件。如果您有多个主机要处理,则特别有用。
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | findstr ReleaseId > any_path\%COMPUTERNAME%_OS_Version.txt
使用系统信息,您只能获取具有该值的构建,然后去 Google 获取相应的版本。
但是,一种简单的方法是在命令行上搜索注册表:
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | findstr REG_SZ
reg 查询方式建议所有输出有点垃圾。
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | findstr ReleaseId
Output:
ReleaseId REG_SZ 2009
使用带有标记的 for 循环将输出干净的信息。
for /f "tokens=3" %i in ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" ^| findstr ReleaseId') do echo %i
Output:
2009
thetokens=3
指的是原始输出中的第三个单词。
%
如果在 bat 文件中运行,您将需要加倍。
echo %i
您可以通过替换将输出设置为变量set build=%i
还要记住转义^
任何特殊字符。
最后查看HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
具有所需值的字符串。您可能需要调整令牌计数。
对于它的价值,我将一些答案组合到这个 powershell 函数中。(我使用 pwsh 7.2.1 对此进行了测试)。
<#
.SYNOPSIS
Gets information about the version of windows this session is running on.
.OUTPUTS
A hashtable with various key/value pairs containing version information.
.EXAMPLE
PS> $winver = Get-Winver
PS> $winver
Name Value
---- -----
DisplayVersion 21H2
ProductName Windows 10 Enterprise
CurrentBuildNumber 19044
KeyName HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion
Version 10.0.19044.0
VersionString Microsoft Windows NT 10.0.19044.0
OsVersion Microsoft Windows NT 10.0.19044.0
PS> $winver.Version
Major Minor Build Revision
----- ----- ----- --------
10 0 19044 0
#>
function Get-Winver {
$keyName = "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion"
$versionKey = (Get-Item $keyName)
$displayVersion = $versionKey.GetValue("DisplayVersion")
$productName = $versionKey.GetValue("ProductName")
$currentBuildNumber = $versionKey.GetValue("CurrentBuildNumber")
$osver = [System.Environment]::OSVersion
$winver = [Ordered]@{
"DisplayVersion" = $displayVersion
"ProductName" = $productName
"CurrentBuildNumber" = $currentBuildNumber
"KeyName" = $keyName
"Version" = $osver.Version
"VersionString" = $osver.VersionString
"OsVersion" = $osver
}
return $winver
}