这里和#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”已(或未)安装在文本文件中,并且是正确的。相等并不重要,只要是该版本或更高版本,我都会很高兴。
答案 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()