Я разработал функцию для продвижения контроллеров домена в существующем лесу, а затем перемещает контроллер домена из стандартного подразделения контроллера домена в подчиненное подразделение.Однако эта функция работает иногда, когда запускаемая функция перезагружается сервером, который перезагружается в течение ~ 10 минут после запуска функции, в других случаях она ожидает ~ 85 минут перед перезагрузкой.Функция принимает CSV для последовательного продвижения нескольких DC.
Проблема заключается в том, что функция ждет ~ 85 минут, прежде чем ее перезагрузка задерживает продвижение следующего DC в CSV.Все контроллеры домена находятся в одном центре обработки данных в одной сети.Начальная репликация AD продолжается после перезагрузки, поэтому она не ожидает завершения начальной репликации до перезагрузки.
Чтобы обеспечить постоянное продвижение DC в поместье моих клиентов, мне нужно понять, чтоПроцесс перезагрузки:
Мой вопрос: что диктует перезагрузка сервера во время продвижения по постоянному току?
Моя функция выглядит следующим образом:
function New-PSATDomainController {
[CmdletBinding()]
param (
[Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string] $VMName,
[Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string] $Domain,
[Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string] $ADSite,
[Parameter(Mandatory = $true)][string] $SafeModeAdministratorPassword,
[Parameter(Mandatory = $true)][System.Management.Automation.PSCredential] $GuestCredential,
[Parameter(Mandatory = $true)][System.Management.Automation.PSCredential] $Credential
)
begin {
}
process {
# Set required variables
$FQDN = ("$vmname"+"."+"$Domain")
$DefaultDomainControllerOUPath = (Get-PSATDefaultDomainControllerOUPath -Domain "$Domain")
# Install AD Domain Services
Write-verbose "Installing the following windows features - AD-Domain-Services,RSAT-AD-AdminCenter,RSAT-ADDS-Tools" -Verbose
$InstallDomainServices = "Add-WindowsFeature AD-Domain-Services,RSAT-AD-AdminCenter,RSAT-ADDS-Tools -Restart"
Invoke-VMScript `
-VM "$VMName" `
-ScriptText $InstallDomainServices `
-GuestCredential $GuestCredential `
-Confirm:$false
start-sleep -Seconds 60
Wait-Tools -VM "$VMName" -TimeoutSeconds 300
Start-Sleep -Seconds 20
# Promote Virtual Machine to Domain Controller.
Write-Verbose "Promoting `"$VMName`" to be a Domain Controller of the `"$Domain`" Domain." -Verbose
$PromoteToDomainControllerScript = "
`$CredentialPassword = ConvertTo-SecureString -String '$($Credential.GetNetworkCredential().Password)' -AsPlainText -Force
`$Credential = New-Object System.Management.Automation.PSCredential (`"$($Credential.Username)`", `$CredentialPassword)
`$SafeModeAdministratorPassword = ConvertTo-SecureString -String '$SafeModeAdministratorPassword' -AsPlainText -Force
New-Item -Path e:\NTDS -ItemType directory
New-Item -Path e:\SYSVOL -ItemType directory
Import-Module ADDSDeployment
Install-ADDSDomainController ``
-NoGlobalCatalog:`$false ``
-CriticalReplicationOnly:`$false ``
-DatabasePath 'e:\NTDS' ``
-DnsDelegationCredential `$Credential ``
-DomainName $Domain ``
-InstallDns:`$true ``
-LogPath 'e:\NTDS' ``
-NoRebootOnCompletion:`$false ``
-SiteName $ADSite ``
-SysvolPath 'e:\SYSVOL' ``
-Force:`$true ``
-SafeModeAdministratorPassword `$SafeModeAdministratorPassword ``
-ADPrepCredential `$Credential ``
-Credential `$Credential"
Invoke-VMScript `
-ScriptText $PromoteToDomainControllerScript `
-VM "$VMName" `
-GuestCredential $GuestCredential `
-Confirm:$false `
-ScriptType:Powershell `
-ErrorAction SilentlyContinue
# Wait for the VM to finalise it's Domain Controller promotion and reboot
Write-Verbose "Waiting up to 60 minutes for `"$FQDN`" to finalise it's Domain Controller promotion and reboot" -Verbose
$StartDate = Get-Date
$DCServices = "adws","dns","kdc","netlogon"
do {
$DCServicesStatus = (invoke-command -ComputerName "$FQDN" -Credential $Credential -ScriptBlock {get-service -Name $Using:DCServices} -ErrorAction SilentlyContinue)
} while ($DCServicesStatus.status -ne "Running" -and $startDate.AddMinutes(120) -gt (Get-Date))
Write-Verbose "$VMName has rebooted" -Verbose
Wait-Tools -VM "$VMName"
Start-Sleep -Seconds 60
# Move New Domain Controller into Correct AD OU.
Write-verbose "Moving new Domain Controller `"$VMName`" into correct AD OU, `"$DefaultDomainControllerOUPath`"." -Verbose
Invoke-Command `
-ComputerName $Domain `
-ScriptBlock {get-adcomputer "$Using:VMName" | Move-ADObject -TargetPath "$Using:DefaultDomainControllerOUPath"} `
-Credential $Credential
Write-Verbose "Completed promoting `"$VMName`" to be a Domain Controller of the `"$Domain`" Domain." -Verbose
}
end {
}
}