如何将.net固件版本号与存储在变量中的数字进行比较

时间:2019-08-06 03:03:11

标签: powershell scripting

这里和#Powershell都是超新的。我正在编写脚本来检查所安装的.Net Framework版本是否大于或等于存储在变量中的版本号。

我遇到的问题是设置过滤到版本号的变量时。

$installed = (Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\' | Get-ItemPropertyValue -Name Version | Where { $_.Version -ge $software }) -ne $null

我想比较

中找到的.Net Framework版本
  

HKLM:\ SOFTWARE \ Microsoft \ NET Framework安装程序\ NDP \ v4 \ Full

查看Windows 10计算机上安装的哪个版本,以查看它是否大于或等于。我曾尝试比较注册表中的发行版号,但“版本”与我的工作更为相关。

我想在控制台和文本文件中写一条消息

$software = '4.7.02053'

$installed = (Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\' | Get-ItemPropertyValue -Name Version | Where { $_.Version -ge $software }) -ne $null

If(-not $installed) { "$software is NOT installed."| Out-File -FilePath C:\Pre-Req_Log.txt -append Write-Host "'$software' is NOT installed."; pause } else { "$software is installed."| Out-File -FilePath C:\Pre-Req_Log.txt -append Write-Host ".Net FW '$software' is installed." }

我的预期结果是看到“ 4.7.02053”已(或未)安装在文本文件中,并且是正确的。相等并不重要,只要是该版本或更高版本,我都会很高兴。

1 个答案:

答案 0 :(得分:2)

要比较版本号,请不要将它们作为 strings 进行比较,将它们转换为[version]System.Version),然后进行比较:

$refVersion = [version] '4.7.02053'

$installedVersion = [version] (Get-ItemPropertyValue -LiteralPath 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' -Name Version)

if ($installedVersion -ge $refVersion) {
  # installed
  # ...
}
else {
  # not installed
  # ...
}

如果您在可扩展字符串([version])中使用这些"..."实例,则会获得预期的字符串表示形式,但请注意,将它们原样输出到控制台或通过{{1 }} / Out-File将以表格形式显示,其中版本号组件分别显示。要强制使用通常的字符串表示形式,请使用>-例如"...",或调用"$refVersion",例如.ToString()