Показать полную графическую версию : Помогите в создании Bat скрипта
Здравствуйте, имеется подключение через vpn к удаленному серверу, по cisco annyconnect, при не активности соединение автоматически разрывается в течении 30 минут. Сейчас имею два скрипта:
Первый запуск подключения
vpncli.exe -s <connect.txt
в файле connect.txt указаны параметры подключения.
Второй отключение
vpncli.exe disconnect
Возможно ли реализовать скрипт, который при запуске первого скрипта будет пинговать заданный узел раз в 5 минут и в случае если пинг не проходит запускать второй скрипт, для разрыва соединения и после чего вновь первый на подключение.
megaloman
15-04-2019, 18:11
fimus, откуда берётся ip для пинга? В connect.txt он указан? Каким образом?
Как вариант@Echo Off
Set "IP=192.168.100.123"
Set /A Sec=300
:Begin
Ping %IP% |Find "TTL=" >nul 2>&1 && (TIMEOUT /T %Sec% /NOBREAK &GoTo :Begin)
vpncli.exe disconnect
vpncli.exe -s <connect.txt
GoTo :Begin
Как вариант »
Благодарю, именно то что нужно, а можно реализовать что бы окно работало фоном?
что бы окно работало фоном »
тут (http://forum.oszone.net/post-1387812.html) немало разбиралось.
fimus, вот только непонятно, зачем вам текстовый файл с параметрами подключения?
Всё это можно прописать в скрипт, предложенный megaloman и при условии дисконнекта, подключаться там же, из скрипта, без необходимости вызывать параметры из второго файла. Или я не прав?
Или я не прав? »
Думаю что можно, я не очень соображаю как это реализовать и поэтому делаю как мне понятнее. В файле указаны несколько ключей логин и пароль для подключения:
connect 192.168.100.123
y
1
044*-*
2qwEr@qwe,Q
y
exit
megaloman
16-04-2019, 18:05
можно реализовать чтобы окно работало фоном »HostName = "192.168.100.123"
mSec = 300000
PRG = "C:\Windows\System32\notepad.exe"
Con = "Z:\Soft_IN\connect.txt"
Set FSO = CreateObject("Scripting.FileSystemObject")
NotFile FSO,PRG
NotFile FSO,Con
Comm1 = "CMD /C """ + PRG + """ disconnect"
Comm2 = "CMD /C """ + PRG + """ -s <""" + Con + """"
Set WShell = CreateObject("WScript.Shell")
Do
Set Ping = GetObject("winmgmts:").Get("Win32_PingStatus.Address='" & HostName & "'")
If Ping.StatusCode = 0 Then
WScript.Sleep mSec
Else
OutRun = WShell.Run(Comm1, 7, True)
OutRun = WShell.Run(Comm2, 7, True)
End If
Loop
WScript.Quit 0
Sub NotFile(FSO,f)
If Not FSO.FileExists(f) Then
MsgBox "File" + vbCrLf + f + vbCrLf + "not found"
WScript.Quit 2
End If
End Sub Если не поленюсь, переделаю скрипты, чтобы IP брался из файла.
Скрипт можно убить только из диспетчера задач (wscript.exe)
megaloman
16-04-2019, 19:18
@Echo Off
Set "Prg=vpncli.exe"
Set "Con=connect.txt"
Set "IPkey=connect"
Set /A Sec=300
FOR /F "usebackq tokens=1,2 delims= " %%i IN ("%Con%") DO If /I "%IPkey%"=="%%i" Set "IP=%%j"
:Begin
Ping %IP% |Find "TTL=" >nul 2>&1 ||(
"%Prg%" disconnect
"%Prg%" -s <"%Con%"
GoTo :Begin
)
TIMEOUT /T %Sec% /NOBREAK
GoTo :BeginPRG = "C:\Windows\System32\notepad.exe"
Con = "Z:\Soft_IN\connect.txt"
IPkey = "connect"
mSec = 300000
Comm1 = "CMD /C """ + PRG + """ disconnect"
Comm2 = "CMD /C """ + PRG + """ -s <""" + Con + """"
Set FSO = CreateObject("Scripting.FileSystemObject")
NotFile FSO, PRG
NotFile FSO, Con
With FSO.OpenTextFile(Con, 1, False)
AllTxt = .ReadAll
.Close
End With
Mas = Split(AllTxt, vbCrLf)
Set Alls = Nothing
For Each iMas In Mas
HostName = LCase(Replace(iMas, " ", ""))
If InStr(HostName, LCase(IPkey)) = 1 Then
HostName = Replace(HostName, LCase(IPkey), "")
Exit For
End If
Next
Set Mas = Nothing
' MsgBox HostName
Set WShell = CreateObject("WScript.Shell")
Do
Set Ping = GetObject("winmgmts:").Get("Win32_PingStatus.Address='" & HostName & "'")
If Ping.StatusCode = 0 Then
WScript.Sleep mSec
Else
OutRun = WShell.Run(Comm1, 7, True)
OutRun = WShell.Run(Comm2, 7, True)
End If
Loop
WScript.Quit 0
Sub NotFile(FSO, f)
If Not FSO.FileExists(f) Then
MsgBox "File" + vbCrLf + f + vbCrLf + "not found"
WScript.Quit 2
End If
End Sub
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.