在您尝试回复标题之前
我正在使用 -force 和 -confirm:$false 参数。
我的任务是编写一个脚本,该脚本将完全自动将服务器提升到新的活动目录林,但是,一旦完成从Install-ADDSForest
命令实际提升服务器,我的程序就会挂起。它完成了域控制器操作,但无法将执行返回给脚本,并且无法自动重新启动计算机。我已经尝试过使用命令的自动重启,并禁止自动重启并进行手动重启,但没有骰子:控制永远不会从命令返回。
当我将它作为作业运行时,强制它继续的唯一手动方法是关闭任务所在的窗口,打开另一个 powershell 窗口并恢复作业。计算机会立即按应有的方式重新启动。我可以编写这个关闭原始窗口并从其他地方继续的过程,但这似乎是一个可怕的黑客攻击。我是唯一一个有软件开发背景的人,其他人都是 IT,所以我不确定我可以解释为什么我需要在文档中这样做,这会使维护代码变得更加困难。
我正在使用 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