New-AzResourceGroupDeployment加-Verbose后不触发终止错误如何解决
问题复现前提
运行以下代码前已经全局设置$ErrorActionPreference = 'Stop'
可触发终止错误的代码示例
try { $deploy = New-AzResourceGroupDeployment ` -ResourceGroupName $resourceGroupName ` @templateParameters } catch { "printed" }
添加-Verbose后错误变为非终止错误的示例
try { $deploy = New-AzResourceGroupDeployment ` -ResourceGroupName $resourceGroupName ` @templateParameters ` -Verbose # added verbose switch } catch { "not printed" }
解决方法
该现象是Azure PowerShell模块中New-AzResourceGroupDeployment cmdlet的特有行为,添加-Verbose后会修改内部错误处理逻辑,将原本的终止错误转为非终止错误,导致try/catch无法捕获。要同时保留Verbose日志输出和命令的终止错误触发特性,只需要给对应cmdlet显式指定-ErrorAction Stop参数即可,该参数优先级高于全局$ErrorActionPreference设置,也不受-Verbose带来的内部逻辑变更影响。
修复后的代码示例
try { $deploy = New-AzResourceGroupDeployment ` -ResourceGroupName $resourceGroupName ` @templateParameters ` -Verbose ` -ErrorAction Stop # 新增显式错误行为配置 } catch { "printed" # 此处可添加自定义错误处理逻辑 }
批量简化配置方案
如果需要多次调用该cmdlet,不想每次都重复添加-ErrorAction Stop参数,可以通过PowerShell默认参数值功能全局配置:
# 仅对New-AzResourceGroupDeployment生效,不影响其他命令 $PSDefaultParameterValues['New-AzResourceGroupDeployment:ErrorAction'] = 'Stop' # 后续调用直接加-Verbose即可正常触发终止错误 try { $deploy = New-AzResourceGroupDeployment ` -ResourceGroupName $resourceGroupName ` @templateParameters ` -Verbose } catch { "printed" }
内容的提问来源于stack exchange,提问作者4c74356b41
相关产品推荐
相关产品推荐

