Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Помогите в создании Bat скрипта (http://forum.oszone.net/showthread.php?t=340116)

fimus 15-04-2019 17:03 2867880

Помогите в создании Bat скрипта
 
Здравствуйте, имеется подключение через vpn к удаленному серверу, по cisco annyconnect, при не активности соединение автоматически разрывается в течении 30 минут. Сейчас имею два скрипта:
Первый запуск подключения
PHP код:

vpncli.exe -<connect.txt 

в файле connect.txt указаны параметры подключения.

Второй отключение
PHP код:

vpncli.exe disconnect 

Возможно ли реализовать скрипт, который при запуске первого скрипта будет пинговать заданный узел раз в 5 минут и в случае если пинг не проходит запускать второй скрипт, для разрыва соединения и после чего вновь первый на подключение.

megaloman 15-04-2019 18:11 2867887

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


fimus 16-04-2019 09:52 2867945

Цитата:

Цитата megaloman
Как вариант »

Благодарю, именно то что нужно, а можно реализовать что бы окно работало фоном?

alpap 16-04-2019 15:00 2867968

Цитата:

Цитата fimus
что бы окно работало фоном »

тут немало разбиралось.

yurfed 16-04-2019 15:53 2867973

fimus, вот только непонятно, зачем вам текстовый файл с параметрами подключения?
Всё это можно прописать в скрипт, предложенный megaloman и при условии дисконнекта, подключаться там же, из скрипта, без необходимости вызывать параметры из второго файла. Или я не прав?

fimus 16-04-2019 16:51 2867986

Цитата:

Цитата yurfed
Или я не прав? »

Думаю что можно, я не очень соображаю как это реализовать и поэтому делаю как мне понятнее. В файле указаны несколько ключей логин и пароль для подключения:

Код:

connect 192.168.100.123
y
1
044*-*
2qwEr@qwe,Q
y
exit


megaloman 16-04-2019 18:05 2867993

Цитата:

Цитата fimus
можно реализовать чтобы окно работало фоном »

Вот .vbs-скрипт. Пропишите пути к Вашим программе и коннект-файлу вместо моих бредовых, и IP
Код:

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 2867999

IP берётся из файла
CMD
Код:

@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 :Begin

vbs
Код:

PRG = "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



Время: 20:13.

Время: 20:13.
© OSzone.net 2001-