如何同时将Get-PnPWeb结果赋值给变量并捕获错误输出?
解决PowerShell中Get-PnPWeb同时赋值变量与捕获错误的问题
可以通过错误流重定向结合类型过滤的方式,同时获取命令结果和捕获错误信息,具体实现如下:
# 捕获Get-PnPWeb的所有输出(包括错误流) $allOutput = Get-PnPWeb -Connection $pnpConnection -ErrorAction SilentlyContinue 2>&1 # 从输出中分离出Web对象和错误记录 [Microsoft.SharePoint.Client.SecurableObject]$Web = $allOutput | Where-Object { $_ -is [Microsoft.SharePoint.Client.SecurableObject] } $errorDetails = $allOutput | Where-Object { $_ -is [System.Management.Automation.ErrorRecord] } # 校验结果并处理错误 if ($null -eq $Web) { if ($errorDetails) { # 格式化错误信息,可根据需求调整内容 $formattedError = "访问站点 $($pnpConnection.Url) 失败:$($errorDetails.Exception.Message)(错误代码:$($errorDetails.Exception.HResult))" throw $formattedError } else { throw "无法获取站点信息:$($pnpConnection.Url)" } }
核心要点
2>&1:将错误流(stderr)重定向到标准输出流(stdout),确保所有输出都能被捕获到变量中。- 类型过滤:利用
-is运算符区分成功返回的SecurableObject对象和错误记录ErrorRecord,实现结果与错误信息的分离。 - 自定义异常抛出:由于Get-PnPWeb返回403时仅输出非终止错误,不会触发try/catch,因此需要手动检查错误记录并抛出格式化后的异常,让catch块可以捕获处理。
内容的提问来源于stack exchange,提问作者Craig
相关产品推荐
相关产品推荐

