如何捕获错误错误错误:权限不足,无法完成操作.在Powershell Azure Devops管道中



我创建了一个Azure Devops管道,并创建了在ServiceConnection上下文中运行的Powershell脚本。此服务连接是Azure ServicePrincipal。

$groupName =  "ABC"
$res = (az ad group list --display-name $groupName)
Write-Host "Response " $res

当我执行管道时,我得到这个错误消息

错误:权限不足,无法完成操作。

但是$res为null。

如何在powershell代码中捕获此错误消息?

看起来错误已写入stderr,因此如果您想检查错误消息,请使用重定向运算符2>&1:将stderr重定向到标准输出

$stdout, $stderr = (az ad group list --display-name $groupName 2>&1).Where({$_ -is [string]}, 'Split') 
if( $stderr -like '*Insufficient privileges to complete the operation*' ) {
# Handle the error
}
  • 使用重定向运算符2>&1,错误流(又名stderr(被合并到成功流(又名stdout,因此我们可以以统一的方式处理它们
  • 使用组运算符(…),从流中创建临时数组
  • 使用内在.Where()方法,我们根据流类型将此数组拆分为两个变量
  • 如果有任何消息写入stdout,则$stdout变量是字符串数组
  • 如果有任何消息写入stderr,则$stderr变量是ErrorRecord的数组
  • 当LHS参数是一个仅输出匹配元素的集合时,-like运算符充当过滤器。如果有任何匹配的元素,结果将转换为$true,否则将转换为布尔上下文中的$false
  • PowerShell在使用字符串比较运算符-like时自动将ErrorRecord转换为string

最新更新