Назад | Перейти на главную страницу

Планирование одноразовой задачи для запуска при загрузке Windows Server 2012R2

В рамках сценария автоматизации сборки системы (который я использую для создания AMI AWS) я хочу, чтобы система перезагружалась, а затем выполнялись дополнительные задачи настройки после загрузки, но только один раз (чтобы при создании образа системы, а затем образ, используемый для запуска нового экземпляра, он не будет запускать задачи настройки после загрузки снова).

Я начал это реализовывать так: сценарий начальной настройки (написанный на 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 или что-то более выразительное, чем пакетное.

Используйте один из разделов реестра RunOnce, они предназначены именно для такого рода задач.
Они бегут один раз, а потом исчезают.

HKEY_LOCAL_MACHINE \ Программное обеспечение \ Microsoft \ Windows \ CurrentVersion \ RunOnce
HKEY_CURRENT_USER \ Программное обеспечение \ 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'