Erstellen Sie Active Directory OU-Berichte mit PowerShell

Erstellen Sie Active Directory OU-Berichte mit PowerShell. Eine Organisationseinheit (OU) ist ein Active Directory (AD)-Container, in dem Benutzer, Gruppen, Computer und andere OUs gespeichert werden können. Jede AD-Domäne kann ihre eigene hierarchische Organisationseinheitsstruktur haben. Dieser Artikel behandelt das OUManagement und wie man Windows PowerShell-Skripte verwendet, um OU-Berichte in AD zu erstellen, zu verschieben, zu erstellen, zu löschen und zu generieren und eine Gruppenrichtlinie an eine OU zu verknüpfen und durchzusetzen.

Erstellen Sie Active Directory OU-Berichte mit PowerShell

VoraussetzungenWenn wir die folgenden Beispiel-Skripte in diesem Artikel verwenden möchten, müssen wir die erforderlichen Komponenten installieren:

Wenn wir uns den folgenden Beispielskripten in diesem Artikel anschließen möchten, müssen wir die vorausgesetzten Komponenten installieren:

Nun, wie erstelle ich Active Directory OU-Berichte mit PowerShell? Lassen Sie uns das herausfinden.

Verständnis der Organizational Unit-Befehle

A Microsoft Active Directory domain container that can hold users, groups, and computers is an organizational unit (OU). It is the smallest unit to which a Windows system administrator can assign a Group Policy setting or account permission. An organizational unit may contain multiple OUs, but each attribute within the containing OU must be distinct.

Objekte aus anderen Domains können nicht in Organizational Units (OUs) von Active Directory enthalten sein. In den folgenden Abschnitten werden die grundlegenden Befehle zur Verwaltung von OUs behandelt.

OUs in Active Directory mit PowerShell erstellen

Wir können eine neue Organisations-Einheit in AD erstellen, indem wir den New-ADOrganizationalUnit Befehl verwenden und den Namen eines neuen OU-Objekts angeben. Windows PowerShell erstellt standardmäßig die Organisations-Einheit im Stamm des Domänencontrollers. Zum Beispiel erstellt der folgende Befehl eine OU namens IT auf dem Domänencontroller (DC):

New-ADOrganizationalUnit “IT

Wenn wir einen anderen OU-LDAP-Pfad benötigen, verwenden Sie den -Path Cmdlet-Parameter, um seine ausgezeichnete Bezeichnung (DN) anzugeben:

New-ADOrganizationalUnit “IT” –Path “OU=Users,DC=InfraSOS,DC=com”

Verschieben einer OU in einem Active Directory mit PowerShell

Wenn wir ein OU an einen anderen Ort verschieben müssen, verwenden wir das Move-ADObject Cmdlet. Es ist wichtig zu beachten, dass wir das Ziel-OU nicht vor versehentlicher Löschung schützen dürfen. Falls doch, verwenden Sie folgenden Befehl, um den Schutz zu entfernen:

Set-ADOrganizationalUnit -Identity "OU=IT,OU=Users,DC=InfraSOS,DC=Com" -ProtectedFromAccidentalDeletion $False

Nun können wir das OU an einen anderen Ort verschieben:

Move-ADObject -Identity "OU=Regions,OU=Managers,DC=InfraSOS,DC=Com" -TargetPath "OU=IT,DC=InfraSOS,DC=Com"

Umbenennen eines OU im Active Directory mit PowerShell

Verwenden Sie das Rename-ADObject Cmdlet, um eine Organisationseinheit umzubenennen. Der Identity-Parameter gibt das AD-Objekt an, das umbenannt werden soll, und erfordert entweder den DN oder die GUID. Zum Beispiel ändert dieser Befehl den Namen des IT-OU in Marketing:

Rename-ADObject -Identity "OU=Regions,OU=IT,DC=InfraSOS,DC=COM" -NewName Marketing

Wir können auch den Get-ADOrganizationalUnit Cmdlet mit dem -Filter Parameter verwenden, der den gesamten LDAP-Pfad zum OU nicht erfordert. Der Cmdlet durchsucht jedoch das gesamte AD, und der Skriptaktion wird auf alle Organizational Units mit dem Suchbegriff in ihren Namen angewendet:

Get-ADOrganizationalUnit -Filter "Name -eq 'Zones'" | Rename-ADObject -NewName Area

Wir werden über mehr Get OU-Befehle sprechen, sobald wir anfangen, Berichte zu erstellen.

Anwenden einer Gruppenrichtlinie auf ein OU in einem Active Directory mit PowerShell

Um einer Organisations-Einheit eine Gruppenrichtlinie zuzuweisen, können wir den New-GPLink Befehl verwenden, der das angegebene Gruppenrichtlinienobjekt (GPO) und die Organisations-Einheit verknüpft. Darüber hinaus können wir für den Link eine der folgenden Eigenschaften identifizieren:

  • Aktiviert – Wenn der Link den Status Aktiviert hat, werden die verarbeiteten Einstellungen des GPOs angewendet, wenn die Gruppenrichtlinie für den Standort, das Domäne und die OU.
  • Erzwungen – Wenn der Link den Status Erzwungen hat, können wir die OU in einem untergeordneten Container nicht blockieren.
  • Reihenfolge – Der Reihenfolge Status gibt die Priorität der GPO-Einstellungen an.

Zum Beispiel verbindet der folgende Befehl das Block GPO mit dem IT Organizational Unit, wobei der Link sowohl aktiviert als auch erzwungen ist:

New-GPLink -Name "Block" -Target "OU=Districts,OU=IT, DC=InfraSOS, DC=com" -LinkEnabled Yes -Enforced Yes

Benutzer und Computer zu einem neuen OU in einem AD mit PowerShell verschieben

Nachdem wir ein Organizational Unit erstellt und gegebenenfalls einen GPO darauf gelegt haben, werden wir es mit Benutzern und Computern füllen. Die Move-ADObject Cmdlet in PowerShell verschiebt jedes Objekt oder eine Menge von Active Directory-Objekten in ein anderes OU. Das Identity Parameter gibt an, welches Objekt umverteilt werden soll Active Directory Objekt oder Container.

Es ist wichtig zu beachten, dass wir den vollständigen LDAP-Pfad oder SID des Objekts eingeben müssen; wir können nicht dessen SamAccountName verwenden. Das folgende Beispiel zeigt, wie ein Benutzer zur IT-OU verschoben wird:

Move-ADObject -Identity "CN=marion,CN=Users,DC=InfraSOS,DC=com" -TargetPath "OU=IT,OU=Users,DC=InfraSOS,DC=com"

Verwenden Sie die genaue Syntax, um Computer Objekte zu verschieben. Beispielsweise wird der folgende Befehl den Computer DESKTOP-01 in den Computers-Container verschieben:

Move-ADObject -Identity "CN=DESKTOP-01,OU=Computers,DC=InfraSOS,DC=com" -TargetPath "CN=Workstations,DC=InfraSOS,DC=com"

Mass Move AD Computers and Users to Another OU

Wenn wir eine vordefinierte Liste von Objekten haben, die verschoben werden sollen, können wir sie als Textdatei speichern und dann in Active Directory importieren. Bereiten Sie Ihre Liste vor, indem Sie ein AD-Objekt pro Zeile hinzufügen. Die Textdatei, die die Liste enthält, sollte ungefähr so aussehen:

Verwenden Sie diesen PowerShell-Skript, um AD-Benutzerkonten zu verschieben, die in einer Textdatei aufgeführt sind:

$destOU =  "OU=Users,OU=IT,DC=InfraSOS,DC=com"
$usersList = Get-Content -Path "C:\temp\users.txt"

$usersList  | ForEach-Object {
     $userName  = (Get-ADUser -Identity $_.Name).distinguishedName
     Move-ADObject  -Identity $userName  -TargetPath $destOU
 }

Um AD-Computerkonten zu verschieben, die in einer Textdatei aufgeführt sind, verwenden Sie das folgende PowerShell-Skript:

$computers = Get-Content -Path "C:\Temp\Computers.txt"

$destOU =  "OU=Computers,OU=IT,DC=InfraSOS,DC=com"
ForEach( $computer in $computers){
    Get-ADComputer $computer |
    Move-ADObject -TargetPath $destOU
}

Entfernen einer OU aus Active Directory mit PowerShell

Der Remove-ADOrganizationalUnit Cmdlet entfernt eine OU. Wir müssen jedoch die OU nicht vor versehentlicher Löschung schützen. Mit den Get-ADOrganizationalUnit und Set-ADOrganizationalUnit Cmdlets können wir die unbeabsichtigte Löschung für jede OU mit dem Wort Zones in ihrem Namen entfernen:

Get-ADOrganizationalUnit -filter "Name -eq 'Zones'" | Set-ADOrganizationalUnit  -ProtectedFromAccidentalDeletion $False

Verwenden Sie das folgende Cmdlet, um jede OU, die Zones in ihrem Namen enthält, aus AD zu entfernen:

Get-ADOrganizationalUnit -filter "Name -eq 'Zones'" | Remove-ADOrganizationalUnit –Recursive

Das System wird uns auffordern, die Löschung zu bestätigen:

Beachten Sie, dass das -Recursive -Parameter sowohl die OU als auch alle ihre untergeordneten Objekte entfernt. Das AD löscht die untergeordneten Objekte auch, wenn Schutz vor Löschung für sie eingeschaltet ist.

Verwalten von Organisationseinheiten in AD

Nachdem wir die grundlegenden Befehle und Parameter betreffend Organisationseinheiten besprochen haben, werden wir weiter diskutieren, wie wir OU Berichte mit PowerShell erstellen können.

Eine Liste aller OUs mit PowerShell abrufen

Wir werden den Get-ADOrganizationalUnit Cmdlet verwenden. Zuerst sortieren wir nach CanonicalName. Dieser Befehl zeigt eine OU-Struktur, die einfacher zu lesen ist.

Get-ADOrganizationalUnit -Properties CanonicalName -Filter * |
Sort-Object CanonicalName |
Format-Table CanonicalName, DistinguishedName

Im Folgenden finden Sie ein Beispiel Ausgabe in PowerShell, wenn wir den Befehl ausführen:

Die Ausgabe mit allen OUs in AD ist eine ausgezeichnete Liste. Aber wie können wir feststellen, ob die OU Benutzer enthält?

Erhalten Sie eine Liste aller OUs, einschließlich der Benutzeranzahl, mit PowerShell

Wir verwenden gerne PowerShell, um eine Liste der OUs zu erhalten, einschließlich der Benutzeranzahl. Dieser Befehl wird uns sagen, ob es Benutzer in der OU gibt.

Get-ADOrganizationalUnit -Properties CanonicalName -Filter * |
Sort-Object CanonicalName |
ForEach-Object {
    [pscustomobject]@{
        Name          = Split-Path $_.CanonicalName -Leaf
        CanonicalName = $_.CanonicalName
        UserCount     = @(Get-AdUser -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel).Count
    }
}

Es wird eine Ausgabe mit der UserCount-Spalteneigenschaft anzeigen. Wenn der Wert der UserCount-Eigenschaft null ist, enthält die OU keine Benutzer. Es wird nicht angezeigt, wenn die OU ein Computersystemobjekt enthält. Dieser Befehl überprüft und zeigt nur eine Benutzeranzahl an.

Exportieren von OUs in AD in eine CSV-Datei mit PowerShell

Wir möchten nun, dass die Liste der OUs in AD exportiert wird, nachdem wir sie gesehen haben. Daher wird das Skript PowerShell verwenden, um die Organizational Units zu erhalten und sie in eine Textdatei zu exportieren.

$results = Get-ADOrganizationalUnit -Properties CanonicalName -Filter * | Sort-Object CanonicalName |
ForEach-Object {
    [pscustomobject]@{
        Name          = Split-Path $_.CanonicalName -Leaf
        CanonicalName = $_.CanonicalName
        UserCount     = @(Get-AdUser -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel).Count
    }
}
$results | Out-File C:\export_OUs.txt -Encoding UTF8

Ändern Sie die letzte Zeile in folgenden Befehl, wenn wir in eine CSV-Datei exportieren möchten:

$results | Export-Csv -Path C:\export_OUs.csv -NoTypeInformation -Encoding UTF8

Finden Sie die exportierte Datei an der angegebenen Standortnach Ausführung des obigen Befehls.

Vielen Dank, dass Sie Create Active Directory OU Reports with PowerShell gelesen haben. Wir werden jetzt abschließen.

Abschluss zu Create Active Directory OU Reports with PowerShell

Jetzt, da wir gelernt haben, wie man OUs in Active Directory mit PowerShell-Skripten verwaltet, können wir verschiedene Vorgänge im Zusammenhang mit der OU Verwaltung automatisieren und entsprechende Berichte generieren. Stellen Sie bitte sicher, dass Sie vor dem Ausführen dieser Befehle die Active Directory Papierkorb-Funktion aktivieren, um etwaige versehentliche Löschungen leicht rückgängig machen zu können. Es ist auch ratsam, alle Änderungen an Ihren Organisationseinheiten sorgfältig zu verfolgen.

Schauen Sie sich auch unseren PowerShell-Inhalt in unserem Blog hier an.

Source:
https://infrasos.com/create-active-directory-ou-reports-with-powershell/