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

如何捕获Connect-ExchangeOnline的错误信息并存储到变量

捕获Connect-ExchangeOnline的凭证错误信息

当使用Connect-ExchangeOnline传入错误凭证时,控制台会输出如下错误,但常规的try/catch、-ErrorVariable或4>$null重定向无法捕获或屏蔽该输出:

Error Acquiring Token:
Response status code does not indicate success: 404 (NotFound).
Error: Response status code does not indicate success: 404 (NotFound).

解决方案

这类错误属于未被PowerShell封装的标准错误流(stderr)输出,需要通过错误流合并到输出流的方式捕获,同时避免控制台打印。以下是可行的代码示例:

# 示例:定义错误凭证
$invalidCredential = Get-Credential -Message "输入错误凭证"

# 执行连接并捕获结果
$connectionOutput = Connect-ExchangeOnline -Credential $invalidCredential -ShowBanner:$false -ErrorAction Stop 2>&1

# 判断连接结果类型,处理错误或成功逻辑
if ($connectionOutput -is [System.Management.Automation.ErrorRecord]) {
    # 提取错误信息,转为JSON格式返回给外部服务
    $errorResponse = @{
        success = $false
        errorMessage = $connectionOutput.Exception.Message
    } | ConvertTo-Json
    Write-Host $errorResponse
} else {
    # 连接成功时的响应逻辑
    $successResponse = @{
        success = $true
        message = "Exchange Online连接成功"
    } | ConvertTo-Json
    Write-Host $successResponse
}

原理说明

  1. 2>&1:将标准错误流(stderr)合并到标准输出流(stdout),让原本直接打印到控制台的错误信息被存入变量$connectionOutput。
  2. 类型判断:连接失败时,$connectionOutput会是ErrorRecord类型,可从中提取异常详情;连接成功则返回正常的连接对象。
  3. -ErrorAction Stop:确保严重错误触发终止错误,配合错误流合并可覆盖大部分场景的错误捕获。

补充:彻底屏蔽控制台输出

如果需要完全避免任何控制台输出,可在命令末尾追加> $null屏蔽标准输出,但仍需保留2>&1捕获错误:

$connectionOutput = Connect-ExchangeOnline -Credential $invalidCredential -ShowBanner:$false -ErrorAction Stop 2>&1 > $null

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 10:05:09