我正在尝试为Windows重新启动创建计划任务,如果任何用户未登录则执行该计划任务。如果用户在本地登录或通过RDP登录,则不应重新启动计算机。
对于无条件重启,我在任务计划程序中有以下任务: 操作:“启动程序”,程序/脚本:“powershell”,添加参数:“restart-computer -force”
对于条件重启,我有powershell代码:
$ErrorActionPreference = "Continue"
$userstatus = quser /server:'localhost'
if(!$userstatus){
Restart-Computer -Force
}
else{
exit
}
当我将脚本保存为.ps1文件并将文件路径作为参数添加到日程表时,我可以使条件重启正常工作。我需要使用多个桌面进行条件重启,并且我希望避免在本地为每台计算机保存.ps1文件。是否可以将整个脚本作为参数传递?
答案 0 :(得分:0)
你的逻辑有点偏。如果您打算为每台PC创建计划任务,它应该如下所示:
$Users = quser.exe
If ($Users -match 'No\sUser') { Restart-Computer -Force }
从这里开始,由于语法的原因,您应对其进行编码,然后您可以利用schtasks.exe
来创建任务:
[Convert]::ToBase64String(
[Text.Encoding]::Unicode.GetBytes(
"If(@(quser.exe) -match 'no\suser'){Restart-Computer -Force}"
)
)
输出:
SQBmACAAKABAACgAcQB1AHMAZQByAC4AZQB4AGUAKQAgAC0AbQBhAHQAYwBoACAAJwBuAG8AXABzAHUAcwBlAHIAJwApAHsAUgBlAHMAdABhAHIAdAAtAEMAbwBtAHAAdQB0AGUAcgAgAC0ARgBvAHIAYwBlAH0A
schtasks.exe /Create /TN AutoRestart /SC DAILY /ST 20:00 /RU SYSTEM /TR "powershell.exe -EncodedCommand SQBmACAAKABAACgAcQB1AHMAZQByAC4AZQB4AGUAKQAgAC0AbQBhAHQAYwBoACAAJwBuAG8AXABzAHUAcwBlAHIAJwApAHsAUgBlAHMAdABhAHIAdAAtAEMAbwBtAHAAdQB0AGUAcgAgAC0ARgBvAHIAYwBlAH0A"