vmware workstation Pro 虚拟机设定启停的时间段

比如:早上8点开启,晚上9点关闭某一虚拟机,我在宿主机的windows 计划任务里做了设置,但一开始未起效果,问了一下AI,可能是参数或者路径设置不正确。

我的思路(使用 Windows 计划任务)是极其正确的,完全可以实现。但在实际操作中通常会因为命令格式、路径空格执行权限的问题导致任务没有生效。

VMware 官方提供了一个专门的命令行工具 vmrun.exe,配合计划任务就能完美实现定时开关机。以下是正确的配置方法和排错指南:

第一步:找出你的核心信息

在配置之前,你需要确认两个路径:

  1. vmrun.exe 的路径 :默认通常是 "C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe"(建议带上英文双引号)。

  2. 虚拟机的 .vmx 文件路径 :例如 "D:\VMs\Win10\Win10.vmx"(必须带上英文双引号,特别是路径中有空格时)。

第二步:测试你的开关机命令

在将命令放入计划任务前,建议先按 Win + R 输入 cmd 打开命令提示符,手动测试一下命令是否生效。

  • 启动虚拟机命令:

    XML 复制代码
    "C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" -T ws start "D:\VMs\Win10\Win10.vmx" nogui

    (注:结尾的 nogui 表示在后台静默启动,不会弹出演示界面。如果不加 nogui,则会打开 VMware 界面。)

  • 关闭虚拟机命令:

    XML 复制代码
    "C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" -T ws stop "D:\VMs\Win10\Win10.vmx" soft

    (注:结尾的 soft 表示正常向系统发送关机信号,相当于点击"关机"。前提是虚拟机内必须安装了 VMware Tools 。如果用 hard 则相当于直接拔电源,不推荐。)

第三步:在 Windows 计划任务中正确设置

之前不起作用,大概率是参数填写的格式不对。请按照以下步骤重新配置:

**1.打开任务属性:**常规选项卡.

新建任务(不要选"基本任务"),在"常规"选项卡中,勾选 "不管用户是否登录都要运行" ,并勾选 "使用最高权限运行"

2.设置触发器:

在"触发器"选项卡,新建触发器,设定为每天早上 8:00(或晚上 21:00)。

**3.配置启动操作 (易错点):**操作选项卡.

新建"操作",重点在于如何拆分刚才测试成功的命令:

  • 程序或脚本 (P): 填入 vmrun 的完整路径,包含引号。例如:"C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe"

  • 添加参数 (可选) (A): 填入后半截参数,包含 .vmx 路径的引号。例如:-T ws start "D:\VMs\Win10\Win10.vmx" nogui

4.保存并授权:

点击确定保存。系统会要求你输入当前 Windows 管理员账号的密码,输入并确认即可。

常见失效原因排查

如果你按照上面的步骤设置后,到了时间还是没反应,请检查以下几点:

  1. VMware Tools 缺失 :如果启动正常,但晚上 9 点无法关机 ,100% 是因为虚拟机没有安装 VMware Tools,导致宿主机无法发送 soft (软关机) 指令。

  2. 休眠/睡眠冲突:如果你的宿主机(物理机)在早上 8 点处于休眠或关机状态,计划任务自然无法唤醒它来启动虚拟机。可以在计划任务的"条件"选项卡中,勾选"唤醒计算机运行此任务"。

  3. BIOS/UEFI 锁定 :极少数情况下,如果是开机启动(比如设置为随系统启动),某些杀毒软件会拦截后台无界面 (nogui) 的虚拟机启动行为。

实际应用后发现:

在 Windows 计划任务中,停止能正常执行计划任务,但启动执行不了,提示:0xFFFFFFFF 通常代表程序异常退出、找不到路径,或者遇到了权限/会话隔离问题。既然你在 DOS(命令提示符)里能成功运行,说明命令本身和虚拟机路径都没有问题。

问题出在计划任务的执行环境上。请按照以下四个步骤逐一排查和修改,通常前两步就能解决问题:

1. 严格拆分"程序"与"参数"

很多时候,我们会习惯性地把 DOS 里的整段命令直接粘贴进"程序或脚本"框里,这会导致任务计划程序无法解析。

请双击该任务,进入"操作"选项卡,双击编辑启动操作,严格按照以下方式拆分填入:

  • 程序或脚本 (P): "C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" (注意:一定要保留前后的英文双引号)

  • 添加参数 (可选) (A): -T ws start "D:\VMs\Win10\Win10.vmx" nogui (注意:开头是 -T,虚拟机的路径必须带有双引号)

2. 填写"起始于 (可选)"目录

VMware 的命令行工具在后台运行时,往往需要依赖其安装目录下的其他 DLL 文件。如果不指定工作目录,可能会因为找不到依赖项而直接崩溃(返回 0xFFFFFFFF)。

  • 起始于 (可选) (T): C:\Program Files (x86)\VMware\VMware Workstation\ (注意:这里不需要 加双引号,且最后最好带上反斜杠 \)

3. 解决 Session 0 会话隔离问题(核心权限设置)

VMware Workstation 本质上是桌面级虚拟化软件,不是 ESXi。当你在计划任务的"常规"选项卡中勾选了 "不管用户是否登录都要运行" 时,Windows 会在一个没有图形界面的后台会话 (Session 0) 中执行它。虽然你加了 nogui 参数,但某些版本的 VMware 仍然会在 Session 0 中运行失败。

请进入"常规"选项卡进行以下调整:

  1. 暂时改选为 "只在用户登录时运行"

  2. 确保勾选 "使用最高权限运行"

  3. 手动右键点击该任务,选择"运行"测试一次,看是否能成功拉起。

补充:如果你确实需要服务器重启后、在没有任何用户登录 Windows 的情况下就启动虚拟机,且勾选"不管用户是否登录都要运行"持续报错,可以尝试将运行该任务的账户更改为 SYSTEM 账户。

4. 终极方案:封装为批处理文件 (.bat)

如果上述步骤都设置正确但依然报错 0xFFFFFFFF,可以使用批处理文件来中转,这能解决 99% 的计划任务环境异常问题。

  1. 在 D 盘新建一个文本文档,将你测试成功的 DOS 命令原封不动贴进去:

    复制代码
    "C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" -T ws start "D:\VMs\Win10\Win10.vmx" nogui
  2. 将文件另存为 StartVM.bat(注意编码选择 ANSI,以免中文路径乱码,虽然你的路径是纯英文的)。

  3. 回到计划任务,在"操作"里:

    • 程序或脚本: 填入你的 bat 文件路径,例如 D:\StartVM.bat

    • 参数起始于 全部留空即可。

PS:实际执行中,仍然需要勾选"只在用户登录时进行",否则执行不了。

这个现象在 Windows 系统运维中非常经典,被称为 "Session 0 隔离 (Session 0 Isolation)"

当你勾选"不管用户是否登录都要运行"或使用 SYSTEM 账户时,Windows 会在一个极其严格、完全没有图形界面的后台隐藏会话(Session 0)中运行该任务。VMware Workstation 骨子里是一个桌面级应用程序,即便你加了 nogui 参数,它的底层核心进程(vmware-vmx.exe)在启动时依然会尝试加载当前真实用户的桌面环境和配置文件。一旦找不到,进程就会直接崩溃或挂起,导致任务彻底失败。这就是为什么它必须在真实用户登录后(产生 Session 1 或更高会话)才能成功拉起

既然 Windows 计划任务的这条路被系统底层安全机制堵死了,要实现"服务器重启后无用户登录自动启动虚拟机",我们有以下两种最成熟的解决方案:

方案一:使用 VMware 原生的"自动启动"功能(强烈推荐)

VMware Workstation Pro 官方其实内置了随宿主机开机启动的功能,它是通过注册系统的底层服务(Service)来实现的,能够完美绕过计划任务的限制。

  1. 配置自动启动:

    • 打开 VMware Workstation Pro 主界面。

    • 点击顶部菜单栏的 "文件" (File) -> "配置自动启动虚拟机" (Configure Auto Start VMs...)

    • 在弹出的窗口中,勾选你需要开机启动的虚拟机。建议设置一定的启动延迟(例如 30 秒或 60 秒),避免虚拟机与宿主机的开机服务争抢磁盘和 CPU 资源。

    • 点击确定保存。

  2. 确认服务已开启(关键一步):

    • Win + R 键,输入 services.msc 打开 Windows 服务管理器。

    • 在列表中找到名为 VMware Autostart Service 的服务。

    • 双击该服务,确保它的启动类型 设置为 "自动",并且服务状态为"正在运行"。

只要这个服务正常工作,以后宿主机重启时,无需任何人登录 Windows,虚拟机就会在后台悄悄启动。

方案二:自动登录 + 瞬间锁屏(通用的保底工作流)

如果你的 VMware 版本因为某些原因(例如绿化版、精简版或旧版本)无法使用方案一,你可以使用 IT 圈内应对此类 GUI 软件最经典的 Workaround:让 Windows 开机自动登录触发计划任务,然后瞬间把屏幕锁死,既保障了任务执行,又保障了服务器安全。

步骤 1:设置 Windows 免密自动登录

  1. Win + R 键,输入 netplwiz 并回车。

  2. 取消勾选 "要使用本计算机,用户必须输入用户名和密码" 。(注:如果找不到这个勾选框,说明你的系统开启了 Windows Hello,需要先去"设置" -> "账户" -> "登录选项"中,关闭"为了提高安全性,仅允许对此设备上的 Microsoft 账户使用 Windows Hello 登录")。

  3. 点击"应用",系统会弹窗要求你输入当前管理员账户的密码,输入并确认。

步骤 2:调整你的计划任务

  1. 打开你之前建好的计划任务,在"常规"里,保持勾选 "只在用户登录时运行"

  2. 切换到"触发器"选项卡,将触发条件修改为 "登录时" (At log on)

步骤 3:添加自动锁屏指令保障安全

  1. 切换到"操作"选项卡。你现在应该有一个启动 vmrun 的操作。

  2. 点击"新建",添加第二个操作(确保它排在启动虚拟机之后):

    • 程序或脚本: rundll32.exe

    • 添加参数: user32.dll,LockWorkStation

  3. 保存该计划任务。

最终效果: 服务器意外断电重启后 -> Windows 自动登录管理员账号 -> 触发计划任务 -> 成功启动你的 VMware 虚拟机 -> 在不到 1 秒钟内执行 rundll32 命令 -> 屏幕瞬间锁死,退回到需要输入密码的锁屏界面。 整个过程无需人工干预,且外人无法操作宿主机。

相关推荐
一只鹿鹿鹿1 小时前
三甲综合智慧医院信息化总体解决方案(PPT文件)
大数据·运维·物联网·安全·政务
AI的探索之旅1 小时前
BOM管理的AI自动化:从原理图到采购清单,我搭了一套全自动工具链
运维·人工智能·自动化
组合缺一1 小时前
Solon 的 10 种 HTTP 服务器:改一行依赖,换一个引擎
java·服务器·网络协议·http·solon
PC2005-cloud2 小时前
Windows 下 WSL2 + Docker Desktop + Ubuntu 开发环境搭建指南
windows·ubuntu·docker
Kina_C2 小时前
HAProxy 负载均衡实战:从安装配置到高级参数详解
linux·运维·负载均衡·haproxy
王维同学2 小时前
跨位数进程的映像、命令行与环境块读取
c++·windows·安全
蛊明3 小时前
一台老 ThinkPad 的系统博物馆:Windows、Ubuntu、UOS、Kylin多系统共存方案
windows·ubuntu·kylin
coward913 小时前
千兆以太网卡(Ethernet)驱动初始化完成,但是无法udhcpc获取ip
服务器·网络·嵌入式硬件·tcp/ip
Tyfrank3 小时前
Linux内核收包路径及中断
linux·运维·单片机