PowerShell中校验符合版本要求的AppX包已安装的条件编写方法
问题根因
你写的判断逻辑存在两个核心错误,导致运行不稳定:
Get-AppxPackage Microsoft.DesktopAppInstaller | Select Version返回的是带Version属性的PSCustomObject对象,不是纯版本值,不同类型的对象直接比较结果不可控- 使用
-eq判断相等不符合需求,你需要的是大于等于指定版本,就算值取对了,更高版本的App Installer也会误触发更新流程
修复方案
直接使用[version]类型做版本大小比较,同时兼容设备未安装Desktop App Installer的场景,修复后的代码如下:
# 定义最低要求版本 $minRequiredVersion = [version]"1.12.11692.0" # 获取Desktop App Installer安装信息,忽略未安装的报错 $appInstallerPkg = Get-AppxPackage Microsoft.DesktopAppInstaller -ErrorAction SilentlyContinue # 未安装 或 版本低于要求时走更新流程 if ($null -eq $appInstallerPkg -or $appInstallerPkg.Version -lt $minRequiredVersion) { Write-Host "Microsoft Desktop App Installer 不满足脚本运行最低版本要求,将弹出安装窗口,请点击「更新」完成安装。安装完成后按回车键继续运行脚本。" .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle pause } else { Write-Host "Microsoft Desktop App Installer 版本满足要求,继续执行脚本。" } # 统一调用后续安装脚本 .\(pathtoInstallationscript).ps1
优化说明
- 直接调用App Installer包自带的
Version属性,该属性本身就是[version]类型,和预定义的最低版本变量类型一致,比较结果稳定不会出现异常 - 增加了未安装场景的兼容,避免空值报错
- 后续安装脚本统一放在判断外执行,无需在两个分支重复写,降低维护成本
内容的提问来源于stack exchange,提问作者NickLab
相关产品推荐
相关产品推荐

