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

时间:2016-01-08 02:22:44

标签: windows powershell taskscheduler

每当服务器重启/关闭时(无论是优雅还是可耻的重启),我都需要运行一个powershell脚本。 该脚本将以1分钟的间隔停止4个应用程序服务,然后最终重新启动系统。(这是业务要求,不要问为什么)

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

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

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

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

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

编辑:我已经成功地根据Kory和Alroc的建议将其添加到gpedit来调用.ps1文件,但是当启动计算机重启时脚本仅在后台运行。它不会打开常规cmd窗口来显示进度。 我在下面添加.ps1脚本,它会以10秒的间隔停止2个服务(选择用于测试目的),并且只有在手动运行时才会显示计时器。当由shutdown命令调用时它&# 39; ll仅在后台停止服务而不向用户显示进度。请帮助实现这一目标?

 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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

  1. 打开gpedit.msc
  2. 导航至计算机配置 - > Windows 设置 - >脚本(启动/关机) - >关机
  3. 转到关机属性。在 powershell脚本标签中添加您的 脚本并选择“首先运行Windows Powershell脚本”
  4. 以上步骤将在每次系统关闭时启用脚本调用。现在让脚本可见并显示进度:

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

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