Skip to content

Repository files navigation

VMCTL

English

vmctl 是一个基于 Go 的 Windows 命令行工具,用于统一管理本地 VMware Workstation 虚拟机。它将常见的 vmrun.exe 虚拟机与来宾系统操作封装为一套 CLI,同时也支持以 MCP Server 模式对外提供能力。

功能特性

  • 列出受管虚拟机并查看基础运行状态
  • 批量开机、关机、重启虚拟机
  • 创建、列出、删除、回滚快照
  • 在宿主机与来宾系统之间上传、下载文件
  • 在来宾系统中执行脚本、内联命令和本地 EXE
  • 列出、查找、结束来宾系统进程
  • 读取和修改 Windows 来宾系统注册表
  • 以 MCP Server 模式接入 AI Agent

运行要求

  • Windows 宿主机
  • 本地构建需要 Go 1.21+
  • 已安装 VMware Workstation / VMware VIX,并可使用 vmrun.exe
  • 具备足够权限的来宾系统账号

快速开始

  1. 复制示例配置文件:
Copy-Item .\config.yaml.example .\config.yaml
  1. 如果配置中使用了 ${env:...} 占位符,请先设置环境变量:
$env:VM_PASSWORD = "your-password"
  1. 修改 config.yaml,填入本机 VMware 路径和虚拟机清单。

  2. 执行一个基础命令:

go run . list

配置说明

config.yaml.example 展示了支持的配置结构,主要字段如下:

  • vmware.vmrun_pathvmrun.exe 的绝对路径
  • vmware.network_type:支持 host-localnatbridgedcustomnone
  • defaults:全局超时、并发数、来宾临时目录、默认快照策略
  • credentials:默认来宾账号信息
  • vms:虚拟机列表,可为单台虚拟机单独覆盖凭据、快照、描述和标签

凭据字段支持 ${env:VAR_NAME} 语法,例如:

credentials:
  username: "Administrator"
  password: "${env:VM_PASSWORD}"

常用命令

# 列出所有配置的虚拟机
vmctl list

# 启动单台虚拟机
vmctl power on --vm web-server

# 重启除某一台之外的所有虚拟机
vmctl reboot --all --exclude test-client

# 将带有指定标签的虚拟机回滚到快照并自动启动
vmctl snapshot revert --tag production --snapshot baseline --start

# 在来宾系统中执行一条 PowerShell 命令
vmctl exec --vm test-client --inline "hostname" --shell powershell

# 上传文件到来宾系统
vmctl upload --vm test-client --local .\agent.exe --remote C:\Temp\agent.exe

# 从来宾系统下载文件
vmctl download --vm test-client --remote C:\Temp\result.txt --local .\result.txt

# 启动 MCP Server 模式
vmctl mcp --config .\config.yaml

虚拟机选择参数互斥,只能使用其中一种:

  • --vm name1,name2
  • --all
  • --tag tag1,tag2

--exclude 可以和 --all--tag 一起使用。

构建与测试

本地构建:

go build -buildvcs=false -o vmctl.exe .

运行测试:

go test ./...

GitHub Actions

仓库中包含两套 GitHub Workflow:

  • .github/workflows/ci.yml:在 pushpull_request 时执行 gofmt 检查、go vetgo test,并构建 vmctl.exe 作为 artifact 上传
  • .github/workflows/release.yml:在推送符合 v* 规则的标签时自动构建 Windows 发布包、生成 SHA256 校验文件,并创建 GitHub Release

发布示例:

git tag v0.1.0
git push origin v0.1.0

MCP 模式

下面是一个 Claude Desktop 配置示例:

{
  "mcpServers": {
    "vmctl": {
      "command": "vmctl.exe",
      "args": ["mcp"],
      "env": {
        "VM_PASSWORD": "your-password"
      }
    }
  }
}

About

vmware mcp tool

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages