安排一次性任务在 Windows Server 2012R2 启动时运行

安排一次性任务在 Windows Server 2012R2 启动时运行

作为系统构建自动化脚本的一部分(我用它来创建 AWS AMI),我希望系统重新启动,然后运行其他启动后设置任务 - 但只运行一次(这样当系统被映像化并且该映像用于启动新实例时,它不会再次运行启动后设置任务)。

我开始实现这一点的方式是,初始设置脚本(用 Powershell 编写)用于Register-ScheduleJob -Trigger (New-JobTrigger -AtStartup) ... -Name PostBootSetup设置在启动后立即运行的另一个 Powershell 脚本。在启动后脚本中,我有:

Get-JobTrigger -Name PostBootSetup | ?{$_.Enabled} | Disable-JobTrigger

但是当它运行时我收到此错误(我将启动后脚本的所有输出记录到一个文件中):

Powershell : A scheduled job definition with Name PostBootSetup could not be found.

这很奇怪,因为这是当前正在运行的作业的输出。我还添加了对Get-ScheduledJob和的简单调用Get-JobTrigger -Name PostBootSetup,应该会输出相关记录,但这些命令根本没有输出 - 即使我在机器启动后在 Powershell 控制台上运行这些命令,我​​也会得到预期的输出。

作业在运行时是否可能无法访问其自己的计划作业记录?如果是这样,有解决方法吗?还是我遗漏了什么?如果这不是执行一次性启动后作业的好方法,您会建议什么?

另外要注意的是,我对批处理不是很熟悉,因此我很欣赏使用 Powershell 或 .Net 或比批处理更具表现力的解决方案。

答案1

使用 RunOnce 注册表项之一,它们就是为此类任务而设计的。
它们运行一次,然后消失。HKEY_LOCAL_MACHINE

\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce

创建一个新的字符串值键,其名称任意,数据是 CLI EXE 并切换到您想要运行的内容。
https://msdn.microsoft.com/en-us/library/windows/desktop/aa376977%28v=vs.85%29.aspx

PS C:\> new-itemproperty -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce -name "myInstall" -value '"c:\temp\borland\setup.exe" /this /that /other'

相关内容