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

PowerShell中Get-Package命令错误消息抑制方法求助

PowerShell检查已安装应用时抑制无匹配错误的解决办法

当使用Get-Package检查应用是否安装时,若目标应用未安装,命令会抛出非终止错误,常规的Try/Catch或Out-Null无法有效抑制或捕获——原因是这类错误默认不会终止脚本执行,Try/Catch仅对终止错误生效。以下是两种可行的解决方式:

方法一:将非终止错误转为终止错误,用Try/Catch捕获

给Get-Package添加-ErrorAction Stop参数,把找不到包的非终止错误转为终止错误,这样就能被Try/Catch捕获并处理:

Try {
  $Application_MicrosoftEdge = Get-Package "Microsoft Edge" -ErrorAction Stop | ForEach-Object { $_.metadata['installlocation'] }
  $Application_Microsoft365 = Get-Package *"Microsoft 365"* -ErrorAction Stop | ForEach-Object { $_.metadata['installlocation'] }
}
Catch {
  # 根据错误信息匹配未找到的应用,赋值为"未安装"
  switch -Regex ($_.Exception.Message) {
    "Microsoft 365" { $Application_Microsoft365 = "未安装" }
    "Microsoft Edge" { $Application_MicrosoftEdge = "未安装" }
  }
}

Write-Host "Microsoft Edge Path    : $Application_MicrosoftEdge"
Write-Host "Microsoft 365 Path     : $Application_Microsoft365"

方法二:直接抑制错误输出,事后判断结果

使用-ErrorAction SilentlyContinue参数屏蔽错误输出,之后通过判断变量是否为空来处理未安装的情况:

$Application_MicrosoftEdge = Get-Package "Microsoft Edge" -ErrorAction SilentlyContinue | ForEach-Object { $_.metadata['installlocation'] }
$Application_Microsoft365 = Get-Package *"Microsoft 365"* -ErrorAction SilentlyContinue | ForEach-Object { $_.metadata['installlocation'] }

# 为空则标记为未安装
if (-not $Application_MicrosoftEdge) { $Application_MicrosoftEdge = "未安装" }
if (-not $Application_Microsoft365) { $Application_Microsoft365 = "未安装" }

Write-Host "Microsoft Edge Path    : $Application_MicrosoftEdge"
Write-Host "Microsoft 365 Path     : $Application_Microsoft365"

补充说明

PowerShell的错误分为两类:

  • 终止错误:会立即终止脚本执行,可被Try/Catch捕获
  • 非终止错误:仅输出错误信息,脚本继续执行,默认无法被Try/Catch捕获

Get-Package未找到匹配包时抛出的是非终止错误,因此需要通过-ErrorAction参数调整错误处理行为,才能实现预期的错误抑制或捕获。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:09:13