danety 发表于 2023-8-12 07:30

请教:winserver 条件重启应该如何设置?当ping不通局域网内网址时重启


winerver 宿主机 192.168.1.2
openwrt 虚拟机 192.168.1.1
无线AP             192.168.1.3

想在winerver 宿主机上设置,当宿主机ping不通无线AP时,宿主机自动重启,winserver能否创建这样的计划任务?有没有什么软件可以实现此任务?

hayse 发表于 2023-8-12 07:52

# 设置要监控的 IP 地址和重启间隔(以秒为单位)
$targetIP = "192.168.1.1"
$restartInterval = 300# 例如:300 秒 = 5 分钟

# 循环监视并重启计算机
while ($true) {
    $pingResult = Test-Connection -ComputerName $targetIP -Count 1 -ErrorAction SilentlyContinue

    if ($pingResult -eq $null) {
      Write-Host "无法 ping 通 $targetIP,准备重启计算机..."
      Restart-Computer -Force
    } else {
      Write-Host "可以 ping 通 $targetIP,等待 $restartInterval 秒..."
    }

    Start-Sleep -Seconds $restartInterval
}
-----------
要保存这个脚本,可以按照以下步骤操作:

打开记事本或其他文本编辑器。
将上述 PowerShell 脚本粘贴到文本编辑器中。
选择 "文件" > "保存"。
在 "文件名" 字段中输入一个文件名,例如 "AutoRestart.ps1"。
在 "保存类型" 下拉菜单中选择 "所有文件"。
选择一个你喜欢的保存位置,然后点击 "保存"。
保存后,你可以在 PowerShell 中运行这个脚本,或者使用 Windows 计划任务工具来定期运行脚本以实现自动重启。

neavo 发表于 2023-8-12 09:49

本帖最后由 neavo 于 2023-8-12 09:53 编辑

@echo off
        set ip=m.neavo.me

        :FuncMain       
                D:
                cd D:\Batch
                ping %ip% | find "TTL" && goto FuncDone || goto FuncRepeatOne
        exit

        :FuncDone
                set hour=%time:~,2%
                if "%time:~,1%"==" " set hour=0%time:~1,1%
                echo %date:~0,4%%date:~5,2%%date:~8,2%-%hour%%time:~3,2%%time:~6,2% : Done ... >> log\UPSCheck\%date:~0,4%%date:~5,2%%date:~8,2%.txt
        exit

        :FuncRepeatOne
                set hour=%time:~,2%
                if "%time:~,1%"==" " set hour=0%time:~1,1%
                echo %date:~0,4%%date:~5,2%%date:~8,2%-%hour%%time:~3,2%%time:~6,2% : Failed ... >> log\UPSCheck\%date:~0,4%%date:~5,2%%date:~8,2%.txt
               
                timeout /t 300 /nobreak
                ping %ip% | find "TTL" && goto FuncDone || goto FuncRepeatTwo
        exit

        :FuncRepeatTwo
                set hour=%time:~,2%
                if "%time:~,1%"==" " set hour=0%time:~1,1%
                echo %date:~0,4%%date:~5,2%%date:~8,2%-%hour%%time:~3,2%%time:~6,2% : Failed ... >> log\UPSCheck\%date:~0,4%%date:~5,2%%date:~8,2%.txt
               
                timeout /t 300 /nobreak
                ping %ip% | find "TTL" && goto FuncDone || goto FuncShutdown
        exit

        :FuncShutdown
                set hour=%time:~,2%
                if "%time:~,1%"==" " set hour=0%time:~1,1%
                echo %date:~0,4%%date:~5,2%%date:~8,2%-%hour%%time:~3,2%%time:~6,2% : Shutdown ... >> log\UPSCheck\%date:~0,4%%date:~5,2%%date:~8,2%.txt & shutdown /s /t 10
        exit
pause

来个命令行版的

逻辑是ping目标域名/IP,不通的话五分钟重试,重试两次都不通则五分钟后关机,相关操作记录会写入LOG文件,记录相关时间轴

路径和目标域名/IP自己改下应该就能用

danety 发表于 2023-8-12 14:13

hayse 发表于 2023-8-12 07:52
# 设置要监控的 IP 地址和重启间隔(以秒为单位)
$targetIP = "192.168.1.1"
$restartInterval = 300#...

多谢🙏

danety 发表于 2023-8-12 14:14

neavo 发表于 2023-8-12 09:49
来个命令行版的

逻辑是ping目标域名/IP,不通的话五分钟重试,重试两次都不通则五分钟后关机,相关操作 ...

一并感谢

BetaHT 发表于 2023-8-12 17:02

感觉这套逻辑有问题。如果AP关了,自己岂不是会不断重启?

wxlg1117 发表于 2023-8-12 18:11

[偷笑]很多定时关机重启软件有ping网络通断这一选项.

danety 发表于 2023-8-13 08:00

hayse 发表于 2023-8-12 07:52
# 设置要监控的 IP 地址和重启间隔(以秒为单位)
$targetIP = "192.168.1.1"
$restartInterval = 300#...

实际操作中遇到问题,再来请教一下:

在winserver 2022系统下,把这个脚本作为任务计划程序执行了,常规中选了以最高权限运行,但是在实际执行过程中,还是提示“Restart-Computer : 无法重新启动计算机 ,并显示以下错误消息: 没有相应特权”

我用“ Restart-Computer -Force”单独在Windows PowerShell执行也是提示这个错误,如果在以管理员身份运行的Windows PowerShell中执行“ Restart-Computer -Force”,则一切正常,请问脚本里要添加什么命令才能使“ Restart-Computer -Force”以管理员身份运行?

多谢

hayse 发表于 2023-8-13 21:15

# 判断是否以管理员权限运行
if (-not (::GetCurrent()).IsInRole(::Administrator)) {
    # 如果不是管理员,使用Start-Process命令以管理员权限重新运行脚本
    Start-Process powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
    exit
}
-------
脚本开头加上,可能要关UAC
页: [1]
查看完整版本: 请教:winserver 条件重启应该如何设置?当ping不通局域网内网址时重启