-2

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

每当启动重新启动或关闭时,如何使服务器调用 .ps1 脚本。

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

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

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

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

编辑:我已经成功地调用了 .ps1 文件,方法是按照 Kory 和 Alroc 的建议将其添加到 gpedit 中,但脚本仅在启动计算机重新启动时在后台运行。它不会打开常规的 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
4

2 回答 2

2

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

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

于 2016-01-08T02:38:22.667 回答
1

经过深入挖掘,我终于弄清楚了如何在系统关闭过程中使 cmd 窗口可见。

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

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

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

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

    • 在计算机启动、关闭时首先运行 Windows Powershell 脚本
    • 运行可见的关闭脚本
于 2016-01-10T02:02:43.873 回答