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

如何通过定义资源组变量自动获取VM详情并批量禁用Azure VM自动关机

批量禁用指定资源组内所有Azure VM的自动关机

需求说明

需要编写PowerShell脚本,仅通过定义资源组名称数组,自动遍历每个资源组内的所有VM,批量禁用它们的自动关机选项,替代原脚本中手动指定VM名称的方式。

修改后的脚本

# 登录Azure账户
Connect-AzAccount

# 定义目标资源组数组
$resourceGroups = @("RG-Test1", "RG-Test2")

$shutdownTime = "0000"
$shutdownTimeZone = "India Standard Time"
$subscriptionId = (Get-AzContext).Subscription.Id

# 遍历每个资源组
foreach ($rg in $resourceGroups) {
    # 获取当前资源组下的所有VM
    $vmsInRG = Get-AzVM -ResourceGroupName $rg

    # 遍历当前资源组内的每台VM
    foreach ($vm in $vmsInRG) {
        # 构造自动关机配置属性
        $properties = @{
            "status" = "Disabled"
            "taskType" = "ComputeVmShutdownTask"
            "dailyRecurrence" = @{"time" = $shutdownTime }
            "timeZoneId" = $shutdownTimeZone
            "notificationSettings" = @{
                "status" = "Disabled"
                "timeInMinutes" = 0
            }
            "targetResourceId" = $vm.Id
        }

        # 拼接自动关机计划的资源ID
        $shutdownResourceId = "/subscriptions/{0}/resourceGroups/{1}/providers/microsoft.devtestlab/schedules/shutdown-computevm-{2}" -f $subscriptionId, $rg, $vm.Name

        # 更新自动关机配置
        New-AzResource -ResourceId $shutdownResourceId -Location $vm.Location -Properties $properties -Force
    }
}

关键改动说明

  • 移除手动定义的VM名称数组,改用Get-AzVM -ResourceGroupName $rg自动获取目标资源组内的所有VM
  • 使用嵌套foreach循环:外层遍历资源组,内层遍历该组下的VM,彻底避免原脚本中资源组与VM索引绑定的局限性
  • 提前获取并缓存订阅ID,减少重复调用Get-AzContext的开销
  • 直接使用$vm对象的内置属性(Id、Name、Location),避免重复查询相同VM信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:10:29