VMware服务一键启停脚本

背景介绍

很多VMware 用户可能都遇到过这样的困扰:即使不使用虚拟机,VMware的多个后台服务也会在开机时自动启动,长期占用系统资源。这些服务包括:

  • VMware Authorization Service
  • VMware DHCP Service
  • VMware NAT Service
  • VMware USB Arbitration Service
  • VMware Workstation Server

此外,VMware相关的网络适配器(VMnet1、VMnet8)也会一直保持活跃状态。尽管通过任务管理器关闭了VMware主程序,这些后台服务依然在悄悄运行,消耗着系统资源。

脚本功能

因此简单编写了以下这个批处理脚本提供了一个简单的解决方案:

  • 智能检测:自动检测当前VMware服务的运行状态
  • 一键切换

    • 如果服务正在运行,一键停止所有服务和网络适配器
    • 如果服务已停止,一键启动所有服务和程序
  • 完全清理:彻底终止所有VMware相关进程
  • 便捷操作:双击以管理员身份执行,无需手动选择
@echo off
setlocal enabledelayedexpansion

REM 设置VMware路径变量
set "VMWARE_PATH=D:\XXX\VMware\vmware.exe"

set "running_count=0"
set "total_services=5"

REM 检查VMware Authorization Service状态
for /f "skip=3 tokens=4" %%i in ('sc query "VMAuthdService"') do set "zt=%%i" & goto :check_auth
:check_auth
if /i "%zt%"=="RUNNING" (
    echo 服务VMware Authorization Service正在运行
    set /a running_count+=1
) else (
    echo 服务VMware Authorization Service已停止
)

REM 检查VMware DHCP Service状态
for /f "skip=3 tokens=4" %%i in ('sc query "VMnetDHCP"') do set "zt=%%i" & goto :check_dhcp
:check_dhcp
if /i "%zt%"=="RUNNING" (
    echo 服务VMware DHCP Service正在运行
    set /a running_count+=1
) else (
    echo 服务VMware DHCP Service已停止
)

REM 检查VMware NAT Service状态
for /f "skip=3 tokens=4" %%i in ('sc query "VMware NAT Service"') do set "zt=%%i" & goto :check_nat
:check_nat
if /i "%zt%"=="RUNNING" (
    echo 服务VMware NAT Service正在运行
    set /a running_count+=1
) else (
    echo 服务VMware NAT Service已停止
)

REM 检查VMware USB Arbitration Service状态
for /f "skip=3 tokens=4" %%i in ('sc query "VMUSBArbService"') do set "zt=%%i" & goto :check_usb
:check_usb
if /i "%zt%"=="RUNNING" (
    echo 服务VMware USB Arbitration Service正在运行
    set /a running_count+=1
) else (
    echo 服务VMware USB Arbitration Service已停止
)

REM 检查VMware Workstation Server状态
for /f "skip=3 tokens=4" %%i in ('sc query "VMwareHostd"') do set "zt=%%i" & goto :check_hostd
:check_hostd
if /i "%zt%"=="RUNNING" (
    echo 服务VMware Workstation Server正在运行
    set /a running_count+=1
) else (
    echo 服务VMware Workstation Server已停止
)

echo 当前有 !running_count! 个VMware服务在运行(共 %total_services% 个)

REM 根据服务状态自动决定启动或停止
if !running_count! GTR 0 (
    echo 检测到VMware服务正在运行,准备停止所有服务...
    
    echo 正在禁用服务...
    net stop "VMAuthdService" 2>nul
    net stop "VMnetDHCP" 2>nul
    net stop "VMware NAT Service" 2>nul
    net stop "VMUSBArbService" 2>nul
    net stop "VMwareHostd" 2>nul
    
    echo 正在禁用网络连接...
    netsh interface set interface "VMware Network Adapter VMnet1" disable 2>nul
    netsh interface set interface "VMware Network Adapter VMnet8" disable 2>nul
    echo 网络连接VMware Network Adapter VMnet1、VMware Network Adapter VMnet8禁用成功
    
    echo 正在结束进程...
    taskkill /F /IM vmware-authd.exe /T 2>nul
    taskkill /F /IM vmnetdhcp.exe /T 2>nul
    taskkill /F /IM vmnat.exe /T 2>nul
    taskkill /F /IM vmware-usbarbitrator64.exe /T 2>nul
    taskkill /F /IM vmware-hostd.exe /T 2>nul
    taskkill /F /IM vmware-tray.exe /T 2>nul
    taskkill /F /IM vmware.exe /T 2>nul
    
    echo VMware服务已全部停止!
) else (
    echo 检测到VMware服务已停止,准备启动所有服务...
    
    echo 正在启用服务...
    net start "VMAuthdService" 2>nul
    net start "VMnetDHCP" 2>nul
    net start "VMware NAT Service" 2>nul
    net start "VMUSBArbService" 2>nul
    net start "VMwareHostd" 2>nul
    
    echo 正在启用网络连接...
    netsh interface set interface "VMware Network Adapter VMnet1" enable 2>nul
    netsh interface set interface "VMware Network Adapter VMnet8" enable 2>nul
    echo 网络连接VMware Network Adapter VMnet1、VMware Network Adapter VMnet8启动成功
    
    echo 正在启动VMware...
    start "" "%VMWARE_PATH%"
    
    echo VMware服务已全部启动!
)

timeout /t 3
exit

使用方法

  1. 复制下载脚本并根据自己的VMware安装路径修改变量VMWARE_PATH
  2. 双击以管理员身份执行
  3. 脚本将自动检测VMware服务状态并执行相应操作

这个脚本特别适合那些像我一样不希望它一直占用系统资源的用户。

你可能感兴趣的:(vmware程序员)