Hoe actieve directory-schema wijzigingen te rapporteren met behulp van PowerShell

Wijzigingen in het Active Directory (AD)-schema kunnen operationele problemen veroorzaken. Over het algemeen zou het schema niet moeten veranderen. Maar als er een nieuwe applicatie wordt geïnstalleerd die afhankelijk is van Active Directory, zoals Microsoft Exchange Server, dan moet het schema worden bijgewerkt om de applicatie te ondersteunen. Om de integriteit van AD te beschermen, is het de moeite waard om te controleren dat alleen goedgekeurde wijzigingen aan het schema worden aangebracht.

Met PowerShell is het eenvoudig om een rapport van AD-schemawijzigingen te genereren. Maar voordat je de code in dit artikel uitvoert, installeer de PowerShell-module voor Windows Server Active Directory. De Active Directory PowerShell-module is standaard geïnstalleerd op domeincontrollers (DC’s). Maar het is een best practice om dagelijkse beheertaken uit te voeren vanaf een Windows 10 PC die is toegetreden tot het domein.

Advertentie

Installeer de Windows Server Active Directory PowerShell-module

De AD PowerShell-module maakt deel uit van de Remote Server Administration Tools (RSAT) voor Active Directory Domain Services. Om de RSAT AD-tools te installeren, opent u een PowerShell-prompt met lokale beheerdersrechten en voert u de volgende opdracht uit:

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

Zodra de tools zijn geïnstalleerd, kunt u het verhoogde PowerShell-venster sluiten. Om de rest van de opdrachten in dit artikel uit te voeren, hoeft u alleen ingelogd te zijn op Windows 10 met een account dat lid is van de Active Directory ‘Domeingebruikers’-groep.

Voor meer informatie over het installeren van RSAT in Windows 10, zie Hoe de Remote Server Administration Tools installeren in Windows 10 op Petri.

Rapporteer AD-schemawijzigingen met behulp van PowerShell

Met behulp van de cmdlet Get-ADObject kunnen we schemawijzigingen weergeven. Maar eerst moeten we Get-ADObject een zoekbasis geven, ofwel een gebied van de directory om te zoeken. We willen in het schema zoeken, dus we moeten de schemanaming context van onze directory kennen. Gelukkig is dat gemakkelijk te verkrijgen met behulp van de cmdlet Get-ADRootDSE. Als je Get-ADRootDSEuitvoert zonder parameters, zie je het pad voor de schemanaming context van de directory in deuitvoer.

Advertentie

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

 

PowerShell maakt het gemakkelijk om elke eigenschap, zoals schemanamingContext, te extraheren door middel van een punt en haakjes zoals hieronder weergegeven:

((Get-ADRootDSE).schemanamingcontext)

We kunnen bovenstaande code gebruiken als waarde voor de -SearchBase parameter in de cmdlet Get-ADObject. Maar er zijn nog een paar andere parameters die we moeten toevoegen. -SearchScope moet worden ingesteld op OneLevel, wat de directe kindobjecten van het pad zoekt dat is opgegeven in de -SearchBase parameter. Een jokerteken, *, wordt gebruikt als waarde van de -Filter parameter om alles terug te geven.

Tenslotte gebruiken we de -Properties parameter om de eigenschappen aan te geven die we als onderdeel van deuitvoer willen teruggeven. Zoals je kunt zien, ga ik de objectClass, name, whenChanged, en whenCreated eigenschappen extraheren.

Advertentie

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

We willen de gegevens groeperen die zijn geretourneerd op basis van datum. Hiervoor hebben we de datum whencreated nodig zonder de tijdinformatie. We kunnen de Select-Object cmdlet en een berekend eigenschap gebruiken om een nieuw object te maken met de benodigde gegevens in het juiste formaat. In de uitgebreide opdracht hieronder zie je dat ik het object dat is gegenereerd door Get-ADObject heb doorgegeven aan de Select-Object cmdlet. @ geeft een berekende eigenschap aan, die een label ‘Gebeurtenis’ heeft en een expressie die alleen de datum retourneert van de whenCreated eigenschap in een korte vorm.

$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()}}

Vervolgens gaan we het object dat is gemaakt door Select-Object doorgeven aan Sort-Object. En laat het object gegevens sorteren op de whenCreated eigenschap.

$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

Ten slotte leiden we het object door naar de Format-Table cmdlet. Het zal de eigenschappen weergeven in een tabel, gegroepeerd op Gebeurtenis, die we hebben gemaakt met behulp van de Select-Object cmdlet.

$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

Als we alle code samen uitvoeren, zullen we schema wijzigingen zien die vermeld staan in het opdrachtprompt venster. In mijn map is Exchange Server geïnstalleerd, dus we kunnen veel wijzigingen in het schema zien.

 

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