排行榜
原创运维中心

windows server ups关机脚本,配置之后开机后马上就关机了

本文阅读 5 分钟
首页 运维中心 正文
广告

ups关机原理:使用windows的计划任务,每隔1分钟,ping路由器的网关地址,ping不通,代表断网了(路由器未接在ups上,如果断电,则路由器会直接停掉),断网即断电,脚本发现ping不通,就执行关机命令。

先贴UPS关机脚本:

D:\ups\ups.ps1


# 定义一个目标IP地址
$targetIP = "192.168.110.1"
# 定义一个无限循环,直到ping通或者执行关机
while ('true') {
    # 执行ping操作,并检查返回的状态码
    $pingResult = Test-Connection -ComputerName $targetIP -Count 1 -ErrorAction SilentlyContinue
    # 如果ping成功,则输出成功信息,并继续下一次循环
    if ($pingResult) {
        Write-Output "$(Get-Date): Ping to $targetIP succeeded."
    } else {
        # 如果ping失败,则输出失败信息并关机
        Write-Output "$(Get-Date): Ping to $targetIP failed. Initiating shutdown..."
        # 调用关机命令,并设置关机原因为“计划维护”
        shutdown /s /t 0 /c "Ping to $targetIP failed, initiating shutdown." /f /d p:4:1
        # 关机命令执行后,脚本会终止,因此不需要break语句
    }
    # 等待60秒,然后再次ping
    Start-Sleep -Seconds 60
}


windows server 2019中的计划任务配置为:

image.png

image.pngimage.png

计划任务的内容为:启动powershell程序,执行D:\ups\ups.ps1文件。

powershell的地址为:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

参数为:-File "D:\ups\ups.ps1"

image.pngimage.png这样配置后,会每隔一分钟去ping 192.168.110.1(路由器地址),如果ping不通的话,就会执行关机操作。


我在配置中,出现了一个问题,就是没有设置脚本延时执行,导致电脑一开机,就马上关机了,因为刚开机的时候,电脑是没网的(在路由器上获取ip地址是需要时间的,这段时间电脑没网),脚本一判断没网,就马上关机了,啥都操作不了。现象就是开机就关机,开机就关机

如何解决:

  1. 进入WinPE

    首先,你需要启动计算机并进入WinPE环境。这通常需要使用一个WinPE启动盘或者通过其他方式加载WinPE。

  2. 挂载原系统注册表:

    在WinPE中,找到并挂载原系统的注册表。这通常涉及到访问原系统盘的\windows\system32\config\目录,并将其中的SYSTEM文件挂载到WinPE的注册表中。例如,如果原系统盘符是C,那么文件路径就是C:\Windows\System32\config\SYSTEM

    WinPE挂载原系统注册表单元:

    1.在winpe系统中,win+r输入regedit,进入注册表

    2.选择HKEY_LOCAL_MACHINE或者HKEY_USERS,然后选择菜单栏——文件——加载配置单元,选择此目录C:\Windows\System32\config下的SYSTEM文件。

    3.C盘为原系统安装盘,如果安装在其他盘请对应选择:

    4.给新挂载的配置单元起一个名字,随便

    5.加载后即可编辑


  3. C

    使用注册表编辑器(如regedit)找到并修改Schedule服务的启动设置。注册表路径通常为HKLM\aaaaa\ControlSet001\Services\Schedule(其中aaaaa是挂载后的注册表项路径)。找到Start值,将其从2改成4。这里的2代表开机自动运行服务,而4代表开机不运行。

  4. 解挂注册表并重启

    完成修改后,解挂原系统的注册表文件。

    退出WinPE并重启计算机。

  5. 重启电脑后,修改脚本名

    进入系统后,是打不开计划任务的,我们直接把D:\ups\ups.ps1这个文件改个名字,然后再改注册表,还是刚才的路径,把4改回2

    image.png

    最后重启电脑,打开计划任务,将延时开始任务打开,我设置的是15分钟。

    image.png

改好之后,将脚本名字改回来,就可以了。



win10 system定时任务尚未运行(0x41303)

在 win10 创建定时任务后,一直是 “任务尚未运行(0x41303)” 的状态。这个定时任务是执行一个批处理脚本,最后找到原因,是由于本地安全设置里面,执行批处理脚本的用户不在权限范围内。

1、打开 “本地安全策略 ->安全设置 ->本地策略 ->用户权限分配”

2、在右侧列表双击 “作为批处理作业登录”:

点击 “添加用户或组” 按钮,将执行批处理作业的用户(system)添加进去。

3、修改定时任务属性,勾选 “使用最高权限运行”


原创文章,作者:大洋哥,如若转载,请注明出处:https://www.unfit.cn/archives/189.html
Nginx添加访问密码
« 上一篇 12-30
CentOS ups 断网自动关机脚本
下一篇 » 02-26
广告