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中的计划任务配置为:
计划任务的内容为:启动powershell程序,执行D:\ups\ups.ps1文件。
powershell的地址为:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
参数为:-File "D:\ups\ups.ps1"
这样配置后,会每隔一分钟去ping 192.168.110.1(路由器地址),如果ping不通的话,就会执行关机操作。
我在配置中,出现了一个问题,就是没有设置脚本延时执行,导致电脑一开机,就马上关机了,因为刚开机的时候,电脑是没网的(在路由器上获取ip地址是需要时间的,这段时间电脑没网),脚本一判断没网,就马上关机了,啥都操作不了。现象就是开机就关机,开机就关机。
如何解决:
进入WinPE:
首先,你需要启动计算机并进入WinPE环境。这通常需要使用一个WinPE启动盘或者通过其他方式加载WinPE。
挂载原系统注册表:
在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.加载后即可编辑
C:
使用注册表编辑器(如regedit)找到并修改
Schedule
服务的启动设置。注册表路径通常为HKLM\aaaaa\ControlSet001\Services\Schedule
(其中aaaaa
是挂载后的注册表项路径)。找到Start
值,将其从2改成4。这里的2代表开机自动运行服务,而4代表开机不运行。解挂注册表并重启:
完成修改后,解挂原系统的注册表文件。
退出WinPE并重启计算机。
重启电脑后,修改脚本名:
进入系统后,是打不开计划任务的,我们直接把D:\ups\ups.ps1这个文件改个名字,然后再改注册表,还是刚才的路径,把4改回2。
最后重启电脑,打开计划任务,将延时开始任务打开,我设置的是15分钟。
改好之后,将脚本名字改回来,就可以了。
win10 system定时任务尚未运行(0x41303)
在 win10 创建定时任务后,一直是 “任务尚未运行(0x41303)” 的状态。这个定时任务是执行一个批处理脚本,最后找到原因,是由于本地安全设置里面,执行批处理脚本的用户不在权限范围内。
1、打开 “本地安全策略 ->安全设置 ->本地策略 ->用户权限分配”
2、在右侧列表双击 “作为批处理作业登录”:
点击 “添加用户或组” 按钮,将执行批处理作业的用户(system)添加进去。
3、修改定时任务属性,勾选 “使用最高权限运行”