Сценарий установки ADDSForrest не перезагрузится после завершения
Прежде чем пытаться ответить на заголовок
Я использую аргументы -force и -confirm:$false.
Мне было поручено написать сценарий, который полностью автоматизирует продвижение сервера в новый лес активных каталогов, однако моя программа зависает, как только она фактически продвигает сервер из Install-ADDSForest
команда. Он завершает операцию контроллера домена, но не может вернуть выполнение обратно сценарию и не может автоматически перезагрузить компьютер. Я пробовал как использовать автоматический перезапуск из команды, так и подавить автоматический перезапуск и выполнить ручной перезапуск, но без кубиков: управление никогда не возвращается из команды.
Когда я запускаю его как задание, единственный способ заставить его продолжить вручную - это закрыть окно, к которому относится задача, открыть другое окно powershell и возобновить задание. Компьютер сразу перезагружается как надо. Я мог бы написать этот процесс, закрывая исходное окно и продолжая откуда-то еще, но это похоже на ужасный хак. Я единственный человек, имеющий опыт разработки программного обеспечения, все остальные являются ИТ-специалистами, поэтому я не уверен, что смогу объяснить, почему мне нужно делать это в документации, и это усложнит обслуживание кода.
Я использую PowerShell рабочий процесс. Проблема не существует вне рабочего процесса powershell, но мне нужен рабочий процесс для запуска сценария с контрольными точками, чтобы я мог продолжить после перезапуска. Я мог бы сделать это с несколькими файлами и переменными для отслеживания прогресса, но это сделало бы мой код почти нерасширяемым.
Удалите записи из журнала ниже (включая момент, когда я сыт по горло и использую мой обходной путь, чтобы перезагрузиться после того, как оставил мою программу на ночь)
07/05/2017 16:31:22 [INFO] DsRolepSetDCLocatorPostPromoState: got 0 creating the DSROLEP_DCLOCATOR_PREREBOOT_HINT key
07/05/2017 16:31:22 [INFO] The attempted domain controller operation has completed
07/05/2017 16:31:22 [INFO] Updating service status to 4
07/05/2017 16:31:22 [INFO] DsRolepSetOperationDone returned 0
07/05/2017 19:30:35 [INFO] Updating service status to 3
07/05/2017 19:30:35 [INFO] DS Role Server Service shutting down
07/05/2017 16:31:22 [INFO] DsRolepSetDCLocatorPostPromoState: got 0 creating the DSROLEP_DCLOCATOR_PREREBOOT_HINT key
07/05/2017 16:31:22 [INFO] The attempted domain controller operation has completed
07/05/2017 16:31:22 [INFO] Updating service status to 4
07/05/2017 16:31:22 [INFO] DsRolepSetOperationDone returned 0
07/05/2017 19:30:35 [INFO] Updating service status to 3
07/05/2017 19:30:35 [INFO] DS Role Server Service shutting down
Пример минимального кода, документирующий мои проблемы ниже:
#requires -runasadministrator
param(
[parameter(mandatory=$true)]
[string]
$rootDomainName,
[parameter(mandatory=$true)]
[string]
$netBiosName
)
workflow New-adsetup{
param(
[parameter(mandatory=$true)]
[string]
$rootDomainName,
[parameter(mandatory=$true)]
[string]
$netBiosName
)
function promoteandinstall{
param(
[parameter(mandatory=$true)]
[string]
$rootDomainName,
[parameter(mandatory=$true)]
[string]
$netBiosName
)
echo "!!!begin promote to AD!!!"
echo "!installing windows feature!"
Install-WindowsFeature -name AD-Domain-Services
echo "!feature installed!"
Import-Module ADDSDeployment
Install-ADDSForest `
-Force:$true `
-confirm:$false `
-skipPrechecks:$true `
-DomainMode "Win2012R2" `
-DomainName $rootdomainname `
-DomainNetbiosName $netbiosname `
-ForestMode "Win2012R2" `
-InstallDns:$false `
-NoRebootOnCompletion:$true <#$true#> `
-SafeModeAdministratorPassword (convertto-securestring "P4ssw0rd" -asplaintext -force)
restart-computer -force
}
promoteandinstall -rootDomainName $rootDomainName -netBiosName $netBiosName
md D:\ThisCommandRunAfterReboot
}
$AtStartup = New-JobTrigger -AtStartup
Register-ScheduledJob -Name ADSetup -Trigger $AtStartup -ScriptBlock `
{Import-Module PSWorkflow;
Get-Job ADSetup -State Suspended | Resume-Job}
New-ADSetup -rootDomainName $rootDomainName -PSPersist:$true `
-netBiosName $netBiosName -AsJob -JobName ADSetup
Unregister-ScheduledJob -Name ADSetup