web-dev-qa-db-ja.com

Windows Server 2012R2ブートで実行する1回限りのタスクのスケジュール

(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またはバッチよりも表現力のあるものを使用するソリューションに感謝します。

4
Guss

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'
3
Clayton