Hello! 欢迎来到盒子萌!

windows使用bat脚本重启easytier服务


avatar
dspirit 2025-01-07 47

[每天记录一个问题,记录十年 Blog]

问题:

使用easytier进行异地组网mstsc时,运行一段时间后会莫名网关消失,导致远程失败,重启服务后状态正常

1、临时性解决方案如下:

A. 新建一个bat脚本,填入内容,远程失败时双击执行即可:

# 脚本已放入_unable_to_sync下同名文件中
@echo off
chcp 65001 >nul
REM 设置控制台为UTF-8编码

REM 通过尝试访问系统文件检测是否具有管理员权限
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM 根据错误代码判断权限状态
if '%errorlevel%' NEQ '0' (
    REM 无管理员权限,执行提权操作
    goto UACPrompt
) else ( 
    REM 已有管理员权限,继续执行
    goto gotAdmin 
)

:UACPrompt
REM 创建VBScript脚本用于提权
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"

REM 执行提权脚本
"%temp%\getadmin.vbs"
exit /B

:gotAdmin
REM 清理临时提权脚本文件
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )

REM 定义服务名称变量
set SERVICE_NAME=EasyTierService

REM 检查服务是否存在
sc query "%SERVICE_NAME%" >nul 2>&1
if %errorlevel% neq 0 (
    echo [错误] 服务 "%SERVICE_NAME%" 不存在!
    goto :end
)

REM 获取服务当前状态
for /f "tokens=4" %%i in ('sc query "%SERVICE_NAME%" ^| findstr "STATE"') do set SERVICE_STATE=%%i

REM 根据服务状态执行相应操作
if "%SERVICE_STATE%"=="RUNNING" (
    echo [信息] 服务 "%SERVICE_NAME%" 当前正在运行,正在停止...
    net stop "%SERVICE_NAME%"
    echo [信息] 正在重新启动服务...
    net start "%SERVICE_NAME%"
    echo [成功] 服务重启完成!
) else if "%SERVICE_STATE%"=="STOPPED" (
    echo [信息] 服务 "%SERVICE_NAME%" 当前已停止,正在启动...
    net start "%SERVICE_NAME%"
    echo [成功] 服务启动完成!
) else (
    echo [警告] 服务 "%SERVICE_NAME%" 当前状态未知: %SERVICE_STATE%
    echo [信息] 尝试重新启动服务...
    net stop "%SERVICE_NAME%" >nul 2>&1
    net start "%SERVICE_NAME%"
)

:end
REM 暂停以便查看输出结果
echo.
echo 按任意键退出...
pause >nul

2、补充解决办法:

使用管理员cmd添加手动10.0.0.0网关永久路由(本机虚拟IP10.0.0.4时):

route -p add 10.0.0.0 mask 255.255.255.0 10.0.0.4 metric 261

使用命令删除永久路由:

route delete  10.0.0.2

相关阅读