VMware Copy Paste Enabler - 夜莺博客

VMware Copy Paste Enabler

原文:VMware Copy Paste Enabler — theDXT (Daniel Keer)

Something that has annoyed me with VMware when compared to Hyper-V is the fact that Hyper-V lets you paste into the VM console. By default VMware has that disabled but you can manually enable it. Doing that is kind of slow so I wrote a script with PowerCLI to enable copy paste on a VM.

In order to make everything work you’ll need VMware PowerCLI Installed (here’s how to do that)

The script makes the changes that VMware listed here (https://kb.vmware.com/s/article/57122)

The script also checks if the VM is currently running if it is it turns if off then makes the changes and turns it back on.

If the VM is off the script just makes the changes.

I’ve only tested this with VCSA 7.

Before running the script just edit the variable vm_Name to reflect the name of the VM you want to enable copy paste on. After that it’s just a matter of connecting to VCSA and running the script.

Here’s a link to the script hosted on my GitHub https://github.com/thedxt/VMware#vm-copy-paste-enabler

为什么 VMware 控制台默认不允许复制粘贴

VMware 把控制台(Console)当成一条“带外管理通道”,出于安全考虑,默认关闭了客户机与客户端之间的剪贴板共享和拖拽。背后的开关是一组以 isolation.tools 开头的虚拟机高级参数:只要它们保持 TRUE,你从本机复制一段命令,就无法粘进虚拟机的控制台窗口,只能靠打字或者先在客户机里挂载 ISO、走网络传输。Hyper-V 在这一点上确实更贴心,这也是原文作者写这个 PowerCLI 脚本的原因。

需要明确的是:修改这组参数只影响“控制台/远程控制台窗口”的剪贴板通道,不是修改客户机内部的剪贴板功能。要让复制粘贴真正可用,还必须有下面两个前提之一:客户机装好了 VMware Tools(Windows)或 open-vm-tools(Linux),或者使用 WebMKS / 新版网页控制台(这类控制台自带剪贴板同步,但参数字段仍需打开)。

方案一:手工修改 vSphere / ESXi 的虚拟机高级参数

在 vSphere Client 里选中虚拟机 → 操作 → 编辑设置 → 虚拟机选项 → 高级 → 编辑配置,添加下面四项(键值必须是大写 FALSE / TRUE):

isolation.tools.copy.disable        FALSE
isolation.tools.paste.disable       FALSE
isolation.tools.dnd.disable         FALSE
isolation.tools.setGUIOptions.enable TRUE

其中 setGUIOptions.enable 负责把开关下发给客户端控制台,缺了它常常出现“参数明明改了,控制台里还是粘不进去”的情况。改完这些参数必须让虚拟机彻底关机再开机(在客户机里“重启操作系统”不生效,因为高级参数在开机时读取),这也是原文脚本要先把机器关掉的原因。

如果你更习惯命令行,可以直接用 esxcli 或 PowerCLI 下发同样的配置,不必逐个点界面:

# PowerCLI
Connect-VIServer -Server vcsa.lab.local -User administrator@vsphere.local
$vm = Get-VM -Name "WIN2019-01"
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$spec.extraConfig += New-Object VMware.Vim.OptionValue -Property @{key="isolation.tools.copy.disable";value="FALSE"}
$spec.extraConfig += New-Object VMware.Vim.OptionValue -Property @{key="isolation.tools.paste.disable";value="FALSE"}
$spec.extraConfig += New-Object VMware.Vim.OptionValue -Property @{key="isolation.tools.dnd.disable";value="FALSE"}
$spec.extraConfig += New-Object VMware.Vim.OptionValue -Property @{key="isolation.tools.setGUIOptions.enable";value="TRUE"}
$vm.ExtensionData.ReconfigVM($spec)

方案二:原文的 PowerCLI 脚本(批量场景更省事)

原文脚本做的事非常清楚:读取脚本顶部变量 vm_Name 指定的虚拟机名称,判断当前电源状态——如果虚拟机正在运行,先执行关机,写入上面那几个 isolation.tools 参数,再把机器开起来;如果本来就关着,则只写参数。它的价值在于把“关机 → 改配置 → 开机”这一串容易漏步的操作固定成一条命令,尤其适合给一批测试虚拟机统一打开剪贴板。

使用步骤:先安装 VMware PowerCLI(Install-Module -Name VMware.PowerCLI -Scope CurrentUser),把脚本下载到本地,用记事本或 VS Code 修改 vm_Name,然后连接 vCenter 并运行。作者只在 VCSA 7 上做过验证,其他版本理论上兼容,但建议先用测试机跑一遍。

# 安装 PowerCLI 并运行脚本
Install-Module -Name VMware.PowerCLI -Scope CurrentUser
Connect-VIServer -Server vcsa.lab.local -User administrator@vsphere.local
# 编辑脚本中的 $vm_Name 后执行
.\Enable-VMCopyPaste.ps1

方案三:VMware Workstation / Player 的 .vmx 文件

桌面版 VMware 没有 vSphere 那套“高级参数”界面,直接改虚拟机的 .vmx 配置文件即可。关闭虚拟机(不是挂起),找到虚拟机目录里的 xxx.vmx,用文本编辑器加入或修改这几行,保存后重新开机:

isolation.tools.copy.disable = "FALSE"
isolation.tools.paste.disable = "FALSE"
isolation.tools.dnd.disable = "FALSE"
isolation.tools.setGUIOptions.enable = "TRUE"

这三条正好对应 Workstation 菜单里的“虚拟机 → 设置 → 选项 → 客户机隔离”,界面上勾选“启用复制和粘贴”“启用拖放”其实就是往 .vmx 里写这几个键值。如果界面勾选无效或者你想统一分发配置模板,直接编辑文件更可靠。

客户机侧:装好 VMware Tools 或 open-vm-tools

参数开关打开,客户机里没有工具集照样粘不进去。Windows 客户机安装 VMware Tools(Workstation 自带镜像,ESXi 从 vCenter 的虚拟机菜单挂载)后重启;Linux 客户机建议直接用发行版仓库里的 open-vm-tools,比手工编译官方版省事:

# Debian / Ubuntu(桌面环境要装 desktop 包才有剪贴板与拖放支持)
sudo apt update
sudo apt install -y open-vm-tools open-vm-tools-desktop
sudo systemctl enable --now open-vm-tools

# RHEL / CentOS / Rocky
sudo dnf install -y open-vm-tools open-vm-tools-desktop
sudo systemctl enable --now vmtoolsd

# 查看工具集状态
systemctl status vmtoolsd --no-pager
vmtoolsd --version

无桌面的最小化 Linux 只需 open-vm-tools 即可使用控制台剪贴板,open-vm-tools-desktop 是给图形界面加拖放和分辨率自适应用的。

验证与常见问题

  • 参数改了但控制台还是粘不进去:绝大多数是没做“完全关机再开机”。挂起恢复、客户端里 reboot 都不会重新读取高级参数。
  • 能复制粘贴但不能拖放文件:检查 isolation.tools.dnd.disable 是否也置为 FALSE,并且客户机安装了带 GUI 支持的 Tools。
  • 只有网页控制台可用:HTML5 / WebMKS 控制台使用浏览器的剪贴板 API,需要浏览器授权“读取剪贴板”,并且在 HTTPS 页面下才生效。
  • 大段文本粘贴不全:控制台剪贴板通道对单次传输量有限制,几百行配置建议改走 SSH、共享文件夹或复制到 ISO 挂载。
  • Windows 里粘贴的是历史内容:先清空 Win+V 剪贴板历史,避免误粘贴到旧命令。
  • 多台虚拟机要批量开启:把原文脚本的 vm_Name 换成 Get-VM -Name "TEST-*" 的循环写法即可,注意错开维护窗口,因为每台都会经历一次关机。

安全提醒

剪贴板通道打开后,本机与虚拟机之间的数据流是双向的。如果虚拟机是用来分析可疑样本或访问不可信站点的,建议保持默认关闭,或者只在需要时临时开启、用完再关;跨安全域的跳板机、堡垒机环境同样应当关闭复制粘贴与拖放,避免敏感内容被带入带出。

动手前的检查清单

  • 确认你拥有虚拟机的关机权限,生产机器请安排维护窗口,避免直接断电式关机。
  • 确认客户机已安装 VMware Tools 或 open-vm-tools,并处于正常运行状态。
  • 记下改动前的参数值,方便随时还原;批量操作前先导出一台虚拟机的 .vmx 或配置作为备份。
  • 修改后做一次完整关机、开机,再用一小段文本测试复制与粘贴两个方向。
  • 如果只是临时需要粘贴一段长命令,优先考虑 SSH 或共享文件夹,比打开剪贴板通道更安全。

相关阅读

虚拟化网络部分的配套配置可以看 VMware ESXi vSwitch:Port Groups、VLAN ID 与 Teaming;如果你同时在用开源虚拟化平台,可参考 Proxmox VE 网络:VLAN-Aware Bridge 与 LACP Bond;虚拟机上跑存储业务时的排查思路见 在 VMware 环境中排查 HPE 3PAR 存储问题。