我有一台知道何时停电的主计算机。然后,该主计算机将使用内置的“shutdown /m \computername /s”命令告诉所有工作站通过网络关闭。该主计算机还将使用相同的shutdown /m \\computername /r
机制告诉各个工作站重新启动。
每个工作站都有一个脚本,在执行时会保存所有重要数据。
当被告知通过网络(shutdown /m \\computername /s
或shutdown /m \\computername /r
)关闭或重新启动时,每个工作站都必须执行其脚本。
想法1:
- 使用 WM_QUERYENDSESSION 事件查明何时发生关机/重启。
- 取消关机/重启。
- 运行脚本。
- 继续关机/重启(问题:我看不到确定主计算机是否已发出关机或重启的合理方法。)
想法2:
- 等到shutdown.exe 进程存在。
- 检索该进程的命令行参数
- 杀死那个进程
- 运行脚本。
- 使用检索到的参数运行 shutdown.exe。
问题:shutdown.exe 实际上并没有被执行。即使您在本地运行简单的shutdown -s -t 30
.
理念3:
- 嗅探传入的网络流量。
- 寻找 shutdown -m 数据包
- ...
问题:我不知道正在使用什么协议以及数据包的格式。
想法4:
- 监控事件日志
- 希望它包含有关已发出哪种关闭的信息
问题:我不知道是否以及在哪里记录。
PS:
我不想使用 PsExec。工作站必须自己执行它们的脚本。