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

很多 VMware 用户管理多台虚拟机时,手动逐台开关效率极低,还容易出现漏开漏关的问题,想批量操作又怕操作失误影响业务。本文整理了两种官方合规的批量开关方案:有 vCenter 或需图形化联动的环境,用 PowerCLI 一行命令一键批量操作;单节点 ESXi 无第三方工具的环境,用原生 vim-cmd 写简单 shell 脚本循环执行。两种方法步骤清晰,新手也能照着操作,高效完成多台虚拟机的批量管理。


一、前置通用准备(两种方案都要做,避坑前提)

  1. 业务风险规避:批量操作前,确认所有待操作虚拟机的业务状态,非维护窗口禁止批量关闭生产业务虚拟机;建议对重要虚拟机提前做快照或备份,避免操作失误。
  2. 权限准备:两种方案都需要使用 ESXi/vCenter 的管理员账号(root 或 vCenter 管理员),确保账号有虚拟机的开机、关机、查询权限。
  3. 环境预检:提前记录待操作虚拟机的名称、ID,可通过 ESXi/vCenter 网页管理界面先确认虚拟机当前状态(开机 / 关机),避免重复操作。

二、方案一:PowerCLI 一键批量操作(有 vCenter/ESXi 图形化环境首选)

PowerCLI 是 VMware 官方推出的 PowerShell 管理模块,无需复杂脚本,一行命令就能完成批量操作,适合有 vCenter 的集群环境,或单节点 ESXi 的 Windows 管理端。

步骤 1:安装 VMware PowerCLI
  1. 在 Windows 管理端打开 PowerShell(以管理员身份运行),执行以下命令安装官方模块:

    复制代码
    Install-Module -Name VMware.PowerCLI -Scope CurrentUser -Force
  2. 安装完成后,执行以下命令跳过证书验证(避免自签名证书导致连接失败):

    复制代码
    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
  • **进阶:按条件筛选批量操作(更实用)**可按虚拟机名称、文件夹、资源池筛选,避免误操作:

    • 按名称关键词筛选(比如批量启动名称含 "测试" 的虚拟机): powershell

      复制代码
      Get-VM -Name "*测试*" | Where-Object {$_.PowerState -eq "PoweredOff"} | Start-VM
    • 按文件夹筛选(vCenter 环境,批量启动 "开发环境" 文件夹下的虚拟机): powershell

      复制代码
      Get-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 服务
  1. 登录 ESXi 网页管理界面,进入【主机】-【操作】-【服务】-【启用安全 Shell (SSH)】
  2. 用 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_LIST="1 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 'NR>1 {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:执行脚本完成批量操作
  1. 给脚本添加执行权限:

    复制代码
    chmod +x /tmp/batch_start.sh
  2. 执行脚本:

    复制代码
    /tmp/batch_start.sh
  3. 观察输出结果,确认所有虚拟机按预期执行操作,操作完成后可通过以下命令再次检查虚拟机状态:

    复制代码
    vim-cmd vmsvc/getallvms

四、新手必看:高频踩坑避坑指南

  1. 批量关闭生产虚拟机:绝对禁止在非维护窗口批量关闭生产业务虚拟机,操作前务必确认虚拟机用途和业务状态。
  2. PowerCLI 未跳过证书验证 :ESXi 默认自签名证书,不跳过验证会导致连接失败,务必先执行Set-PowerCLIConfiguration命令。
  3. vim-cmd 强制断电 :生产环境优先用vim-cmd vmsvc/power.shutdown触发系统正常关机,避免用power.off强制断电导致数据丢失。
  4. 脚本未测试直接执行 :建议先在脚本中添加echo测试命令,确认筛选的虚拟机无误后,再替换为实际的开关命令。
  5. 忽略权限问题:必须用 root 或管理员账号执行操作,普通账号无虚拟机开关权限,会导致命令执行失败。

总结

ESXi/vCenter 批量开关虚拟机的两种方案各有优势:有 vCenter 或 Windows 管理端的环境,优先用 PowerCLI,一行命令就能完成,还能灵活筛选;单节点 ESXi 无第三方工具的环境,用原生 vim-cmd 写简单 shell 脚本,无需额外安装软件,直接在 SSH 界面操作。只要做好前置业务确认和备份,严格按步骤执行,就能高效安全地完成多台虚拟机的批量管理。

相关推荐
m0_747854522 小时前
PHP 中 OR 运算符逻辑误用的典型陷阱与正确写法
jvm·数据库·python
Shorasul2 小时前
JavaScript中Symbol类型的唯一性特征与创建规范
jvm·数据库·python
王仲肖2 小时前
PostgreSQL查询执行阶段 — 总结与执行计划选择指南
数据库·postgresql
解救女汉子2 小时前
Bootstrap Gutters间距用法 Bootstrap 5中g-,gx-,gy--如何使用
jvm·数据库·python
xxjj998a2 小时前
如何安装linux版本的node.js
linux·运维·node.js
2401_887724502 小时前
JavaScript中Object-hasOwn作为现代安全检测方案
jvm·数据库·python
bbq粉刷匠2 小时前
网络基础概念
网络·tcp/ip·计算机网络
qq_334563552 小时前
如何利用RETURNING获取ROWID_更新单行后快速定位物理地址
jvm·数据库·python
zhangchaoxies2 小时前
HTML怎么显示同步最后成功时间_HTML “上次同步:X分钟前”【教程】
jvm·数据库·python