Windows 如何使用PowerShell在系统关闭时运行某些代码?
我正在设置一个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
$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
最后一个注释:
始终确保您的代码能够处理脏关机。毕竟,调用重新启动的最快方法是电源按钮…也遇到了这个问题。可以做的是中止关机,运行任务的其余部分,然后添加关机。是否可以在PowerShell中(或至少在普通CMD中)更改本地组策略?这必须在设置脚本中设置,因此GUI是不可使用的。@JesseTG哇,错过了在设置脚本中完成的操作-本地组策略只解析为注册表项,所以这很简单。看起来这些应该就是你需要的了:谢谢。我会仔细阅读那篇文章,看看它是否适合我的需要。(我不知道注册表是如何工作的。)