1

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

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

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

2 ответа2

2

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

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 или похожий. Сделайте что-нибудь, на что вы знаете ответы (выполните ручной пинг) и убедитесь, что это не хитрый сайт, который уязвим для простоя. Вы не хотите ваш компьютер перезагружается даром

0

Вот скрипт 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. Удаленный адрес может быть недоступен, что приведет к перезагрузке компьютера

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .