如何捕获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 }
原理说明
2>&1:将标准错误流(stderr)合并到标准输出流(stdout),让原本直接打印到控制台的错误信息被存入变量$connectionOutput。- 类型判断:连接失败时,
$connectionOutput会是ErrorRecord类型,可从中提取异常详情;连接成功则返回正常的连接对象。 -ErrorAction Stop:确保严重错误触发终止错误,配合错误流合并可覆盖大部分场景的错误捕获。
补充:彻底屏蔽控制台输出
如果需要完全避免任何控制台输出,可在命令末尾追加> $null屏蔽标准输出,但仍需保留2>&1捕获错误:
$connectionOutput = Connect-ExchangeOnline -Credential $invalidCredential -ShowBanner:$false -ErrorAction Stop 2>&1 > $null
内容的提问来源于stack exchange,提问作者Konrad
相关产品推荐
相关产品推荐

