运行 启动服务器重启时的 powershell 脚本并在 cmd 中显示脚本进度

Run powershell script whenever a server reboot is initiated and show the script progress in cmd

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

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

我的测试结果: 我试图创建一个测试脚本,它将生成一个包含当前 date/time 的文本文件,并将其添加到事件日志 6006 触发器的计划任务中(每当启动系统 reboot/shutdown 时创建。) 我选中了框 -"Run with highest privileges" 但是在系统重新启动后没有生成文本文件,尽管它是在 运行 手动生成的。

我们有没有更好的方法来实现这个?

(我的最终期望应该是这样的—— 在 运行dom 的一天,当命令提示符 window 在他面前打开并显示如下消息时,运行dom 用户在每月补丁后启动重启:

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

编辑:我已经按照 Kory 和 Alroc 的建议将 .ps1 文件添加到 gpedit 中,但脚本 运行s 仅在启动计算机重新启动时在后台运行。它不会打开常规 cmd window 来显示进度。 我在下面添加了 .ps1 脚本,它以 10 秒的间隔停止 2 个服务(选择用于测试目的),并且也会显示计时器,仅当 运行 manually.When 由 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

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

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

经过深入挖掘,我终于想出了如何在系统关闭过程中使 cmd window 可见。

执行上述期望的完整步骤如下:

  1. 打开gpedit.msc
  2. 导航至计算机配置->Windows 设置->脚本(Startup/Shutdown)->关机。
  3. 转到关机属性。在 powershell scripts 选项卡中添加您的 脚本和 select '运行 Windows Powershell 脚本优先'

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

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

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