如何捕获PowerShell中New-AzResourceGroupDeployment的WhatIf输出
捕获New-AzResourceGroupDeployment的WhatIf输出方案
首先需要澄清:你猜测的WhatIf在后台运行独立进程的判断有误,该内容无法直接捕获的核心原因是WhatIf输出默认写入PowerShell的信息流(流编号6),而非标准输出流,因此默认的变量赋值、管道操作无法直接获取对应内容。
以下是两种常用的捕获方案:
方案1:捕获结构化结果(推荐)
Az.ResourceManager模块v4.2.0及以上版本支持直接返回结构化的WhatIf运算结果,无需解析文本,更适合封装脚本做二次逻辑判断:
$whatIfResult = New-AzResourceGroupDeployment ` -Name 'test' ` -ResourceGroupName 'rg-test' ` -TemplateFile .\main.bicep ` -TemplateParameterFile .\parameters\parameters.json ` -WhatIf ` -WhatIfResultFormat FullResourcePayloads
返回的$whatIfResult对象包含所有待变更资源的列表、变更类型、属性差异等结构化数据,可直接遍历或做规则校验。
方案2:捕获纯文本输出
如果仅需要获取和控制台打印一致的文本内容,可以使用PowerShell流重定向语法,将对应流的内容重定向到标准输出流后存入变量:
# 捕获包含Verbose、WhatIf在内的所有控制台输出文本 $allOutput = New-AzResourceGroupDeployment ` -Name 'test' ` -ResourceGroupName 'rg-test' ` -TemplateFile .\main.bicep ` -TemplateParameterFile .\parameters\parameters.json ` -Verbose ` -WhatIf *>&1 # 仅捕获WhatIf输出,排除Verbose内容 $whatIfText = New-AzResourceGroupDeployment ` -Name 'test' ` -ResourceGroupName 'rg-test' ` -TemplateFile .\main.bicep ` -TemplateParameterFile .\parameters\parameters.json ` -WhatIf 6>&1
说明:6>&1代表将编号为6的信息流内容重定向到标准输出流,*>&1代表将所有流的内容重定向到标准输出流。
内容的提问来源于stack exchange,提问作者Alexander Schmidt
相关产品推荐
相关产品推荐

