作为系统构build自动化脚本(用于创buildAWS AMI)的一部分,我希望系统重新引导,然后运行其他引导后设置任务 – 但只能执行一次(以便系统成像时,然后图像用于启动一个新的实例,它不会再次运行启动后的设置任务)。
我开始实现这个的方式是,初始安装脚本(用Powershell编写)使用Register-ScheduleJob -Trigger (New-JobTrigger -AtStartup) ... -Name PostBootSetup来设置在引导后立即运行的另一个Powershell脚本。 在启动后脚本中,我有:
Get-JobTrigger -Name PostBootSetup | ?{$_.Enabled} | Disable-JobTrigger
但是当它运行时,我得到这个错误(我将所有的后启动脚本的输出logging到一个文件):
Powershell : A scheduled job definition with Name PostBootSetup could not be found.
这很奇怪,因为那是当前正在运行的作业的输出。 我还添加了简单的调用Get-ScheduledJob和Get-JobTrigger -Name PostBootSetup应该输出相关的logging,但是这些绝对没有输出 – 即使我在机器启动后在Powershell控制台上运行这些命令,我得到了预期的产出。
运行时可能无法访问自己的计划作业logging吗? 如果是这样,是否有解决方法? 还是我错过了什么? 如果这不是一个一次性的开机后工作的好方法,你会build议什么?
作为进一步的说明,我不是很舒服的批处理,所以我会欣赏使用Powershell或.Net的解决scheme,或者比批处理更具performance力的东西。
使用其中一个RunOnceregistry项,它们是专门为这种types的任务而devise的。
他们跑了一次,然后消失。
HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \的RunOnce
HKEY_CURRENT_USER \软件\微软\的Windows \ CurrentVersion \的RunOnce
创build一个新的string值键,其名称是什么,数据是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'