BATCH – 判斷ip+arp是否存在決定是否需要離位自動重開機

起因 : 由於離位後不想讓其他使用者看到電腦使用中的任何資訊 , 又不想對此電腦設定開機密碼 , 藉由系統內建的系統排程的閒置才觸發以下流程
注意 : 平時必須養成隨時存檔的習慣 , 避免離位後強制退出沒有存檔

  1. 系統排程增加流程 , 觸發條件設定閒置 ??  分才執行以下 BATCH 檔案
  2. 藉由手機連線 Wifi 設定固定IP的方式 , 由電腦 ping 3次此 IP(有時候網路不順暢也可能ping 不到造成誤判,目前寫成3次測試一陣子看看) , 判斷是否存在來判斷管理者是否已經離位
    • ping 3 次還是可能 ping 不到實際存在的機器 , 增加 arp 暫存判斷 , arp 系統自動清空才算真的離線
  3. 若 ping 不到則判斷 log 是否有內容
    1. 若無內容 , 寫入時間到 log 檔內 , 強制重開機
    2. 若有內容 , 就維持原狀 (代表已經重開機過 , 避免一直重複重開機)
  4. 相反若是 ping 得到就維持原狀 , 並且清除 log 檔
@echo off
SET log=D:\BATCH\log\自動重開機.txt
SET IP="192.168.1.234"
cd\
c:
ping -n 1 %IP% | find "TTL=" >nul
if errorlevel 1 (
  echo offline1
  ping -n 1 %IP% | find "TTL=" >nul
  if errorlevel 1 (
    echo offline2
    ping -n 1 %IP% | find "TTL=" >nul
    if errorlevel 1 (
      echo offline3
      arp -a | find %IP% >nul
      if errorlevel 1 (
        echo offline_ARP
        For /f %%i in (%log%) do Goto Exist
        echo 紀錄空白
        date /t > %log%
        time /t >> %log%
        rem shutdown -r -f -t 0	
        exit
      ) else (
        echo online_ARP
        echo 紀錄清空
        powershell.exe -ExecutionPolicy Bypass -Command "Clear-Content %log%"
        exit
      )		
    ) else (
      echo online3
      echo 紀錄清空
      powershell.exe -ExecutionPolicy Bypass -Command "Clear-Content %log%"
      exit
    )
  ) else (
    echo online2
    echo 紀錄清空
    powershell.exe -ExecutionPolicy Bypass -Command "Clear-Content %log%"
    exit
  )
) else (
  echo online1
  echo 紀錄清空
  powershell.exe -ExecutionPolicy Bypass -Command "Clear-Content %log%"
  exit
)

:Exist
exit
2019-07-04T22:18:02+08:00