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

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

ZhenyaYa 08-05-2012 12:41 1912426

Сравнение пингов, vbs
 
Здравствуйте! Подскажите, пожалуйста. Я с vbs первый день знаком Так вот, сколотил скрипт, который пингует два ип адреса, и вычисляет разницу между временем ответа, а потом эти данные передает в текстовый документ. Но есть одно но...он делает один запрос и два ип, и соответственно получаем один результат. А нужно чтобы он непрерывно пинговал, вычитал, и записывал каждое значение в блокнот. Я так понимаю, надо куда то влепить цыкл, но какой и куда? или вообще не цикл?
Вот скрипт :

Код:

' Создаем объект Shell
' Объявляем константы

Const wbemFlagForwardOnly = 32
Const wbemFlagReturnImmediately = 16
Const ForWriting = 2

' Функция для записи информации в файл
Sub TextOut (Text, File)
' Объявляем переменные
Dim objFSO, FOut
' Создаем объект FileSystemObject
Set objFSO=WScript.CreateObject("Scripting.FileSystemObject")
' Открываем выходной файл для записи
Set FOut = objFSO.OpenTextFile (File,ForWriting,true)
' Записываем текстовую строку в файл
FOut.WriteLine Text
' Закрываем выходной файл
FOut.Close
End Sub

Set Shell = CreateObject("WScript.Shell")

' Методом EXEC запускаем ping c одним запросом.
Set ping = Shell.exec("ping -n 1 www.google.com")
Set ping2 = Shell.exec("ping -n 1 vk.com")
' Создаем две переменные - в первой находится исходящий поток ping
' во второй собсвенно время отклика
Dim answer: answer = ""
Dim ping_time: ping_time = ""

Dim answer2: answer2 = ""
Dim ping_time2: ping_time2 = ""
' Ждем пока завершится ping (пока ping.Status = 0 утилита ping все еще рабоает)
Do While true
If ping.status = 0 Then
WScript.Sleep 1000
Else
' После завершения работы ping считываем все, что она нам выдает
answer = ping.StdOut.ReadAll
answer2 = ping2.StdOut.ReadAll
Exit Do
End if
Loop

' Тут начинается самая гадкая часть - работа со строками
' К тому же виндовая консоль работает в cp866 а скрипты в cp1251,
' с русским все очень плохо, а как менять кодировку в VBScript я не знаю

' В переменной answer содержится одна строка, но на самом деле их там много
' разделенных символом конца строки
' Вот мы и разбиваем большую строку на массив маленьких
answer = Split(answer, vbCrLf)
answer2 = Split(answer2, vbCrLf)

' четвертый элемент массива answer(3) как раз нужная нам строка
' Разбиваем ее по пробелам - из полученного массива выбираем 6 элемент
' это как раз время=XXXмс
' Дальше обрезаем время= и мс и получем нужную нам переменную ping_time

ping_time = Split(answer(3), " ")(5)
ping_time = Mid(ping_time, 7)
ping_time = Mid(ping_time, 1, Len(ping_time)-2)

ping_time2 = Split(answer2(3), " ")(5)
ping_time2 = Mid(ping_time2, 7)
ping_time2 = Mid(ping_time2, 1, Len(ping_time2)-2)
resoult=ping_time2-ping_time



' Выводим результат в текстовый файл
TextOut resoult, "C:\111.txt"


Iska 08-05-2012 14:10 1912483

ZhenyaYa, ответил здесь.


Время: 08:20.

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