You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell对比EXE与MSI版本号始终匹配失败问题求助

问题根因

  • 你当前使用的-match是正则匹配运算符,一方面存在特殊字符误判的风险,另一方面你获取的MSI版本字符串可能带有COM调用返回的不可见字符、首尾空格,会直接导致匹配失败。
  • 两段版本号段数不一致:exe的文件版本是4段结构(主版本.次版本. Build版本.修订号),而MSI的ProductVersion属性默认仅存储前3段,直接全字符串匹配无法对齐。

修复方案

最稳妥的方案是将两个版本转换为PowerShell原生的[version]强类型对象,按需对比指定的版本段即可,同时对MSI返回的版本字符串做去空格处理:

第一步:优化MSI版本获取逻辑

修改Get-MsiDBVersion函数的返回值,去掉首尾空白字符:

# 原函数其他代码不变,仅修改return行
return $productVersion.Trim()

第二步:修改版本对比逻辑

# 转换为强类型版本对象
$exeVersion = [version](Get-Item "C:\Program Files\Dell\SysMgt\rac5\racadm.exe").VersionInfo.FileVersion
$msiVersion = [version]$RACToolsVersion

# 对比前3段版本即可对齐MSI的版本规则
if ($exeVersion.Major -eq $msiVersion.Major -and 
    $exeVersion.Minor -eq $msiVersion.Minor -and 
    $exeVersion.Build -eq $msiVersion.Build) {
    Write-Host "yes match"
}
else {
    Write-Host "no match"
}

如果需要实现「MSI版本更高时自动安装」的逻辑,还可以直接用版本对象对比大小:

# 截取exe的前3段构造相同长度的版本对象
$exeShortVersion = [version]"$($exeVersion.Major).$($exeVersion.Minor).$($exeVersion.Build)"
if ($msiVersion -gt $exeShortVersion) {
    Write-Host "MSI版本更新,开始执行安装逻辑"
    # 此处补充MSI安装命令即可
}
else {
    Write-Host "当前已安装版本为最新,无需更新"
}

内容的提问来源于stack exchange,提问作者Fitzgery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:27:04