我创建了一个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