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

如何使用Azure CLI遍历集合并重启Azure Batch所有节点?

如何用Azure CLI重启Azure Batch池中的所有节点

没问题!用Azure CLI批量重启Batch池里的所有节点其实就是先获取目标池的所有节点ID,再循环遍历执行重启命令。我平时处理这类批量操作的时候,会根据用的终端(Bash/PowerShell)来调整脚本,下面给你详细拆解:

前提准备

首先确保你已经完成:

  • 登录Azure CLI:az login
  • 切换到目标订阅:az account set --subscription <你的订阅ID/名称>
  • 配置好Batch账户的上下文(或者在命令里指定账户、资源组、区域参数):
    az batch account login --name <你的Batch账户名> --resource-group <资源组名> --shared-key-auth
    

方法1:Bash环境下的脚本

直接用Bash的循环语法,结合Azure CLI的输出处理:

# 定义你的Batch池名称
POOL_NAME="你的Batch池名称"

# 获取目标池下所有节点的ID,用tsv格式输出方便遍历
NODE_IDS=$(az batch node list --pool-id $POOL_NAME --query "[].nodeId" --output tsv)

# 循环遍历每个节点,执行重启命令
for NODE_ID in $NODE_IDS; do
    echo "正在重启节点: $NODE_ID"
    az batch node restart --pool-id $POOL_NAME --node-id $NODE_ID
done

如果有些节点正在运行任务,普通重启会失败,可以加上--force参数强制终止任务并重启:

az batch node restart --pool-id $POOL_NAME --node-id $NODE_ID --force

方法2:PowerShell环境下的脚本

PowerShell处理JSON输出更方便,用ConvertFrom-Json解析节点列表:

# 定义你的Batch池名称
$poolName = "你的Batch池名称"

# 获取目标池下所有节点的ID
$nodeIds = (az batch node list --pool-id $poolName --query "[].nodeId" --output json) | ConvertFrom-Json

# 循环遍历每个节点执行重启
foreach ($nodeId in $nodeIds) {
    Write-Host "正在重启节点: $nodeId"
    az batch node restart --pool-id $poolName --node-id $nodeId
}

同样,需要强制重启的话,加上--force参数即可。


小提示

  • 你可以先执行az batch node list --pool-id <池名>查看节点的当前状态,确认哪些节点需要重启
  • 如果批量操作时想跳过某些状态的节点(比如已停止的节点),可以在query参数里加过滤条件,比如只重启处于idle或running状态的节点:
    az batch node list --pool-id $POOL_NAME --query "[?state=='idle' || state=='running'].nodeId" --output tsv
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:40:41