我有同样的问题,我到处搜索,但没有找到任何有用的东西。
最终,我开始乱搞我能想到的不同的东西。对于我们的问题,我可以想到两种解决方法。
事件查看器可以告诉您已安排关闭,但不能告诉您安排的时间。
一种想法是向事件查看器查询最近的系统关闭、最近的计划关闭和计划关闭的最近取消。如果计划的关闭比最近的取消或关闭更近,则有一个正在进行中。事件 ID 为:1074 表示已启动的计划关机,1075 表示取消的计划关机,在 Windows 日志/系统下 12 用于系统启动 13 用于系统关闭(全部在 Windows 日志/系统下)
我懒得在批处理文件中执行此操作,但我知道这是可能的。
所以这就是我最终做的事情:与其安排关机,不如尝试中止它。如果没有正在进行的关机,它将引发错误(无法中止系统关机,因为没有正在进行关机。(1116))。我认为比通过安排关机来吓坏用户要好得多。
这是我为一个简单的自动关机脚本编写的代码副本,它在取消和启动预定关机之间切换。
@echo off
shutdown /a
if errorlevel 1 call:shutdown
goto end
:shutdown
set /p choice=Shutdown in how many minutes?
set /a mod=60
set /a mod*=%choice%
shutdown /s /t %mod%
:end
编辑- 我正在重新审视这个答案,因为我有更多信息要添加。
上述解决方案将检测是否已通过使用 /t 参数的 shutdown.exe 命令安排关机。
如果您需要确定 Windows 是否已安排关机(就像在某些 Windows 更新后自动执行的那样),那么您可以查询一个已设置的注册表项。以下是在 PowerShell 中,但您可以编写一个批处理文件来执行相同的操作。
Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending'
注意:如果使用shutdown.exe计划重启,这将不会返回true,只有当Windows说您的计算机需要重启时才会返回true。