【问题标题】:Run powershell script whenever a server reboot is initiated and show the script progress in cmd每当启动服务器重新启动时运行 powershell 脚本并在 cmd 中显示脚本进度
【发布时间】:2016-04-12 15:08:12
【问题描述】:

每当服务器重新启动/关闭时(无论是正常重启还是可耻重启),我都需要运行一个 powershell 脚本。 脚本会每隔1分钟停止4个应用服务,最后重启系统。(这是业务需求,不要问为什么)

如何让服务器在启动重启或关机时调用 .ps1 脚本。

我的测试结果: 我尝试创建一个测试脚本,它将生成一个具有当前日期/时间的文本文件,并将其添加到事件日志 6006 触发器上的计划任务中(每当启动系统重新启动/关闭时都会创建该脚本。) 我选中了“以最高权限运行”框,但在系统重新启动后,没有按预期生成文本文件,尽管它是在手动运行时生成的。

我们有更好的方法来实现吗?

(我的最终期望应该是这样的—— 在随机的一天,一个随机的用户在每月一次的补丁之后启动了重启,此时命令提示符窗口在他面前打开并显示如下消息:

    Stopping service abc...
    Stopped.
    Waiting for 60 seconds.
    Stopping service xyz... 
    Stopped

编辑:按照 Kory 和 Alroc 的建议,通过将 .ps1 文件添加到 gpedit 中,我已经成功地调用了 .ps1 文件,但脚本仅在启动计算机重新启动时在后台运行。它不会打开常规的 cmd 窗口来显示进度。 我还在下面添加 .ps1 脚本,该脚本以 10 秒的间隔停止 2 个服务(为测试目的而选择),并且仅在手动运行时才会显示计时器。当由 shutdown 命令调用时,它将停止仅在后台提供服务,而不向用户显示进度。请协助实现这一目标?

 Write-Host "Shutdown script invoked"
    stop-service W32Time -force -PassThru
    for($i = 10 ; $i -gt 0 ; $i--)
    {
    Write-Progress -Activity "`n Waiting for" -status "`$i equals $i seconds"
    sleep 1
    }
    stop-service wuauserv -force -PassThru

【问题讨论】:

  • 根据定义,“可耻的重启”不会执行所有标准关闭过程,因此您可能找不到 100% 覆盖该情况的解决方案。
  • 没问题,这是最低要求。首先,我们需要处理 99% 的情况下会发生的优雅重启。有什么建议吗?
  • 我从这个链接得到了一个想法。 Windows 本地组策略编辑器提供了一个单独的选项卡,用于在 gpedit 内的“启动/关闭脚本”中添加 powershell 脚本。这行得通。谢谢科里·吉尔。
  • 嗨 Kory- 这不是重复的。提供的链接仅有助于我查询的部分回复。我已经编辑了问题以显示我的进度和最终期望。请删除重复标签,因为我因此而获得反对票,如果我能实现我在“编辑”中提到的内容,请告诉我。提前致谢。

标签: windows powershell taskscheduler


【解决方案1】:

您可以使用GPO 为系统配置关闭脚本。

您也可以通过Win32_ComputerShutdownEvent 观察者来访问它。

【讨论】:

  • 虽然我也很想使用 watcher..我会在 google 中阅读它并了解如何使用它。
  • 嗨 Alroc - 我可以通过将停止服务脚本添加到 gpedit 来调用停止服务脚本,并且每当系统重新启动时,该脚本只会在后台执行。它不会打开命令提示符并向用户显示停止服务的进度,但是在手动运行时它确实有效。如何让计算机在启动系统关闭时打开常规 cmd 窗口并显示脚本进度。
  • 另外,我知道 Win32_ComputerShutdownEvent 观察程序只有在将其添加到登录脚本时才能工作,该脚本将在后台静默运行,并将整天等待关闭命令。我不能使用它,因为服务器只有在重新启动并登录到生产环境后才会生效。我已经编辑了我的问题以显示脚本进度和最终期望。提前致谢。
【解决方案2】:

经过深入研究,我终于想出了如何在系统关闭过程中使 cmd 窗口可见。

这是执行上述期望的完整步骤:

  1. 打开 gpedit.msc
  2. 导航到计算机配置->Windows 设置->脚本(启动/关机)->关机。
  3. 转到关机属性。在 powershell 脚本 标签中添加您的 脚本并选择“首先运行 Windows Powershell 脚本”

以上步骤将在每次系统关闭时启用脚本调用。现在让脚本可见并显示进度:

  1. 导航到计算机配置->管理 模板->系统->脚本
  2. 在右窗格中显示的策略中,启用下面 属性:

    • 在计算机启动、关闭时首先运行 Windows Powershell 脚本
    • 运行关闭脚本可见

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 2013-02-16
    • 2022-01-20
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多