【问题标题】:Find out when shutdown -s is being executed找出何时执行 shutdown -s
【发布时间】:2017-03-09 21:24:19
【问题描述】:

我有一台知道何时停电的主计算机。然后,该主计算机将使用内置的“shutdown /m \computername /s”命令告诉所有工作站通过网络关闭。 该主计算机还将使用相同的shutdown /m \\computername /r 机制告诉各个工作站重新启动。

每个工作站都有一个脚本,执行时会保存所有重要数据。

当被告知通过网络(shutdown /m \\computername /sshutdown /m \\computername /r)关闭或重新启动时,每个工作站都必须执行其脚本。

想法1:

  • 使用 WM_QUERYENDSESSION 事件查明何时发生关机/重启。
  • 取消关机/重启。
  • 运行脚本。
  • 继续关机/重启(问题:我没有找到合理的方法来确定主计算机是否已发出关机或重启。)

想法2:

  • 等到shutdown.exe进程存在。
  • 检索该进程的命令行参数
  • 杀死该进程
  • 运行脚本。
  • 使用检索到的参数运行 shutdown.exe。

问题:shutdown.exe 实际上并没有被执行。即使您在本地运行一个简单的shutdown -s -t 30,也不会。

想法3:

  • 嗅探传入的网络流量。
  • 寻找关闭 -m 数据包
  • ...

问题:我不知道正在使用什么协议以及数据包的格式。

想法4:

  • 监控事件日志
  • 希望它包含有关已发出何种关闭的信息

问题:我不知道是否会记录以及在哪里记录。

PS:
我不想使用 PsExec。工作站必须自己执行脚本。

【问题讨论】:

  • 最好在超级用户和/或服务器故障中询问
  • 我的问题非常具体到编程。
  • 如果这是关于编程,为什么不编写自己的关机协议,由安装在所有机器上的特定 .exe 实现,而不是使用 shutdown.exe 呢?
  • 因为要使用官方的shutdown /m接口。
  • 为什么不把idea 1和idea 2结合起来呢?您可以确定关机是否是由主计算机发送的,因为如果它是由主计算机发送的,shutdown.exe 将不会出现。这是一个有点粗略的解决方案,但它可能会奏效。编辑:这是一条评论,因为我对所有这些东西的工作原理知之甚少,无法自信地给出完整的答案。

标签: windows command-line shutdown shutdown-hook system-shutdown


【解决方案1】:

当您可以设置 Windows 关闭脚本时,为什么要更加努力?

这很简单:

执行gpedit.msc(本地策略),然后转到:Windows 设置 -> 脚本 -> 关机 -> 属性 -> 添加 并在此处添加您的脚本。它将始终执行关闭。如果您只想在从服务器端调用shutdown时运行它,最好创建非常简单的c#(或其他)程序来运行您的脚本然后关闭计算机。有了这个之后,你可以从服务器调用它。

警告:使用 fastboot(在 Windows 8 及更高版本中默认启用)时,组策略启动和关闭 scipts 未执行。在这种情况下,只有重新启动或强制关机(从命令提示符处)才能真正关闭计算机。在所有其他情况下(开始菜单关闭),计算机内核休眠并在启动时恢复,GPO 启动和关闭脚本被忽略。

更多here

编辑:

当您有关闭脚本并且不想创建某些程序时,您可以检查关闭脚本是否存在某个文件,您创建的文件是否存在,如果不存在,则备份,如果是则继续正常关闭并删除该文件.当您创建另一个脚本并将其放置在桌面或任何地方并对其进行编程以创建文件并运行shutdown.exe时,您将在没有备份的情况下正常关机,但如果服务器调用shutdown它将备份。

【讨论】:

  • 当系统即将重启时,这样的关闭脚本是否也会执行?
  • @Forivin 仅在关机时不可用。
  • 好吧,我需要一些同时适用于关机和重启的东西。是否也可以创建一个“重启脚本”?
  • @Forivin 嗯...现在我正在寻找一些文档,也许它也可以在重新启动时工作,但是如果它不起作用,您可以尝试添加注销脚本,该脚本将在重新启动时执行,因为 windows 首次注销配置文件:用户配置 -> Windows 设置 -> 脚本 -> 登录或注销 -> 属性 -> 添加
【解决方案2】:

您可以在每个工作站中始终运行的应用程序中检测 Windows 关闭,例如 c#.net,在关闭之前运行您的脚本,然后继续关闭。将事件处理程序方法附加到SystemEvents.SessionEnded 事件。 看看here

【讨论】:

    猜你喜欢
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多