【发布时间】: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