Den vollständigen Start des Active Directory in einer Hyper-V VM abwarten.
Das gestern vorgestellt Script „RebootAndWaitForServer“ wartet nur „stumpf“ bis die Hyper-V VM gebootet ist und der Prozess „winlogon.exe“ sowie der Dienst „LSM“ läuft. Stellt man jetzt eine Umgebung auf der grünen Wiese bzw. einen PoC oder eine Demoumgebung bereit, benötigt man unter Umständen einen Domänen Controller. Ein DC sollte nicht nur automatisch ausgerollt, sondern auch noch entsprechend konfiguriert werden. Die Konfiguration ist allerdings, logischerweise, erst möglich wenn die Active Directory Dienste gestartet und betriebsbereit sind. Auch hier gab es auf GitHub (WaitFor-ActiveDirectory) bereits eine Funktion, die in verschiedenen Tests nicht zuverlässig lief. In prduktiven Umgebungen sollte es diese Problem natürlich gar nicht erst, da immer mindestens zwei Domain Controller betrieben werden sollten, von denen einer immer erreichbar ist.
Das folgende Script liest die Uptime der Hyper-V VM aus, zieht diese vom aktuellen Datum ab und durchsucht dann die Ereignisanzeige „Active Directory Web Services“ in der VM auf die Instanz-Id „1073743024“.
# WaitForAD
Beispiel für die Variablen:
[string]$VMName = "SERVER-VM01"
[System.Management.Automation.PSCredential] $tempCred = new-object -typename System.Management.Automation.PSCredential ("Domain\Admin", (ConvertTo-SecureString P@ssw0rd! -AsPlainText -Force))
Oder ggfs. die Variablen abfragen:
$VMName = Read-Host "Bitte den Namen des virtuellen Computers eingeben"
$tempCred = Get-Credential
#>
function WaitForAD {
param (
[Parameter(Mandatory=$true)]
[String]
$VMName,
[Parameter(Mandatory=$true)]
[System.Management.Automation.PSCredential]
$Credentials
)
$VM = Get-VM -Name $VMName
$Uptime = $VM.Uptime.TotalSeconds
$Date = $(Get-Date).AddSeconds(-($Uptime))
Write-Host "[$($VMName)]:: Auf Active Directory warten" -ForegroundColor Yellow -NoNewline
Invoke-Command -VMName $VMName -Credential $Credentials -ArgumentList $Date -ScriptBlock {
param($Date)
do {
do {
Write-Host "." -ForegroundColor Yellow -NoNewline
Start-Sleep -Seconds 5
$AD = get-service ADWS, DNS, KDC, NETLOGON, NTDS
} until ($AD[0].Status -eq "running" -and $AD[1].Status -eq "running" -and $AD[2].Status -eq "running" -and $AD[3].Status -eq "running" -and $AD[4].Status -eq "running")
Write-Host "." -ForegroundColor Yellow -NoNewline
Start-Sleep -Seconds 5
$Event = Get-EventLog -LogName "Active Directory Web Services" -Source ADWS -After $Date -InstanceId 1073743024 -Newest 1
} until ($Event.Message -match "Die angegebene Verzeichnisinstanz wird nun von Active Directory-Webdiensten bedient" -or $Event.Message -match "Active Directory Web Services is now servicing the specified directory instance")
}
Write-Host " -> Ok!" -ForegroundColor Yellow
}
[string]$VMName = "SERVER-VM01"
[System.Management.Automation.PSCredential] $tempCred = new-object -typename System.Management.Automation.PSCredential ("Domain\Administrator", (ConvertTo-SecureString P@ssw0rd! -AsPlainText -Force))
WaitForAD $VMName $tempCred
Link zum Download: WaitForAD
Schreibe einen Kommentar