Показать полную графическую версию : [решено] Ping с выключением компа
zavoruev
23-07-2013, 15:10
Сюда: »
Очень полезная информация)))) :) :) :)
Но всегда должен быть альтернативный метод, при чем он на 90% уже есть!!!
Так ка на счет
А куда в код скрипта добавить вот это »
' Опрос хоста, анализ, вывод результата и пауза заданной длительности ( если разница в часах между текущем временем и заданным (19) составляет 0 - прерывам цикл)
If DateDiff("h", Time(), TimeSerial(19, 0, 0)) = 0 Then
Exit Do
End If :mail1:
zavoruev
23-07-2013, 23:22
:up: :up: :up:
Пробуйте (не проверялось):
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
zavoruev
24-07-2013, 16:16
Пробуйте (не проверялось):
читать дальше » »
Не работает, скрипт перестает работать после первого цикла!!!
Не работает, скрипт перестает работать после первого цикла!!! »
Не верю. В строке с «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
zavoruev
24-07-2013, 17:26
Не верю. В строке с «DateDiff(…)», конечно, есть ошибка с вычислением. Но и только: »
А что за ошибка???
Т.к для тестирования я ставил текущее время +5 минут что бы проверить. И после этого скрипт прекращал свою работу, отработав только один цикл.
После Вашего последнего сообщения запустил скрипт с временем 23.30.0 и он работает нормально!!!))
Все дело в том, что сравниваются часы, а не минуты. Вот по этому скрипт и перестает работать!!!
Iska, Вам огромное человеческое спасибо!!!!! Теперь есть 2 способа завершить работу скрипта))))
Тему можно закрывать!!!)
В строке с «DateDiff(…)», конечно, есть ошибка с вычислением. »
А что за ошибка??? »
Все дело в том, что сравниваются часы, а не минуты. »
Именно. Только часы. Надо править условие.
Вот по этому скрипт и перестает работать!!! »
Это как?
Тему можно закрывать!!!) »
Повторю: надо править условие.
zavoruev
24-07-2013, 18:22
Цитата zavoruev:
Вот по этому скрипт и перестает работать!!! »
Это как? »
по тому что в If DateDiff стоит значение H т.е как я понимаю часы.
А условие такое Опрос хоста, анализ, вывод результата и пауза заданной длительности ( если разница в часах между текущем временем и заданным (h) составляет 0 - прерывам цикл)
Отсюда и это
Вот по этому скрипт и перестает работать!!! » »
zavoruev, так прерываться-то он должен в 23 часа. У Вас сколько на часах тогда (http://forum.oszone.net/post-2189835.html#post2189835) было?
zavoruev
24-07-2013, 18:44
Так я же Вам писал)))
Т.к для тестирования я ставил текущее время +5 минут что бы проверить. И после этого скрипт прекращал свою работу, отработав только один цикл.
После Вашего последнего сообщения запустил скрипт с временем 23.30.0 и он работает нормально!!!)) »
Надо править условие так, чтобы сравнивались еще и минуты!)))
zavoruev, давайте так: от скольки и до скольки скрипт не должен работать ни в коем случае?
zavoruev
24-07-2013, 20:07
zavoruev, давайте так: от скольки и до скольки скрипт не должен работать ни в коем случае? »
Уважаемы Iska, вот в этом сообщении http://forum.oszone.net/post-2189885-26.html я Вас поблагодарил за Ваши труды!!! и мучения со мной)))
Доработать условие попробую сам! Если не получится, то обязательно сообщу!)))
Еще раз огромное спасибо!! :good:
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.