Le modifiche allo schema di Active Directory (AD) possono causare problemi operativi. In generale, lo schema non dovrebbe cambiare. Ma se viene installata una nuova applicazione che dipende da Active Directory, come Microsoft Exchange Server, allora lo schema deve essere aggiornato per supportare l’applicazione. Per proteggere l’integrità di AD, vale la pena verificare che vengano apportate solo modifiche approvate allo schema.
Utilizzando PowerShell, è facile generare un report delle modifiche allo schema di AD. Ma prima di eseguire il codice in questo articolo, installare il modulo PowerShell per Windows Server Active Directory. Il modulo PowerShell di Active Directory è installato per default sui controller di dominio (DC). Tuttavia, è buona prassi svolgere le attività amministrative quotidiane da un PC Windows 10 connesso al dominio.
Installare il modulo PowerShell per Active Directory di Windows Server
Il modulo AD PowerShell fa parte degli Strumenti di amministrazione remota del server (RSAT) per i Servizi di dominio Active Directory. Per installare gli strumenti RSAT AD, aprire un prompt dei comandi PowerShell con privilegi di amministratore locale e eseguire il comando seguente:
Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 –Online
Una volta installati gli strumenti, è possibile chiudere la finestra di PowerShell con privilegi elevati. Per eseguire il resto dei comandi in questo articolo, è sufficiente essere collegati a Windows 10 con un account che è membro del gruppo ‘Utenti di dominio’ di Active Directory.
Per ulteriori informazioni sull’installazione di RSAT in Windows 10, consultare Come installare gli Strumenti di amministrazione remota del server in Windows 10 su Petri.
Rapporto sui cambiamenti dello schema AD utilizzando PowerShell
Utilizzando il cmdlet Get-ADObject, possiamo visualizzare i cambiamenti dello schema. Ma prima dobbiamo fornire a Get-ADObject una base di ricerca, o in altre parole, un’area del directory da cercare. Vogliamo cercare lo schema, quindi dobbiamo conoscere il contesto di denominazione dello schema del nostro directory. Fortunatamente, è facile da recuperare utilizzando il cmdlet Get-ADRootDSE. Se esegui Get-ADRootDSE senza parametri, vedrai il percorso per il contesto di denominazione dello schema del directory nell’output.
PowerShell rende facile estrarre qualsiasi proprietà, come schemaNamingContext, utilizzando un punto e parentesi come mostrato di seguito:
((Get-ADRootDSE).schemanamingcontext)
Possiamo utilizzare il codice sopra come valore per il parametro -SearchBase nel cmdlet Get-ADObject. Ma ci sono un paio di altri parametri che dobbiamo aggiungere. -SearchScope dovrebbe essere impostato su OneLevel, che cerca gli oggetti figlio immediati del percorso fornito nel parametro -SearchBase. Un jolly, *, viene utilizzato come valore del parametro -Filter per restituire tutto.
Infine, utilizziamo il parametro -Properties per specificare le proprietà che vogliamo restituite come parte dell’output. Come puoi vedere, ho intenzione di estrarre le objectClass, name, whenChanged, e whenCreated proprietà.
$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemanamingcontext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated
Vogliamo raggruppare i dati restituiti per data. Per fare ciò, abbiamo bisogno della data whencreated senza informazioni sull’ora. Possiamo utilizzare il cmdlet Select-Object e una proprietà calcolata per creare un nuovo oggetto con i dati di cui abbiamo bisogno nel formato corretto. Nel comando espanso qui sotto, puoi vedere che ho collegato l’oggetto generato da Get-ADObject al cmdlet Select-Object. @ indica una proprietà calcolata, che ha un’etichetta ‘Evento’ e un’espressione che restituisce solo la data dalla proprietà whenCreated in forma abbreviata.
$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()}}
Successivamente, passeremo l’oggetto creato da Select-Object al cmdlet Sort-Object. E faremo in modo che ordini i dati dell’oggetto in base alla proprietà whenCreated.
$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
Infine, passeremo l’oggetto al cmdlet Format-Table. Visualizzerà le proprietà in una tabella, raggruppate per Evento, che abbiamo creato usando il cmdlet Select-Object.
$schema | Format-Table objectClass, name, whenChanged, whenCreated -groupby Event -autosize
$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
Se eseguiamo tutto il codice insieme, vedremo elencate le modifiche dello schema nella finestra del prompt dei comandi. Nella mia directory, è stato installato Exchange Server, quindi possiamo vedere molte modifiche allo schema.
Source:
https://petri.com/how-to-report-active-directory-schema-changes-using-powershell/