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

qfe3c7zg  于 12个月前  发布在  Windows
关注(0)|答案(1)|浏览(181)

我正在配置一个Windows VM,它需要在引导时运行一些PowerShell代码。它还需要在关闭时运行一些不同的代码。
为了实现前者,我可以在初始配置脚本中使用New-JobTriggerRegister-ScheduledJob,如下所示:

$StartupTrigger = New-JobTrigger -AtStartup
Register-ScheduledJob -Name "Startup Job" -Trigger $StartupTrigger -Credential $DesiredCredentials -ScriptBlock {
    Do-InterestingThings $using:ExternalResource
}

字符串
甚至不必是一个单独的脚本文件,它可以只是一个script block。任何外部作用域的变量都将被序列化,并在作业运行时使用。非常整洁。
我正在解决的真实的问题涉及到创建一个外部资源,该资源的生存期与VM的服务器绑定。创建VM时,将创建此资源。关闭VM时,需要清理此资源。

如何在VM计划关闭之前使用PowerShell运行某些代码(无论它是如何获得命令的)?

它不需要是一个脚本块,它可以是一个单独的脚本文件。

kxkpmulp

kxkpmulp1#

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

本地组策略:

这可以在本地组策略编辑器中完成:gpedit.msc。导航到Computer Configuration/Windows Settings/Scripts (Startup/Shutdown)/Shutdown。您可以在此处添加“关闭”和/或“PowerShell关闭”,它们会在其他关闭进程之前执行。

基于事件的定时任务:

this answer开始:
计划任务如下:

  • 类型:事件(基本)
  • 日志:系统
  • 来源:User 32
  • 活动ID:1074

当用户或命令以登录用户或代表用户的身份启动关机或重新启动时,将触发事件ID 1074。通过创建一个任务来使用此触发脚本,它将启动脚本并允许其完成
请注意,这不会延迟关闭(因此必须快速),并且有时可能无法在任务计划程序服务停止之前触发。

最后备注:

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

相关问题