如果用户未登录,则Windows任务重新启动

时间:2018-01-24 17:42:06

标签: powershell scheduled-tasks

我正在尝试为Windows重新启动创建计划任务,如果任何用户未登录则执行该计划任务。如果用户在本地登录或通过RDP登录,则不应重新启动计算机。

对于无条件重启,我在任务计划程序中有以下任务: 操作:“启动程序”,程序/脚本:“powershell”,添加参数:“restart-computer -force”

对于条件重启,我有powershell代码:

$ErrorActionPreference = "Continue"
$userstatus = quser /server:'localhost'
if(!$userstatus){
    Restart-Computer -Force
    }
else{
    exit
    }

当我将脚本保存为.ps1文件并将文件路径作为参数添加到日程表时,我可以使条件重启正常工作。我需要使用多个桌面进行条件重启,并且我希望避免在本地为每台计算机保存.ps1文件。是否可以将整个脚本作为参数传递?

1 个答案:

答案 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"