Автоматически перезагружать Windows8, если нет интернет-активности

У меня есть медиасервер, расположенный в очень неудобной части моего дома. Иногда мне приходится сбрасывать настройки маршрутизатора, иначе он сам себя сбросит. Проблема в том, что ПК по какой-то причине теряет связь, и я вынужден идти снаружи, по дому, в подвал, над кучей игрушек, гирь и коробок, нажимая кнопку, чтобы перезагрузить его.

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

Есть идеи, как это сделать?

3 ответа

Пакетный файл:

ping 192.168.1.1
IF ERRORLEVEL 1 SHUTDOWN -R -T 00

Powershell:

if (!(Test-Connection 192.168.1.1 -quiet)) {Restart-Computer -Force}

VBScript:

 If Reachable("192.168.1.1") Then
  WScript.Run("shutdown -r -t 00")
 End If

 Function Reachable(strComputer)
  Dim wmiQuery, objWMIService, objPing, objStatus
  wmiQuery = "Select * From Win32_PingStatus Where Address = '" & strComputer & "'"

  Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
  Set objPing = objWMIService.ExecQuery(wmiQuery)

  For Each objStatus in objPing
      If IsNull(objStatus.StatusCode) Or objStatus.Statuscode<>0 Then
          Reachable = False 'if computer is unreacable, return false
      Else
          Reachable = True 'if computer is reachable, return true
      End If
  Next
 End Function

Любой из них может быть запланирован для работы в качестве задачи на подходящем для вас интервале - если он запланирован для работы с "самыми высокими привилегиями", он сможет преодолеть любые потенциальные проблемы с UAC.

Имейте в виду, что это только проверяет подключение к вашему маршрутизатору. Возможно, стоит заменить IP-адрес на такой, как www.google.com или похожий. Сделайте что-нибудь, на что вы знаете ответы (выполните ручной пинг), и убедитесь, что это не хитрый сайт, уязвимый для простоя. Вы не хотите ваш компьютер перезагружается даром

Вот скрипт PowerShell, который сделает это. Просто запустите его как запланированное задание так часто, как вы хотите. Он использует Restart-Computer, вам может понадобиться -forceв зависимости от обстоятельств. Проверьте ссылку для вариантов.

If (!(Test-Connection 192.168.20.199 -quiet)) {
    #Write-Host "Not connected"
    Restart-Computer
}
Else {
    #Write-Host "Connected"
}

Я включил полное утверждение If/Else, однако вы можете сделать это в одной строке. Полный If/Else дает вам возможность делать больше, если это необходимо. Вот 1 вкладыш:

if (!(Test-Connection 192.168.20.199 -quiet)) {Restart-Computer}

Если вы не можете пропинговать свой маршрутизатор при сбое, используйте адрес вашего маршрутизатора в скрипте. Это был бы лучший вариант. Вы можете протестировать сайт, как yahoo.com. Проблема с тестированием внешнего сайта заключается в том, что:

  1. Удаленный адрес должен принимать пинг
  2. Удаленный адрес может быть недоступен, что приведет к перезагрузке компьютера

Вот мой ответ на это. Я даже нашел способ запустить скрипт с помощью планировщика задач в Windows и запустить его с задержкой после запуска.

Содержимое пакетного файла:

@Echo выключено: перезагрузка

ping google.com ЕСЛИ "%ERRORLEVEL%"=="1" SHUTDOWN -R -T 00

перейти к перезагрузке

Проверьте настройку планировщика задач здесь:https://www.youtube.com/watch?v=NAEfNHjyoLw.

Другие вопросы по тегам