Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Дописать скрипт для процедуры ping и записи в log.txt

Ответить
Настройки темы
VBS/WSH/JS - [решено] Дописать скрипт для процедуры ping и записи в log.txt

Старожил


Сообщения: 157
Благодарности: 3

Профиль | Отправить PM | Цитировать


Всем добрый день!
Существует скрипт на VBS
Код: Выделить весь код
option explicit
' conHost -- адрес хоста для слежения
' conCheckInterval -- временной интервал
const conHost = "192.0.0.22", conCheckInterval = 1000 

' создаём объект:
dim soWshShell : set soWshShell = CreateObject("WScript.Shell")
WScript.Quit Main() 

function WriteLog(strText)
WScript.Stdout.WriteLine FormatDateTime(Time(), vbLongTime) & " " & strText
end function 

function GetHostStatus(strHost)
dim oPing : set oPing = soWshShell.Exec("ping -n 1 " & strHost)
dim strOut : strOut = ""
do
WScript.Sleep 100
if not oPing.Stdout.AtEndOfStream then
strOut = strOut & oPing.Stdout.ReadAll
end if
loop until oPing.Status = 1 

dim oRegExp : set oRegExp = new RegExp
oRegExp.IgnoreCase = true
oRegExp.Pattern = "[^ ]+:.+TTL=[^\r\n]+"
dim oMatches : set oMatches = oRegExp.Execute(strOut)
if oMatches.Count > 0 then
GetHostStatus = oMatches(0).Value
else
GetHostStatus = "Inaccessible!.."
end if
end function 

function Main()
do
WriteLog(GetHostStatus(conHost))
WScript.Sleep(conCheckInterval)
loop
end function
и bat, который запускает этот VBS и файл для записи логов
Код: Выделить весь код
cscript d:\ping\pingtime.vbs > d:\ping\ping.txt
Необходимо что бы в лог. файле кроме врями пингов впереди была еще и дата, т.к запускается на несколько дней для выявлении колизии в сети.

За ранее спасибо!

Отправлено: 15:50, 09-10-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Заменить указанное:
Код: Выделить весь код
WScript.Stdout.WriteLine FormatDateTime(Time(), vbLongTime) & " " & strText
на:
Код: Выделить весь код
WScript.Stdout.WriteLine Now() & " " & strText
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:50, 09-10-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Option Explicit

Dim strHost
Dim lngCheckInterval

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx

Dim objDictionary


'strHost          = "google.com"
strHost          = "192.0.0.22"
lngCheckInterval = 1000

Set objDictionary      = WScript.CreateObject("Scripting.Dictionary")

With objDictionary
	.Add 0,     "Success"
	.Add 11001, "Buffer Too Small"
	.Add 11002, "Destination Net Unreachable"
	.Add 11003, "Destination Host Unreachable"
	.Add 11004, "Destination Protocol Unreachable"
	.Add 11005, "Destination Port Unreachable"
	.Add 11006, "No Resources"
	.Add 11007, "Bad Option"
	.Add 11008, "Hardware Error"
	.Add 11009, "Packet Too Big"
	.Add 11010, "Request Timed Out"
	.Add 11011, "Bad Request"
	.Add 11012, "Bad Route"
	.Add 11013, "TimeToLive Expired Transit"
	.Add 11014, "TimeToLive Expired Reassembly"
	.Add 11015, "Parameter Problem"
	.Add 11016, "Source Quench"
	.Add 11017, "Option Too Big"
	.Add 11018, "Bad Destination"
	.Add 11032, "Negotiating IPSEC"
	.Add 11050, "General Failure"
End With

Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(".", "root\cimv2")

Do
	Set collSWbemObjectSet = objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_PingStatus WHERE Address = '" & strHost & "'")
	
	For Each objSWbemObjectEx In collSWbemObjectSet
		With objSWbemObjectEx
			If Not IsNull(.StatusCode) Then
				WScript.Echo Now(), .Address, .StatusCode, "[" & objDictionary.Item(.StatusCode) & "]", .ResponseTime
			Else
				WScript.Echo Now(), "Error!"
			End If
		End With
		
		Exit For
	Next
	
	Set collSWbemObjectSet = Nothing
	
	WScript.Sleep lngCheckInterval
Loop

Set objSWbemServicesEx = Nothing
Set objSWbemLocator    = Nothing
Set objDictionary      = Nothing

WScript.Quit 0

Отправлено: 18:16, 09-10-2012 | #3


Старожил


Сообщения: 157
Благодарности: 3

Профиль | Отправить PM | Цитировать


Iska,
А подскажи пож-та, что делает второй скрипт и его принцип работы?
Если можно то закоментировать процессы в самом скрипте.
И еще раз большое спасибо))

Да, и еще один вопросик)
Как можно автоматически завершить выполнение приведенного мною скрипта каждый день в 19.00. А шедулер будет запускать батник на следующий день!

Отправлено: 19:22, 09-10-2012 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


zavoruev, примерно то же самое, только без «ping.exe». Принцип работы основан на Wbem, используется класс Win32_PingStatus.

Цитата zavoruev:
Если можно то закоментировать процессы в самом скрипте. »
Ваш вопрос не понятен. Поясните.

Цитата zavoruev:
Как можно автоматически завершить выполнение приведенного мною скрипта каждый день в 19.00. А шедулер будет запускать батник на следующий день!»
Во сколько будет запускать? Если с утра или просто после полуночи — например, так:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim strHost
Dim lngCheckInterval

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx

Dim objDictionary


'strHost          = "google.com"
strHost          = "192.0.0.22"
lngCheckInterval = 1000

Set objDictionary      = WScript.CreateObject("Scripting.Dictionary")

With objDictionary
	.Add 0,     "Success"
	.Add 11001, "Buffer Too Small"
	.Add 11002, "Destination Net Unreachable"
	.Add 11003, "Destination Host Unreachable"
	.Add 11004, "Destination Protocol Unreachable"
	.Add 11005, "Destination Port Unreachable"
	.Add 11006, "No Resources"
	.Add 11007, "Bad Option"
	.Add 11008, "Hardware Error"
	.Add 11009, "Packet Too Big"
	.Add 11010, "Request Timed Out"
	.Add 11011, "Bad Request"
	.Add 11012, "Bad Route"
	.Add 11013, "TimeToLive Expired Transit"
	.Add 11014, "TimeToLive Expired Reassembly"
	.Add 11015, "Parameter Problem"
	.Add 11016, "Source Quench"
	.Add 11017, "Option Too Big"
	.Add 11018, "Bad Destination"
	.Add 11032, "Negotiating IPSEC"
	.Add 11050, "General Failure"
End With

Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(".", "root\cimv2")

Do
	Set collSWbemObjectSet = objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_PingStatus WHERE Address = '" & strHost & "'")
	
	For Each objSWbemObjectEx In collSWbemObjectSet
		With objSWbemObjectEx
			If Not IsNull(.StatusCode) Then
				WScript.Echo Now(), .Address, .StatusCode, "[" & objDictionary.Item(.StatusCode) & "]", .ResponseTime
			Else
				WScript.Echo Now(), "Error!"
			End If
		End With
		
		Exit For
	Next
	
	Set collSWbemObjectSet = Nothing
	
	WScript.Sleep lngCheckInterval
	
	If DateDiff("h", Time(), TimeSerial(20, 0, 0)) = 0 Then
		Exit Do
	End If
Loop

Set objSWbemServicesEx = Nothing
Set objSWbemLocator    = Nothing
Set objDictionary      = Nothing

WScript.Quit 0

Но Вы ведь Выше упоминали, что:
Цитата zavoruev:
запускается на несколько дней »
? Как теперешнее с этим соотносится?!

Отправлено: 19:46, 09-10-2012 | #5


Старожил


Сообщения: 157
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата Iska:
Цитата zavoruev:
Если можно то закоментировать процессы в самом скрипте. »
Ваш вопрос не понятен. Поясните. »
Ну вот примерно так:
Цитата zavoruev:
' conHost -- адрес хоста для слежения
' conCheckInterval -- временной интервал
const conHost = "192.0.0.22", conCheckInterval = 1000
' создаём объект:
dim soWshShell : set soWshShell = CreateObject("WScript.Shell") »
Цитата Iska:
Во сколько будет запускать? Если с утра или просто после полуночи — например, так: »
Запускаться скрипт должен в 9.00 а в 19.00 завершаться. В примере
Код: Выделить весь код
If DateDiff("h", Time(), TimeSerial(20, 0, 0)) = 0 Then
		Exit Do
	End If
я не понял что значит это условие (т.е завершение или наоборот запуск скрипта) и что означают цифры?

Как это условие применимо к моему скрипту???)))

Цитата Iska:
Но Вы ведь Выше упоминали, что:
Цитата zavoruev:
запускается на несколько дней »
? Как теперешнее с этим соотносится?! »
Когда клиентски компьютеры выключены, то нет смысла их пиговать. А скрипт будет запускаться и завершаться в течениии 5 дней, завершение нужно что бы не переполнять текстовый лог. файл.
После 3-х дней работы текстовый файл весил около 20 Мб, что очень много для моей задачи)

Последний раз редактировалось zavoruev, 09-10-2012 в 21:18.


Отправлено: 21:09, 09-10-2012 | #6


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата zavoruev:
Ну вот примерно так: »
Спасибо, ясно. Давайте лучше наоборот: если Вам что-то непонятно — Вы спрашиваете. Как, например, Вы делаете это дальше:
Цитата zavoruev:
В примере … я не понял что значит это условие (т.е завершение или наоборот запуск скрипта) и что означают цифры? »
Код: Выделить весь код
Do
	' … здесь происходит опрос хоста, анализ, вывод результата и пауза заданной длительности.
	
	If DateDiff("h", Time(), TimeSerial(20, 0, 0)) = 0 Then
		Exit Do
	End If
Loop
Если разница в часах между текущим временем и заданным (20 часов) составляет 0 — прерываем цикл.

Здесь я должен принести Вам свои извинения, поскольку ввёл Вас в заблуждение: когда я отлаживал скрипт, я менял значения времени, и, поменяв на 20, забыл вернуть потребные Вам 19; укажите там конечно же «TimeSerial(19, 0, 0)».

Цитата zavoruev:
Как это условие применимо к моему скрипту???))) »
Аналогичным образом.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:51, 09-10-2012 | #7


Старожил


Сообщения: 157
Благодарности: 3

Профиль | Отправить PM | Цитировать


Огромное человеческое спасибо за ответ!!!!

Цитата Iska:
Цитата zavoruev:
Как это условие применимо к моему скрипту???))) »
Аналогичным образом. »
Я хотел спросить, в каком месте моего скрипта должно быть это условие с прерыванием цикла?

Я не пишу скрипты, и очень сложно понять что за чем нужно, по этому и просил про пояснение )))

Цитата zavoruev:
Цитата Iska:
Цитата zavoruev:
Если можно то закоментировать процессы в самом скрипте. » »

Отправлено: 00:56, 11-10-2012 | #8


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата zavoruev:
Я хотел спросить, в каком месте моего скрипта должно быть это условие с прерыванием цикла? »
Для скрипта из первого поста темы:
Код: Выделить весь код
Function Main()
    Do
        WriteLog(GetHostStatus(conHost))
        WScript.Sleep(conCheckInterval)
        
        ' …здесь:
	If DateDiff("h", Time(), TimeSerial(19, 0, 0)) = 0 Then
		Exit Do
	End If
    Loop
End Function
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:07, 11-10-2012 | #9


Старожил


Сообщения: 157
Благодарности: 3

Профиль | Отправить PM | Цитировать


Остался всего один вопросик)))

Что необходимо написать в конце скрипта, что бы после завершения цикла автоматически закрывалось окно cmd.exe?
В батнике это команда exit в окне cmd.exe, а вот что написать в скрипте что бы закрылось окно cmd.exe не знаю)

Отправлено: 11:07, 11-10-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Дописать скрипт для процедуры ping и записи в log.txt

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
MySQL - Дописать в начало строки текст каждой записи в опредленном поле Artem-Samsung Программирование и базы данных 7 02-10-2019 20:22
Любой язык - Как сделать что-бы скрипт игнорировал не нужные ответы Ping root221 Скриптовые языки администрирования Windows 13 02-09-2012 22:28
Дописать php скрипт retabo Вебмастеру 0 17-06-2012 04:07
VBS/WSH/JS - Помогите дописать скрипт (пингует гугл и если не доступен ребутит модем) cRYSMAS Скриптовые языки администрирования Windows 9 25-06-2011 23:34
VBS/WSH/JS - [решено] Помогите дописать скрипт!!! OSArev Скриптовые языки администрирования Windows 1 08-11-2010 21:50




 
Переход