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

如何解决PowerShell脚本检测Azure VM代理状态时的重复输出问题

解决PowerShell脚本重复输出"All VMs are Ready"的问题

需要编写PowerShell脚本列出运行状态(VM running)且Agent状态为Not Ready的Azure虚拟机,原脚本在无符合条件VM时无输出。添加提示逻辑后,出现与VM数量一致的重复输出"All VMs are Ready",需实现仅输出一次该提示。

原脚本

Set-AzContext -Subscription "MySub"
$WarningPreference = 'SilentlyContinue'
$output = @()
$VMs_running = Get-AzVM  -status | ?{$_.PowerState -eq 'VM running'}

foreach($VM in $VMs_running)
{
    $VM_status = Get-AzVM -ResourceGroupName $VM.ResourceGroupName -Name $VM.Name -Status
    
    $Row = "" | select Name, ResourceGroupName, VMAgent_Status, VMAgent_Version
    $Row.Name = $VM_status.Name
    $Row.ResourceGroupName = $VM_status.ResourceGroupName
    $Row.VMAgent_Status = $VM_status.VMAgent.Statuses.DisplayStatus
    $Row.VMAgent_Version = $VM_status.VMAgent.VmAgentVersion
    if ($Row.VMAgent_Status -ne "Ready"){
      $output += $Row
    }
}

$output

错误原因

修改后的脚本将提示逻辑放在foreach循环的else分支中,每遍历到一个Agent状态为Ready的VM就会执行一次输出,导致重复打印提示内容。

修正后的脚本

Set-AzContext -Subscription "MySub"
$WarningPreference = 'SilentlyContinue'
$output = @()
$VMs_running = Get-AzVM  -status | ?{$_.PowerState -eq 'VM running'}

foreach($VM in $VMs_running)
{
    $VM_status = Get-AzVM -ResourceGroupName $VM.ResourceGroupName -Name $VM.Name -Status
    
    $Row = "" | select Name, ResourceGroupName, VMAgent_Status, VMAgent_Version
    $Row.Name = $VM_status.Name
    $Row.ResourceGroupName = $VM_status.ResourceGroupName
    $Row.VMAgent_Status = $VM_status.VMAgent.Statuses.DisplayStatus
    $Row.VMAgent_Version = $VM_status.VMAgent.VmAgentVersion
    if ($Row.VMAgent_Status -ne "Ready"){
      $output += $Row
    }
}

# 循环结束后统一判断输出逻辑
if ($output.Count -eq 0) {
    Write-Host "All VMs are Ready"
} else {
    $output
}

关键修改说明

  • 移除循环内的else分支,避免每次遇到Ready状态的VM就触发提示输出
  • 循环结束后统一判断:检查$output数组的元素数量,为空时仅输出一次"All VMs are Ready",否则输出筛选出的VM列表

内容的提问来源于stack exchange,提问作者JonH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:23:13