– Jan's Cloud – online Gedankenstütze ;)

8. Juli 2018

Auf Active Directory Start in Hyper-V VM warten

Filed under: Hyper-V,PowerShell,Windows Server — Schlagwörter: , , , , — Jan Mischo @ 11:10

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

WaitForAD

WaitForAD PowerShell

WaitForAD PowerShell

<# 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

Aint nobody got time for dat

Aint nobody got time for dat

30. Mai 2015

Active Directory Domaincontroller best und worst Practice

Filed under: Active Directory,DNS,Windows Server — Schlagwörter: , , , , , , — Jan Mischo @ 11:29

Obwohl das Active Directory und Active Directory Domaincontroller von Natur aus schon recht robust designed ist und sehr schnell ein Server (oder auch ein weiterer) zum Domänencontroller hochgestuft ist, treffe ich bei vielen Kunden auf sehr ungünstige Konstellationen. Ob in diesen Fällen einfach die Grundlagen auf Seite gelegt wurden bzw. aufgrund der „Einfachheit“, der Installation eines DCs vorschnell die „Weiter-Weiter-Weiter“ Methode gewählt wurde oder nach dem Motto „Challenge Accepted, ich bin stärker als das AD“ vorgegangen wurde bleibt im Nachhinein meistens offen.

Da ich eben beim Surfen durchs Web auf ein mir alt bekanntes Video gestoßen bin, wollte ich es hier einmal als Post verewigen, damit ich es immer griffbereit habe: „Tu mir das nicht an“, sagte der Domänencontroller

 

Der (geniale) Blog des Video Authors: http://www.faq-o-matic.net/

Ein sehr guter Blog zum Thema Active Directory: http://blog.dikmenoglu.de/

22. August 2014

Anzeigenamen / Vollständiger Name per PowerShell im AD für alle User ändern

Filed under: Active Directory,PowerShell,Windows Server — Schlagwörter: , , , , — Jan Mischo @ 08:41

Ein kleines PowerShell Script, welches die Anzeigenamen sowie die vollständigen Namen der User in einer bestimmten OU in „Nachnahme, Vorname“ ändert:

Import-Module ActiveDirectory

$DOMAIN = (Get-ADDomain).DistinguishedName
$OU = 'OU=Benutzer,OU=derTest,' + $DOMAIN

Get-ADUser -Filter * -SearchBase $OU | ForEach-Object {
    $VORNAME =  $_.GivenName
    $NACHNAME = $_.Surname
    $SAMNAMEACCOUNTNAME = $_.samAccountName
    $DISTINGUISHEDNAME = $_.DistinguishedName
    $ANZEIGENAME = $NACHNAME + ', ' + $VORNAME
    Write-Host $ANZEIGENAME
    Set-ADUser $SAMNAMEACCOUNTNAME -DisplayName $ANZEIGENAME
    Rename-ADObject -Identity $DISTINGUISHEDNAME -NewName $ANZEIGENAME
}

 

Powered by WordPress