使用az vm run-command的no-wait模式时如何收集输出?
使用az vm run-command异步执行时收集输出的方法
当然可以收集输出。使用--no-wait参数提交异步任务后,Azure会返回每个命令执行的运行命令ID,你可以通过这个ID后续查询对应VM上的执行状态和输出结果。
具体操作步骤:
异步提交命令:
执行类似如下命令,添加--no-wait参数,同时记录返回的runCommandId:az vm run-command invoke --resource-group <你的资源组> --name <VM名称> --command-id RunShellScript --scripts "<你的脚本内容>" --no-wait(Windows VM请使用
RunPowerShellScript作为命令ID)查询执行结果:
使用记录的runCommandId,执行以下命令获取详细输出:az vm run-command show --resource-group <你的资源组> --name <VM名称> --run-command-id <返回的runCommandId>返回结果中,
properties.output字段包含脚本的完整输出:stdOut对应正常输出内容,stdErr对应错误信息。批量处理建议:
- 批量提交异步命令时,将每个VM对应的
runCommandId、资源组和VM名存储到本地文件或数据库,方便后续批量查询。 - 可编写脚本循环查询所有待处理任务,直到状态变为
Succeeded或Failed后提取输出。 - 结合Azure CLI的
--query参数可直接提取输出内容,示例:az vm run-command show --resource-group <资源组> --name <VM名> --run-command-id <ID> --query "properties.output"
- 批量提交异步命令时,将每个VM对应的
注意事项:
- Azure默认保留运行命令的执行记录90天,在此期间均可查询输出。
- 若VM处于离线状态,异步命令会进入等待状态,待VM恢复在线后自动执行,后续仍可查询结果。
内容的提问来源于stack exchange,提问作者VinceA
相关产品推荐
相关产品推荐

