Windows 如何使用PowerShell在系统关闭时运行某些代码?

Windows 如何使用PowerShell在系统关闭时运行某些代码?,windows,powershell,shutdown,taskscheduler,Windows,Powershell,Shutdown,Taskscheduler,我正在设置一个Windows虚拟机,它需要在启动时运行一些PowerShell代码。它还需要在关闭时运行一些不同的代码 要实现前者,我可以在初始配置脚本中使用和,如下所示: $StartupTrigger = New-JobTrigger -AtStartup Register-ScheduledJob -Name "Startup Job" -Trigger $StartupTrigger -Credential $DesiredCredentials -ScriptBlo

我正在设置一个Windows虚拟机,它需要在启动时运行一些PowerShell代码。它还需要在关闭时运行一些不同的代码

要实现前者,我可以在初始配置脚本中使用和,如下所示:

$StartupTrigger = New-JobTrigger -AtStartup
Register-ScheduledJob -Name "Startup Job" -Trigger $StartupTrigger -Credential $DesiredCredentials -ScriptBlock {
    Do-InterestingThings $using:ExternalResource
}
甚至不必是一个单独的脚本文件,它可以是一个。当作业运行时,外部作用域中的任何变量都将被序列化并使用。相当整洁


我要解决的真正问题是创建一个外部资源,它的生命周期与VM的正常运行时间有关。创建VM时,将创建此资源。当VM关闭时,需要清理此资源如何在VM计划关闭之前使用PowerShell运行一些代码(无论它是如何获得订单的)?它不需要是脚本块,可以是单独的脚本文件。

有两种合理的方法可以做到这一点:

本地组策略:

这可以在本地组策略编辑器中完成:
gpedit.msc
。导航到
计算机配置/Windows设置/Scripts(启动/关闭)/Shutdown
。您可以在此处添加“脚本”和/或“PowerShell脚本”,这些脚本在其他关机进程之前执行


基于事件的计划任务:

发件人:

计划任务如下:

  • 类型:On事件(基本)
  • 日志:系统
  • 资料来源:User32
  • 事件编号:1074
当用户或命令作为登录用户启动关机或重新启动时 用户或代表用户,将触发事件ID 1074。通过创建 要使用此任务触发脚本,它将启动脚本并 让它结束

请注意,这不会延迟关机(因此必须很快),有时在任务计划程序服务停止之前无法触发


最后一个注释:


始终确保您的代码能够处理脏关机。毕竟,调用重新启动的最快方法是电源按钮…

也遇到了这个问题。可以做的是中止关机,运行任务的其余部分,然后添加关机。是否可以在PowerShell中(或至少在普通CMD中)更改本地组策略?这必须在设置脚本中设置,因此GUI是不可使用的。@JesseTG哇,错过了在设置脚本中完成的操作-本地组策略只解析为注册表项,所以这很简单。看起来这些应该就是你需要的了:谢谢。我会仔细阅读那篇文章,看看它是否适合我的需要。(我不知道注册表是如何工作的。)