(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コンソールで実行した場合でも、これらの出力はまったくありません開始すると、期待どおりの出力が得られます。
実行中にジョブが自身のスケジュールされたジョブレコードにアクセスできない可能性はありますか?もしそうなら、回避策はありますか?または私は何かを逃していますか?これが1回限りの起動後ジョブを実行するのに適した方法ではない場合、何を提案しますか?
追記として、私はバッチであまり快適ではないので、Powershellまたは.Netまたはバッチよりも表現力のあるものを使用するソリューションに感謝します。
RunOnceレジストリキーの1つを使用します。これらは、まさにこの種のタスク用に設計されています。
彼らは一度走ってから消えます。
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'