Wie man Änderungen am Active Directory-Schema mit PowerShell meldet

Änderungen am Active Directory (AD)-Schema können zu Betriebsproblemen führen. Im Allgemeinen sollte das Schema nicht geändert werden. Wenn jedoch eine neue Anwendung installiert wird, die auf Active Directory wie dem Microsoft Exchange Server basiert, muss das Schema aktualisiert werden, um die Anwendung zu unterstützen. Um die Integrität von AD zu schützen, ist es sinnvoll sicherzustellen, dass nur genehmigte Änderungen am Schema vorgenommen werden.

Mit PowerShell lässt sich leicht ein Bericht über AD-Schemaänderungen erstellen. Bevor Sie jedoch den Code in diesem Artikel ausführen, installieren Sie das PowerShell-Modul für Windows Server Active Directory. Das Active Directory PowerShell-Modul ist standardmäßig auf Domänencontrollern (DC) installiert. Es ist jedoch bewährte Praxis, alltägliche Verwaltungsaufgaben von einem Windows 10-PC, der der Domäne beigetreten ist, auszuführen.

Werbeanzeige

Installieren Sie das Windows Server Active Directory PowerShell-Modul

Das AD PowerShell-Modul ist Teil der Remote Server Administration Tools (RSAT) für Active Directory-Domänendienste. Um die RSAT-AD-Tools zu installieren, öffnen Sie eine PowerShell-Eingabeaufforderung mit lokalen Administratorrechten und führen Sie den folgenden Befehl aus:

Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 –Online

Nachdem die Tools installiert wurden, können Sie das erhöhte PowerShell-Fenster schließen. Um die restlichen Befehle in diesem Artikel auszuführen, müssen Sie lediglich in Windows 10 mit einem Konto angemeldet sein, das Mitglied der Active Directory-Gruppe „Domänenbenutzer“ ist.

Weitere Informationen zur Installation von RSAT in Windows 10 finden Sie unter So installieren Sie die Remote Server-Verwaltungstools in Windows 10 auf Petri.

Bericht über AD-Schemaänderungen mithilfe von PowerShell

Mithilfe des Get-ADObject-Cmdlets können wir Schemaänderungen anzeigen. Zunächst müssen wir Get-ADObject jedoch einen Suchstamm oder, mit anderen Worten, einen Bereich des Verzeichnisses zum Durchsuchen bereitstellen. Wir möchten das Schema durchsuchen, daher benötigen wir den Namensbezug unseres Verzeichnisschemas. Glücklicherweise lässt sich das einfach mit dem Get-ADRootDSE-Cmdlet abrufen. Wenn Sie Get-ADRootDSE ohne Parameter ausführen, sehen Sie im Ausgabepfad für den Namensbezug des VerzeichnisschemasschemaNamingContext.

Werbung

Image # Expand
How to Report Active Directory Schema Changes Using PowerShell (Image Credit: Russell Smith)

 

PowerShell ermöglicht es leicht, eine beliebige Eigenschaft wie schemaNamingContext durch Verwendung eines Punktes und Klammern wie unten gezeigt herauszuziehen:

((Get-ADRootDSE).schemanamingcontext)

Wir können den obigen Code als Wert für den -SearchBase-Parameter im Get-ADObject-Cmdlet verwenden. Es müssen jedoch noch einige andere Parameter hinzugefügt werden. -SearchScope sollte auf OneLevel gesetzt werden, was die unmittelbaren untergeordneten Objekte des mit dem -SearchBase-Parameter angegebenen Pfads durchsucht. Ein Sternchen (*) wird als Wert des -Filter-Parameters verwendet, um alles zurückzugeben.

Schließlich verwenden wir den -Properties-Parameter, um die Eigenschaften anzugeben, die wir als Teil der Ausgabe zurückgeben möchten. Wie Sie sehen können, werde ich die objectClass, name, whenChanged, und whenCreated Eigenschaften herausziehen.

Werbung

$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemanamingcontext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated

Wir möchten die Daten nach Datum gruppieren. Dafür benötigen wir das whencreated-Datum ohne die Zeitinformationen. Wir können das Select-Object-Cmdlet und eine berechnete Eigenschaft verwenden, um ein neues Objekt mit den benötigten Daten im richtigen Format zu erstellen. Im erweiterten Befehl unten sehen Sie, dass ich das von Get-ADObject generierte Objekt an das Select-Object-Cmdlet weitergeleitet habe. @ zeigt eine berechnete Eigenschaft an, die ein Label „Event“ und einen Ausdruck hat, der nur das Datum aus der Eigenschaft whenCreated in verkürzter Form zurückgibt.

$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}}

Als nächstes leiten wir das von Select-Object erstellte Objekt an Sort-Object weiter. Es wird die Objektdaten nach der Eigenschaft whenCreated sortieren.

$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}} | Sort-Object -Property whenCreated

Zum Schluss leiten wir das Objekt an das Format-Table-Cmdlet weiter. Es wird die Eigenschaften in einer Tabelle anzeigen, gruppiert nach Event, die wir mithilfe des Select-Object-Cmdlets erstellt haben.

$schema | Format-Table objectClass, name, whenChanged, whenCreated -groupby Event -autosize
Image # Expand
How to Report Active Directory Schema Changes Using PowerShell (Image Credit: Russell Smith)
$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}} | Sort-Object -Property whenCreated

$schema | Format-Table objectClass, name, whenChanged, whenCreated -groupby Event -autosize

Wenn wir den gesamten Code zusammen ausführen, werden Schemaänderungen im Eingabeaufforderungsfenster aufgelistet. In meinem Verzeichnis wurde Exchange Server installiert, daher können wir viele Änderungen am Schema sehen.

 

Source:
https://petri.com/how-to-report-active-directory-schema-changes-using-powershell/