Здравствуйте, оказался в не легком положении.
Имею машины с Windows 7 которые подключаются через OPEN VPN, у шлюза есть Fail Over, если упадет первый оператор, Mikrotik сменит на другой. Скрипт каждые 10 минут проверяет доступность первого шлюза, если он не доступен, заменяет конфиг файл на резервный, все отлично, но есть одна проблема, для того чтобы конфиг вступил в силу, нужно перезагрузить службу OpenVPN. Внедрил в службу команду на стоп старт через net, но если запуск скрипта осуществляет планировщик задач, то Access denied, а если скрипт запустить вручную, то все работает.
На компах только локальный администратор и планировщик запускает скрипт от имени админа.
Буду рад любой помощи.
Сам скрипт
spoiler@setlocal enableextensions enabledelayedexpansion
@echo off
set ipaddr1= Основной_ИП
set state1=down
for /f "tokens=5,7" %%a in ('ping -n 1 !ipaddr1!') do (
if "x%%a"=="xReceived" if "x%%b"=="x1," set state1=up
)
echo.Main is !state1!
for /f "tokens=5,7" %%a in ('ping -n 1 !ipaddr1!') do (
if "x%%a"=="xReceived" if "x%%b"=="x1," set state1=up
)
echo.Main is !state1!
for /f "tokens=5,7" %%a in ('ping -n 1 !ipaddr1!') do (
if "x%%a"=="xReceived" if "x%%b"=="x1," set state1=up
)
echo.Main is !state1!
set ipaddr2= Резервный_ип
set state2=down
for /f "tokens=5,7" %%a in ('ping -n 1 !ipaddr2!') do (
if "x%%a"=="xReceived" if "x%%b"=="x1," set state2=up
)
echo.Backup is !state2!
for /f "tokens=5,7" %%a in ('ping -n 1 !ipaddr2!') do (
if "x%%a"=="xReceived" if "x%%b"=="x1," set state2=up
)
echo.Backup is !state2!
for /f "tokens=5,7" %%a in ('ping -n 1 !ipaddr2!') do (
if "x%%a"=="xReceived" if "x%%b"=="x1," set state2=up
)
echo.Backup is !state2!
if %state1% NEQ up (
if %state2% NEQ up (
echo.No internet
echo.Do nothing
) else (
echo.Backup is working
fc "c:\Program Files\OpenVPN\config\client.ovpn-резерв" "c:\Program Files\OpenVPN\config\client.ovpn" > nul
if !ERRORLEVEL! EQU "0" (
echo.Continiue to use backup line
) else (
copy "c:\Program Files\OpenVPN\config\client.ovpn-резерв" "c:\Program Files\OpenVPN\config\client.ovpn"
ipconfig /flushdns
net stop OpenVPNService & net start openvpnservice
echo.Backup line activated
)
)
) else (
echo.Main is working
fc "c:\Program Files\OpenVPN\config\client.ovpn-основной" "c:\Program Files\OpenVPN\config\client.ovpn" > nul
if !ERRORLEVEL! EQU 0 (
echo.Continiue to use main line
) else (
copy "c:\Program Files\OpenVPN\config\client.ovpn-основной" "c:\Program Files\OpenVPN\config\client.ovpn"
ipconfig /flushdns
net stop OpenVPNService & net start openvpnservice
echo.Main line activated
)
)
endlocal