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

获取运行中Azure VM并批量停止的PowerShell脚本异常问题咨询

问题原因
  • 原脚本未正确拉取VM实时运行状态:Get-AzVM默认仅返回VM的基本配置信息,不会返回运行状态,必须添加-Status参数才能获取电源状态属性。
  • 状态匹配逻辑错误:Statuses是数组类型,不能直接用-eq "Running"做等值匹配,Azure VM的运行状态标识为PowerState/running,需要用数组包含逻辑做判断。
  • 循环判断逻辑错误:循环内每次都拉取全量VM的运行状态,只要存在任意一台运行中的VM,就会对当前遍历的所有VM执行停止操作,完全没有校验当前VM的实际状态。
  • 参数传递错误:原脚本调用Stop-AzVM时传入的参数来源错误,会导致资源不匹配的执行异常。
修正后可用脚本
# 拉取所有Azure VM并获取实时运行状态
$allVms = Get-AzVM -Status

foreach ($vm in $allVms) {
    # 判断当前VM是否处于运行状态
    $isRunning = $vm.Statuses.Code -contains "PowerState/running"
    if ($isRunning) {
        Write-Output "正在停止虚拟机:$($vm.Name),所属资源组:$($vm.ResourceGroupName)"
        Stop-AzVM -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name -Force
    }
    else {
        Write-Output "跳过操作:虚拟机 $($vm.Name) 已处于停止状态"
    }
}
优化说明
  • 仅拉取一次VM全量状态,避免循环内重复调用Azure API,降低调用频次提升执行效率
  • 单台VM状态判断准确,仅对运行中的VM执行停止操作
  • 参数取值直接从当前遍历VM对象获取,不会出现资源不匹配问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:15:07