You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何捕获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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:18:04