ESXi/vCenter 批量开关虚拟机完整教程 | PowerCLI 一键 + 原生脚本循环,新手也能落地

张开发
2026/4/17 11:21:36 15 分钟阅读

分享文章

ESXi/vCenter 批量开关虚拟机完整教程 | PowerCLI 一键 + 原生脚本循环,新手也能落地
很多 VMware 用户管理多台虚拟机时手动逐台开关效率极低还容易出现漏开漏关的问题想批量操作又怕操作失误影响业务。本文整理了两种官方合规的批量开关方案有 vCenter 或需图形化联动的环境用 PowerCLI 一行命令一键批量操作单节点 ESXi 无第三方工具的环境用原生 vim-cmd 写简单 shell 脚本循环执行。两种方法步骤清晰新手也能照着操作高效完成多台虚拟机的批量管理。一、前置通用准备两种方案都要做避坑前提业务风险规避批量操作前确认所有待操作虚拟机的业务状态非维护窗口禁止批量关闭生产业务虚拟机建议对重要虚拟机提前做快照或备份避免操作失误。权限准备两种方案都需要使用 ESXi/vCenter 的管理员账号root 或 vCenter 管理员确保账号有虚拟机的开机、关机、查询权限。环境预检提前记录待操作虚拟机的名称、ID可通过 ESXi/vCenter 网页管理界面先确认虚拟机当前状态开机 / 关机避免重复操作。二、方案一PowerCLI 一键批量操作有 vCenter/ESXi 图形化环境首选PowerCLI 是 VMware 官方推出的 PowerShell 管理模块无需复杂脚本一行命令就能完成批量操作适合有 vCenter 的集群环境或单节点 ESXi 的 Windows 管理端。步骤 1安装 VMware PowerCLI在 Windows 管理端打开 PowerShell以管理员身份运行执行以下命令安装官方模块Install-Module -Name VMware.PowerCLI -Scope CurrentUser -Force安装完成后执行以下命令跳过证书验证避免自签名证书导致连接失败Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false步骤 2连接 ESXi/vCenter 服务器执行以下命令连接目标服务器替换 IP 地址、账号和密码Connect-VIServer -Server 192.168.1.100 -User root -Password 你的密码连接成功后会显示服务器信息确认无误后进入批量操作。步骤 3核心批量操作命令批量开机所有关机状态的虚拟机本文核心命令一键启动所有已关机的虚拟机Get-VM | Where-Object {$_.PowerState -eq PoweredOff} | Start-VM若无需筛选直接启动所有虚拟机包括已开机的不影响已运行状态Get-VM | Start-VM批量关机所有开机状态的虚拟机安全关闭虚拟机触发系统正常关机非强制断电跳过确认提示Get-VM | Where-Object {$_.PowerState -eq PoweredOn} | Stop-VM -Confirm:$false若需强制断电关机仅用于测试环境或无业务的虚拟机Get-VM | Where-Object {$_.PowerState -eq PoweredOn} | Stop-VM -Kill -Confirm:$false进阶按条件筛选批量操作更实用可按虚拟机名称、文件夹、资源池筛选避免误操作按名称关键词筛选比如批量启动名称含 “测试” 的虚拟机powershellGet-VM -Name *测试* | Where-Object {$_.PowerState -eq PoweredOff} | Start-VM按文件夹筛选vCenter 环境批量启动 “开发环境” 文件夹下的虚拟机powershellGet-VM -Location 开发环境 | Where-Object {$_.PowerState -eq PoweredOff} | Start-VM步骤 4操作完成后断开连接批量操作结束后执行以下命令断开与服务器的连接Disconnect-VIServer -Server 192.168.1.100 -Confirm:$false三、方案二vim-cmd 脚本循环操作单节点 ESXi 无第三方工具首选vim-cmd 是 ESXi 系统原生自带的命令行管理工具无需安装 PowerCLI无需 Windows 管理端直接在 ESXi 的 SSH 界面写简单 shell 脚本就能批量操作适合无 vCenter 的单节点 ESXi 主机。步骤 1开启 ESXi 的 SSH 服务登录 ESXi 网页管理界面进入【主机】-【操作】-【服务】-【启用安全 Shell (SSH)】用 SSH 工具Xshell、Putty、Windows 自带终端登录 ESXi 主机使用 root 账号和密码。步骤 2获取所有虚拟机的 ID 和名称执行以下命令查看当前 ESXi 主机上所有虚拟机的列表记录待操作虚拟机的 VMID数字 ID或名称vim-cmd vmsvc/getallvms输出结果中第一列是 VMID比如 1、2、3第二列是虚拟机名称后续操作可通过 VMID 或名称执行。步骤 3编写批量操作的 shell 脚本在 ESXi 的 /tmp 目录下创建脚本文件比如批量开机脚本batch_start.sh用 vi 编辑器编辑vi /tmp/batch_start.sh按i键进入编辑模式粘贴以下脚本内容两种方式二选一方式 1按 VMID 列表批量操作更精准推荐替换脚本中的 VMID 列表比如 1、2、3、5仅操作指定 ID 的虚拟机#!/bin/sh # 批量开机脚本替换下方VMID列表为你需要操作的虚拟机ID VMID_LIST1 2 3 5 for VMID in $VMID_LIST; do echo 正在启动虚拟机ID: $VMID vim-cmd vmsvc/power.on $VMID # 若需批量关机将上方命令替换为vim-cmd vmsvc/power.off $VMID安全关机 # 或vim-cmd vmsvc/power.shutdown $VMID触发系统正常关机 done echo 批量操作完成方式 2循环所有虚拟机批量操作适合全量操作无需手动列 ID自动遍历所有虚拟机可添加名称过滤比如排除名称含 “生产” 的虚拟机#!/bin/sh # 批量开机脚本自动遍历所有虚拟机可添加名称过滤 vim-cmd vmsvc/getallvms | awk NR1 {print $1, $2} | while read VMID VMNAME; do # 可选添加名称过滤排除名称含“生产”的虚拟机删除本行则不过滤 if echo $VMNAME | grep -q 生产; then echo 跳过虚拟机: $VMNAME名称含生产 continue fi # 检查虚拟机当前状态仅操作关机状态的 POWER_STATE$(vim-cmd vmsvc/power.getstate $VMID | grep -i off) if [ -n $POWER_STATE ]; then echo 正在启动虚拟机: $VMNAME (ID: $VMID) vim-cmd vmsvc/power.on $VMID else echo 虚拟机 $VMNAME 已开机跳过 fi done echo 批量操作完成编辑完成后按Esc键输入:wq保存并退出编辑器。步骤 4执行脚本完成批量操作给脚本添加执行权限chmod x /tmp/batch_start.sh执行脚本/tmp/batch_start.sh观察输出结果确认所有虚拟机按预期执行操作操作完成后可通过以下命令再次检查虚拟机状态vim-cmd vmsvc/getallvms四、新手必看高频踩坑避坑指南批量关闭生产虚拟机绝对禁止在非维护窗口批量关闭生产业务虚拟机操作前务必确认虚拟机用途和业务状态。PowerCLI 未跳过证书验证ESXi 默认自签名证书不跳过验证会导致连接失败务必先执行Set-PowerCLIConfiguration命令。vim-cmd 强制断电生产环境优先用vim-cmd vmsvc/power.shutdown触发系统正常关机避免用power.off强制断电导致数据丢失。脚本未测试直接执行建议先在脚本中添加echo测试命令确认筛选的虚拟机无误后再替换为实际的开关命令。忽略权限问题必须用 root 或管理员账号执行操作普通账号无虚拟机开关权限会导致命令执行失败。总结ESXi/vCenter 批量开关虚拟机的两种方案各有优势有 vCenter 或 Windows 管理端的环境优先用 PowerCLI一行命令就能完成还能灵活筛选单节点 ESXi 无第三方工具的环境用原生 vim-cmd 写简单 shell 脚本无需额外安装软件直接在 SSH 界面操作。只要做好前置业务确认和备份严格按步骤执行就能高效安全地完成多台虚拟机的批量管理。

更多文章