Skip to content

VMware Fusion 命令行完全指南:用 vmcli 无界面管理虚拟机

vCenter 模板克隆示意图

为什么需要命令行管理?

在日常开发或运维中,我们经常需要:

  • 远程管理:通过 SSH 连接服务器,无需打开图形界面
  • 资源节约:减少 GUI 资源占用,让 macOS 运行更流畅
  • 批量操作:同时管理多台虚拟机

VMware Fusion 从 12.x 版本开始引入了 vmcli 命令行工具,成为官方推荐的 CLI 管理方式。

环境准备

1. 确认 VMware Fusion 版本

通过 VMWare Fusion -> 关于 VMWare Fusion 来查看版本信息

要求:Fusion 12.0+ 或 Fusion Pro 13.0+

2. 确认 vmcli 可用

bash
# 检查 vmcli 是否在 PATH 中
which vmcli

# 查看帮助
vmcli --help

如果提示命令不存在,可以创建软链接:

bash
sudo ln -s /Applications/VMware\ Fusion.app/Contents/Public/vmcli /usr/local/bin/vmcli

3. 找到虚拟机配置文件 (.vmx)

虚拟机配置文件通常位于:

bash
~/Documents/Virtual Machines.localized/

每个虚拟机都是一个 .vmwarevm 文件夹,内部的 .vmx 文件就是核心配置文件。

基础操作指南

定义虚拟机路径变量(避免重复输入)

~/.zshrc~/.bashrc 中添加:

bash
export UBUNTU_VMX="$HOME/Virtual Machines.localized/Ubuntu 22.04.vmwarevm/Ubuntu 22.04.vmx"

路径注意事项

  • 不要使用 ~,要用 $HOME 或绝对路径
  • 路径中的空格要用引号包裹
  • 如果包含特殊字符,可能需要转义

1. 启动虚拟机(无界面)

bash
# 前台启动(会显示进度)
vmcli $UBUNTU_VMX Power Start

# 后台启动(推荐)
vmcli $UBUNTU_VMX Power Start &> /dev/null &

2. 查询虚拟机状态

bash
vmcli $UBUNTU_VMX Power query

输出示例

PowerState: on
cleanShutdown: false
isGuestRebooted: true
isSoftReset: false
powerTypeForPowerOff: soft
powerTypeForPowerOn: soft
powerTypeForReset: soft
powerTypeForSuspend: soft

3. 关闭虚拟机

bash
# 优雅关机(推荐)
vmcli $UBUNTU_VMX Power Stop -o trySoft

# 强制关机(相当于拔电源)
vmcli $UBUNTU_VMX Power Stop -o hard

# 严格要求 VMware Tools 配合关机
vmcli $UBUNTU_VMX Power Stop -o requireSoft

注意

VMware 这个命令工具的 --help 文档存在错误!它显示参数是数字 <2, 3, 1, 0>,但实际传参必须使用字符串枚举值(trySofthard 等)。传数字会报错:Invalid argument: '0', valid enums are: trySoft, requireSoft, configDefault, hard

参数说明

枚举值行为适用场景
trySoft先尝试 VMware Tools 软关机,失败则回退 ACPI(推荐)日常关机,数据安全
requireSoft严格要求 VMware Tools 关机,失败则报错确保 Guest 配合关机
hard立即断电,不通知 Guest OS系统无响应时强制关机
configDefault使用虚拟机的默认配置(实测无效)不推荐使用

注意

VMWare Fusion 这个 vmcli 命令工具设计的跟他妈屎一样!

验证关机结果

bash
# 执行关机
vmcli $UBUNTU_VMX Power Stop -o trySoft

# 查询状态确认
vmcli $UBUNTU_VMX Power query
# PowerState: off
# cleanShutdown: true  ← true 表示正常关机,false 表示异常断电

4. 挂起/恢复虚拟机

bash
# 正常挂起(推荐)
vmcli $UBUNTU_VMX Power Suspend -o trySoft

# 强制挂起(不通知 Guest OS)
vmcli $UBUNTU_VMX Power Suspend -o hard

# 严格要求 VMware Tools 配合挂起
vmcli $UBUNTU_VMX Power Suspend -o requireSoft

注意

同样的问题:--help 显示参数是数字,但实际传参必须使用字符串枚举值(trySofthard 等)。

参数说明

枚举值行为适用场景
trySoft尝试 VMware Tools 软挂起,失败则回退(推荐)日常挂起,快速恢复
requireSoft严格要求 VMware Tools 挂起,失败则报错确保 Guest 配合挂起
hard立即挂起,不通知 Guest OS系统无响应时强制挂起
configDefault使用虚拟机的默认配置(实测无效)不推荐使用

从挂起状态恢复

bash
# 直接使用 Power Start 即可恢复
vmcli $UBUNTU_VMX Power Start

验证挂起是否成功

bash
# 挂起后查询状态
vmcli $UBUNTU_VMX Power query
# PowerState: suspended  ← 表示已挂起

# 恢复后再次查询
vmcli $UBUNTU_VMX Power query
# PowerState: on  ← 表示已恢复运行

实际测试结果

bash
# 挂起前状态
vmcli $UBUNTU_VMX Power query
# PowerState: on

# 执行挂起
vmcli $UBUNTU_VMX Power Suspend -o trySoft

# 挂起后状态
vmcli $UBUNTU_VMX Power query
# PowerState: suspended

使用场景

bash
# 下班前挂起,节省资源
vmcli $UBUNTU_VMX Power Suspend -o trySoft

# 第二天上班恢复,秒级启动
vmcli $UBUNTU_VMX Power Start

注意事项

  • 挂起状态会占用磁盘空间(相当于虚拟机内存大小)
  • 相比关机,挂起后恢复速度极快(3-5 秒)
  • 不建议长期挂起,定期重启虚拟机更健康
  • cleanShutdown: false 是正常的,挂起不算正常关机

5. 重启虚拟机

bash
# 软重启(推荐)
vmcli $UBUNTU_VMX Power Reset -o trySoft

# 硬重启(立即重启,不通知 Guest OS)
vmcli $UBUNTU_VMX Power Reset -o hard

# 严格要求 VMware Tools 配合重启
vmcli $UBUNTU_VMX Power Reset -o requireSoft

注意

同样的问题:--help 显示参数是数字,但实际传参必须使用字符串枚举值(trySofthard 等)。传数字会报错:Invalid argument: '2', valid enums are: trySoft, requireSoft, configDefault, hard

参数说明

枚举值行为适用场景
trySoft先尝试 VMware Tools 软重启,失败则回退(推荐)日常重启,数据安全
requireSoft严格要求 VMware Tools 重启,失败则报错确保 Guest 配合重启
hard立即重启,不通知 Guest OS系统无响应时强制重启
configDefault使用虚拟机的默认配置(实测无效)不推荐使用

验证重启结果

bash
# 执行软重启
vmcli $UBUNTU_VMX Power Reset -o trySoft

# 查询状态确认
vmcli $UBUNTU_VMX Power query
# PowerState: on
# isSoftReset: true  ← true 表示是软重启

实际测试结果

bash
# 重启前查询状态
vmcli $UBUNTU_VMX Power query
# PowerState: on
# cleanShutdown: false
# isGuestRebooted: false
# isSoftReset: false

# 执行软重启
vmcli $UBUNTU_VMX Power Reset -o trySoft

# 重启后查询状态
vmcli $UBUNTU_VMX Power query
# PowerState: on
# isSoftReset: true  ← 确认是软重启

故障排查

问题 1:路径不存在或变量未解析

现象

vmcli: VMX : '~/path/to/vm.vmx' does not exist!

解决方案

  • 不要用 ~,要用 $HOME
  • 正确示例:export VMX="$HOME/path/to/vm.vmx"

问题 2:vmcli 命令找不到

解决方案

bash
# 方法一:创建软链接
sudo ln -s /Applications/VMware\ Fusion.app/Contents/Public/vmcli /usr/local/bin/vmcli

# 方法二:添加到 PATH
export PATH="/Applications/VMware Fusion.app/Contents/Public:$PATH"
# 将上面这行加到 ~/.zshrc 或 ~/.bashrc

# 验证
which vmcli
vmcli --version

参考资源

命令速查表

操作正确命令
启动vmcli $VMX Power Start
查询状态vmcli $VMX Power query
正常关机vmcli $VMX Power Stop -o trySoft
强制关机vmcli $VMX Power Stop -o hard
软重启vmcli $VMX Power Reset -o trySoft
硬重启vmcli $VMX Power Reset -o hard
正常挂起vmcli $VMX Power Suspend -o trySoft
强制挂起vmcli $VMX Power Suspend -o hard
从挂起恢复vmcli $VMX Power Start
获取 IPvmcli $VMX Guest getipaddress

总结

通过 vmcli 命令行工具,我们可以:

  • 终端访问 - 无需打开 GUI,通过 SSH 即可操作
  • 批量操作 - 同时管理多台虚拟机
  • 资源节约 - 减少图形界面资源占用
  • 灵活控制 - 支持启动/停止/挂起/重启等完整生命周期管理

掌握这些技巧后,你的 VMware Fusion 使用效率将大大提升!

最后更新2026/07/24 16:19
如果你觉得这篇文章有帮助,或者想聊聊技术、工作,欢迎通过下面方式联系我:
contact fishfinal