Имя пользователя:
Пароль:
 | Правила  

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

Ответить
Настройки темы
VBS/WSH/JS - [решено] Ping с выключением компа

Новый участник


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

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


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

Код: Выделить весь код
option explicit
' conHost -- адрес хоста для слежения
' conCheckInterval -- временной интервал
const conHost = " ip адрес", conCheckInterval = 1000 

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

function WriteLog(strText)
WScript.Stdout.WriteLine Now() & " " & 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)
' Опрос хоста, анализ, вывод результата и пауза заданной длительности ( если разница в часах между текущем временем и заданным (19) составляет 0 - прерывам цикл)
If DateDiff("h", Time(), TimeSerial(19, 0, 0)) = 0 Then
          Exit Do
     End If
loop
end function
Нужно его доработать, что бы он пинговал нужную машину раз в минуту на пример, длительностью к примеру 10 секунд, и если пинг отсутствует в течении допустим 5 минут, то компьютер выключался.

Отправлено: 17:17, 12-07-2013

 

Старожил


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

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


Цитата Iska:
Сюда: »
Очень полезная информация))))

Но всегда должен быть альтернативный метод, при чем он на 90% уже есть!!!
Так ка на счет
Цитата zavoruev:
А куда в код скрипта добавить вот это »
Код: Выделить весь код
' Опрос хоста, анализ, вывод результата и пауза заданной длительности ( если разница в часах между текущем временем и заданным (19) составляет 0 - прерывам цикл)
If DateDiff("h", Time(), TimeSerial(19, 0, 0)) = 0 Then
          Exit Do
     End If

Отправлено: 15:10, 23-07-2013 | #21



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

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


Старожил


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

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



Отправлено: 23:22, 23-07-2013 | #22


Ветеран


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

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


Пробуйте (не проверялось):
читать дальше »
Код: Выделить весь код
Option Explicit

Const lngInterval  = 60 ' seconds
Const lngFrequency = 10 ' every 10 seconds


Dim objDictionary

Dim strAddress

Dim objSWbemServicesEx
Dim objSWbemObjectEx

Dim lngCurrentInterval


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

strAddress = "MyServer" ' or IP address

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

lngCurrentInterval = 0

Do
	For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_PingStatus WHERE Address = '" & strAddress & "'")
		With objSWbemObjectEx
			If Not IsNull(.StatusCode) Then
				WScript.Echo Now(), .Address, .StatusCode, "[" & objDictionary.Item(.StatusCode) & "]", .ResponseTime
				
				If .StatusCode = 0 Then
					lngCurrentInterval = 0
				End If
			Else
				WScript.Echo Now(), .Address, "Error!"
			End If
		End With
	Next
	
	If lngCurrentInterval >= lngInterval Then
		objSWbemServicesEx.Security_.Privileges.AddAsString "SeShutdownPrivilege", True
		
		For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_OperatingSystem")
			objSWbemObjectEx.Reboot
		Next
		
		Exit Do
	End If
	
	WScript.Sleep lngFrequency * 1000
	
	lngCurrentInterval = lngCurrentInterval + lngFrequency
	
	If DateDiff("h", Time(), TimeSerial(23, 30, 0)) = 0 Then
		Exit Do
	End If
Loop

Set objSWbemServicesEx = Nothing

objDictionary.RemoveAll()
Set objDictionary = Nothing

WScript.Quit 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:04, 24-07-2013 | #23


Старожил


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

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


Цитата Iska:
Пробуйте (не проверялось):
читать дальше » »
Не работает, скрипт перестает работать после первого цикла!!!

Отправлено: 16:16, 24-07-2013 | #24


Ветеран


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

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


Цитата zavoruev:
Не работает, скрипт перестает работать после первого цикла!!! »
Не верю. В строке с «DateDiff(…)», конечно, есть ошибка с вычислением. Но и только:
читать дальше »
Код: Выделить весь код
Option Explicit

Const lngInterval  = 60 ' seconds
Const lngFrequency = 10 ' every 10 seconds


Dim objDictionary

Dim strAddress

Dim objSWbemServicesEx
Dim objSWbemObjectEx

Dim lngCurrentInterval
Dim i


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

strAddress = "google.com" ' or IP address

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

lngCurrentInterval = 0
i = 0

Do
	For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_PingStatus WHERE Address = '" & strAddress & "'")
		With objSWbemObjectEx
			If Not IsNull(.StatusCode) Then
				WScript.Echo Now(), .Address, .StatusCode, "[" & objDictionary.Item(.StatusCode) & "]", .ResponseTime
				
				If .StatusCode = 0 Then
					lngCurrentInterval = 0
				End If
			Else
				WScript.Echo Now(), .Address, "Error!"
			End If
		End With
	Next
	
	If lngCurrentInterval >= lngInterval Then
		objSWbemServicesEx.Security_.Privileges.AddAsString "SeShutdownPrivilege", True
		
		For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_OperatingSystem")
			'objSWbemObjectEx.Reboot
		Next
		
		Exit Do
	End If
	
	WScript.Sleep lngFrequency * 1000
	
	lngCurrentInterval = lngCurrentInterval + lngFrequency
	
	If DateDiff("h", Time(), TimeSerial(23, 30, 0)) = 0 Then
		Exit Do
	End If
	
	i = i + 1
	WScript.Echo i
Loop

Set objSWbemServicesEx = Nothing

objDictionary.RemoveAll()
Set objDictionary = Nothing

WScript.Quit 0
Результат
Код: Выделить весь код
24.07.2013 16:52:22 google.com 0 [Success] 79
1
24.07.2013 16:52:32 google.com 0 [Success] 278
2
24.07.2013 16:52:43 google.com 11010 [Request Timed Out] null
3
24.07.2013 16:52:55 google.com 11010 [Request Timed Out] null
4
24.07.2013 16:53:06 google.com 0 [Success] 544
5
24.07.2013 16:53:16 google.com 0 [Success] 73
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:52, 24-07-2013 | #25


Старожил


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

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


Цитата Iska:
Не верю. В строке с «DateDiff(…)», конечно, есть ошибка с вычислением. Но и только: »
А что за ошибка???
Т.к для тестирования я ставил текущее время +5 минут что бы проверить. И после этого скрипт прекращал свою работу, отработав только один цикл.
После Вашего последнего сообщения запустил скрипт с временем 23.30.0 и он работает нормально!!!))

Все дело в том, что сравниваются часы, а не минуты. Вот по этому скрипт и перестает работать!!!

Iska, Вам огромное человеческое спасибо!!!!! Теперь есть 2 способа завершить работу скрипта))))
Тему можно закрывать!!!)

Последний раз редактировалось zavoruev, 24-07-2013 в 17:43.


Отправлено: 17:26, 24-07-2013 | #26


Ветеран


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

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


Цитата zavoruev:
Цитата Iska:
В строке с «DateDiff(…)», конечно, есть ошибка с вычислением. »
А что за ошибка??? »
Цитата zavoruev:
Все дело в том, что сравниваются часы, а не минуты. »
Именно. Только часы. Надо править условие.

Цитата zavoruev:
Вот по этому скрипт и перестает работать!!! »
Это как?

Цитата zavoruev:
Тему можно закрывать!!!) »
Повторю: надо править условие.

Отправлено: 18:18, 24-07-2013 | #27


Старожил


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

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


Цитата Iska:
Цитата zavoruev:
Вот по этому скрипт и перестает работать!!! »
Это как? »
по тому что в
Код: Выделить весь код
If DateDiff
стоит значение
Код: Выделить весь код
H
т.е как я понимаю часы.

А условие такое
Цитата:
Опрос хоста, анализ, вывод результата и пауза заданной длительности ( если разница в часах между текущем временем и заданным (h) составляет 0 - прерывам цикл)
Отсюда и это
Цитата Iska:
Вот по этому скрипт и перестает работать!!! » »

Отправлено: 18:22, 24-07-2013 | #28


Ветеран


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

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


zavoruev, так прерываться-то он должен в 23 часа. У Вас сколько на часах тогда было?

Отправлено: 18:27, 24-07-2013 | #29


Старожил


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

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


Так я же Вам писал)))
Цитата zavoruev:
Т.к для тестирования я ставил текущее время +5 минут что бы проверить. И после этого скрипт прекращал свою работу, отработав только один цикл.
После Вашего последнего сообщения запустил скрипт с временем 23.30.0 и он работает нормально!!!)) »
Надо править условие так, чтобы сравнивались еще и минуты!)))

Отправлено: 18:44, 24-07-2013 | #30



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Службы - Проблема с выключением Rommel Microsoft Windows 8 и 8.1 15 01-12-2012 17:26
Ошибка - [решено] Проблемы с выключением компа Vlaleo Лечение систем от вредоносных программ 6 04-07-2011 12:17
Любой язык - [решено] Запуск файла перед выключением компа. S.T.R.E.L.O.K. Скриптовые языки администрирования Windows 6 04-09-2009 23:14
Проблема с удалённым выключением компа. NetSearcher Microsoft Windows 2000/XP 2 18-05-2007 15:49
проблема с выключением Bright Microsoft Windows 2000/XP 4 28-11-2006 23:15




 
Переход