Как выполнить несколько команд PowerShell с перезапуском в пользовательских данных? - PullRequest
5 голосов
/ 30 июня 2019

Я хочу раскрутить контроллер домена в AWS, используя Terraform.Я попытался передать все команды через userdata, но я просто не могу найти способ запустить команды после перезагрузки.

Вот мои userdata:

    workflow Rename-And-Continue {
    Rename-Computer -NewName "HACKDC" -Force -Passthru
    Restart-Computer -Wait

    Install-WindowsFeature AD-Domain-Services, rsat-adds -IncludeAllSubFeature
    Install-ADDSForest -DomainName hackdc -SafeModeAdministratorPassword (ConvertTo-SecureString "SOMEPASSWORD" -AsPlainText -Force) -DomainMode Win2012R2 -DomainNetbiosName HACKDC -ForestMode Win2012R2 -Confirm:$false -Force
    Restart-Service NetLogon -EA 0
    Get-Service -Name ADWS; while($s.Status -ne "Running") {Start-Service ADWS; Start-Sleep 3};

}

$AtStartup = New-JobTrigger -AtStartup
Register-ScheduledJob -Name testWorkflow -Trigger $AtStartup -ScriptBlock {Import-Module PSWorkflow; Get-Job testWorkflow -State Suspended | Resume-Job};
Rename-And-Continue -AsJob -JobName testWorkflow

ОсновнойЗдесь вопрос заключается в том, что можно сделать для обеспечения правильной работы рабочего процесса, чтобы я мог настроить среду, даже если требуется многократный перезапуск (да, я знаю, что выше не каждый шаг для правильной настройки контроллера домена, просто фрагмент)

1 Ответ

0 голосов
/ 05 июля 2019

Ваш текущий скрипт ожидает только перезагрузки компьютера.

-Wait <SwitchParameter>
        Indicates that this cmdlet suppresses the Windows PowerShell prompt and blocks the pipeline 
        until all of the computers have restarted. You can use this parameter in a script to restart
        computers and then continue to process when the restart is finished.

Чтобы продолжить выполнение скрипта, вы можете использовать следующее.

# This will restart the computer. Then delay 2 seconds. 
# Then wait for PowerShell to become available again. 
# It will also timeout after 300 seconds (5 mins).
Restart-Computer -Wait -For PowerShell -Timeout 300 -Delay 2

Для получения дополнительной информации просто используйте командлет Get-Help с флагом -Examples. Конкретный пример будет приведен ниже.

PS C:\>Restart-Computer -ComputerName "Server01" -Wait -For PowerShell -Timeout 300 -Delay 2

    This command restarts the Server01 remote computer and then waits up to 5 minutes (300 seconds) 
    for Windows PowerShell to be available on the restarted computer before it continues.
...