【问题标题】:Is it possible to trigger a script execution when stopping a windows service from services.msc?从 services.msc 停止 Windows 服务时是否可以触发脚本执行?
【发布时间】:2019-05-13 16:29:39
【问题描述】:

我想知道当我从 services.msc 停止服务时,是否可以将服务配置为调用批处理/powershell 脚本。

虽然在 Linux 中 init.d 服务是完全可编程的,甚至 systemd 服务也可以有额外的程序,但我还没有找到在 Windows 上实现这一点的方法。

提前致谢

【问题讨论】:

  • 如果您正在运行批处理文件或 powershell 脚本来停止服务,为什么不在之后放置您想要运行的任何命令?
  • 请记住,服务停止的原因之一是系统正在关闭。这不是开始新活动的好时机。这项活动是在停止后“必须”完成,还是可以重新制定为在启动期间完成的事情(当您希望有足够的时间时)? (当然,断电“关闭”服务,运行额外代码的可能性为零)

标签: windows powershell batch-file service system


【解决方案1】:

您可以将服务配置为在出现故障时运行程序,但如果您通过 services.msc 停止服务,那么这可能不会被视为失败。

我能想到的唯一其他选择是设置一个作为计划任务运行的 PowerShell 脚本,它可以定期检查服务的运行状态,或者(对于更简单的选项)查看事件日志中的事件表明该服务已停止(自上次检查脚本以来),然后执行您需要的任何操作。

根据 montonero 的评论,您不需要定期运行计划任务,因为它可以配置为在事件本身发生时运行。此处对此进行了描述:https://blogs.technet.microsoft.com/wincat/2011/08/25/trigger-a-powershell-script-from-a-windows-event/

使用事件查看器“将任务附加到此事件...”功能 创建任务。

启动“事件查看器”并找到事件。找到后,右键单击该事件并选择“将任务附加到 本次活动……”。

【讨论】:

  • 可以创建一个由特定事件触发的调度器任务。只需右键单击事件查看器中的事件并选择“将任务附加到此事件”
  • 哦,真的,我不知道!好吧,那就更简单了:)。
  • 感谢您的回复,我无法创建将由我的服务启动/停止触发的自定义事件。服务控制管理器为每次启动/停止创建一个通用系统事件,但对于任何服务都是如此,我无法区分它们。
  • 查看此相关答案,因为它显示了如何将事件中的详细信息发送到 PowerShell 脚本,然后您可以使用该脚本进行区分:stackoverflow.com/questions/53744938/…
  • Event/System/Provider/@Name 日志值(一般信息)是否有路径?它具有调用的服务的名称以及其中的状态更改。这样就可以了
猜你喜欢
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 2018-04-05
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
相关资源
最近更新 更多