Bents Blog

 

Ein IT Blog mit Themen aus dem Windows Server Umfeld.

PowerShell: Benutzer-Eigenschaften im Active Directory auslesen oder ändern

Oftmals kommt es vor, dass man als Administrator verschiedenste Eigenschaften mehrerer Benutzer im Active Directory anzeigen lassen möchte, ohne – auf umständliche Weise – jeden Benutzer einzeln auszuwählen und über dessen Eigenschaften auf mehrere Reitern nach der gewünschten Information zu suchen.

Doch nicht nur die Suche, auch die Änderung mehrerer Eigenschaften, die für viele oder alle Benutzer identisch sein sollen, ist über die manuelle Eingabe extrem aufwendig. Befinden sich die Benutzer dann noch geordnet in unterschiedlichen Organisationseinheiten (OU), ist die Administration mit Hilfe der MMC Active Directory-Benutzer und Computer nahezu unbrauchbar.

Umsetzung

Abhilfe schafft hier der Einsatz der Windows PowerShell. Bevor diese für die oben angesprochenen Aufgaben verwendet werden kann, muss nach dem Start der PowerShell zunächst das Modul für die Active-Directory Befehle geladen werden:

Import-Module ActiveDirectory

Danach stehen die folgenden Befehle für die beschriebenen Zwecke zur Verfügung.

Auslesen von Benutzer-Eigenschaften

Um nun bestimmte Eigenschaften von Benutzern innerhalb einer Domäne, oder in einer darin befindlichen OU anzuzeigen, verwendet man folgenden PowerShell-Befehl (im diesem Beispiel das Home-Verzeichnis und den Profil-Pfad):

Get-ADUser -Filter {name -like „*“} -SearchBase „OU=[Organisationseinheit],DC=[Domäne],DC=[TLD]“ -Properties HomeDirectory,ProfilePath

Die Option -Filter gilt für alle Benutzer, der Schalter -SearchBase zeigt auf die Stelle im Active Directory an der gesucht werden soll und mit -Properties werden die relevanten Eigenschaften ausgewählt.

Die vollständige Liste aller Eigenschaften eines Benutzers die via -Properties ausgewählt werden können, erhält man mit dem folgenden Befehl:

Get-ADUser -Identity [Benutzername] -Properties * | fl

Um die vorherige Liste gleich zur Weiterverarbeitung oder Auswertung verwenden zu können, bietet sich der Export in eine CSV-Datei an, die anschließend in Microsoft Excel formatiert werden kann:

Get-ADUser -Filter {name -like „*“} -SearchBase „OU=[Organisationseinheit],DC=[Domäne],DC=[TLD]“ -Properties HomeDirectory,ProfilePath | Export-Csv [Pfad und Dateiname]

Eine weitere Funktion interessante Funtkion ist die grafische Ausgabe bzw. Darstellung über das sogenannte Out-GridView. Um selbiges nutzen zu können, muss zuvor allerdings im Server-Manager das Feature Windows Powershell Integrated Scriptin Environment (ISE) installiert werden:

Danach kann der Befehl wie folgt verwendet werden:

Get-ADUser -Filter {name -like „*“} -SearchBase „OU=[Organisationseinheit],DC=[Domäne],DC=[TLD]“ -Properties HomeDirectory,ProfilePath | Out-GridView

Im Ergebnis öffnet sich ein neues Fenster, in dem sich die Spalten manuell aktivieren, deaktivieren und beliebig ordnen lassen – für eine schnelle Überblicksgewinnung ideal!

Der Inhalt eines solchen Grids lässt sich selbstverständlich markieren und bspw. direkt (via Copy & Paste) in Microsoft Excel einfügen und weiterverarbeiten.

Setzen von Benutzer-Eigenschaften

Das Setzen bzw. die Änderung von Eigenschaften bei mehreren Benutzer gleichzeitig, ist natürlich nur für entsprechende Felder wirklich sinnvoll. Dies könnten bspw. die Eigenschaften Adresse, Anschrift und Internetseite sein. Mit dem Befehl

Set-ADUser -Identity [Benutzername]  -StreetAddress „Firmenstraße 123“ -HomePage „http://www.internetseite.de“

können für einen bestimmten Benutzer mehrere Eigenschaften in einem Schritt geändert oder gesetzt werden.

Im folgenden Beispiel werden nun diese und einige Felder mehr automatisch für die Benutzer gesetzt, die vorher mit dem Kommando Get-ADUser eingeschränkt werden, in meinem Beispiel alle:

Get-ADUser -Filter {name -like „*“} -SearchBase „OU=[Organisationseinheit],DC=[Domäne],DC=[TLD]“ | Set-ADUser -HomePage „http://www.internetseite.de“ -StreetAddress „Firmenstraße 123“ -City „Musterstadt“ -PostalCode „01234“ -Country „DE“ -State „Bundesland“ -Fax „+49 (0) 815 / 12345678“ -Company „Musterfirma GmbH“

Natürlich ist der obige Befehl vor Ausführung genau zu prüfen und ggf. vorher mit einzelnen Benutzern zu testen, um böse Überraschungen zu vermeiden, da die PowerShell-Kommandos ohne Nachfrage ausgeführt werden.

Fazit

Die Windows PowerShell ist ein extrem mächtiges Werkzeug und wird von Microsoft nicht umsonst mit jeder neuen Windows Version erweitert und gepflegt – nahezu jeder Windows-Administrator ist vermutlich schon einmal damit in Berührung gekommen. Auf Grund der Vielzahl an Befehlen und den daraus resultierenden Möglichkeiten habe ich die obigen Kommandos schon für meine eigene Wiederverwendung dokumentiert. Wenn ich damit zusätzlich auch anderen helfen konnte, freut mich das natürlich. Wie bei allen meinen Beiträgen gilt: Bei Tipps, Vorschlägen sowie Fragen oder Kritiken hinterlasst bitte einen Kommentar.

Einen Blog am Leben zu erhalten kostet Zeit und Geld. Da ich auf meiner Seite weder Werbung einbinde, noch andersweitige Zuwendungen erhalte, freue ich mich über jede kleine Spende. Einfach und unkompliziert geht das über PayPalMe. Du unterstützt damit diesen Blog. Vielen Dank.

15 Kommentare für “PowerShell: Benutzer-Eigenschaften im Active Directory auslesen oder ändern”

  • Klaus

    Hallo,
    Sehr nette Dokumentation. Nur, wie sieht das Script aus wenn ich eine Benutzereigenschaft für 10 verschiedene User die in unterschiedlichen OU’s beheimatet sind, ändern will.

    Vielen Dank im Vorraus für deine Hilfe

  • Bent Schrader

    Hallo Klaus,

    dann setzt Du am Besten mit der Searchbase eine Ebene über den OUs an, in denen sich die User befinden. Nun musst Du nur noch mit dem Get-ADUser Befehl die Nutzer nach einer bestimmten Eigenschaften filtern – falls die User eine gleiche haben? Sonst ist tatsächlich Handarbeit angesagt …

    Gruß Bent

  • Gert Korn

    Hallo,
    das kleine Script ist genau das was ich im Moment benötige. Leider bekomme ich immer den Fehler Syntax Error bei -name…..
    Was mache ich da falscj ?

  • Gert Korn

    Hallo,
    ich habe es heschafft. Allerdings funktioniert es nur wenn man als Filter nur „*“ angibt und den Ausdruck weglässt. Möglicherweise ein Versionsproblem.
    Danke.

  • Mathieu

    Wie kann ich mir denn alle User (Samaccountname) anzeigen lassen, die im Description Feld der Wert XYZ stehen haben?

  • Bent Schrader

    Hallo Mathieu,

    hast Du es schon einmal mit

    Get-ADUser -Filter {Description -like „*XYZ*“}

    probiert?

    Gruß,
    Bent

  • Timbo

    Hi Bent,
    danke für das Skript, das funktioniert schon ganz gut.
    Jetzt hab ich aber folgendes vor. Ich will das Attribut Mobile nur für ganze OUs ändern.
    Heißt, der eigentliche Wert soll drinbleiben, nur dem Wert vorangestellt werden soll ein + oder eine 00 … aktuell habe ich nämlich in vielen OUs Syntaxfehler bei der Handynummer von Benutzern, damals wurden die Nummern mit 49 172 8150815 als Beispiel eingetragen. Das versuche ich nun zu korrigieren. Hast du da einen Rat parat ?
    Gruss

    Timbo

  • Bent Schrader

    Hallo Timbo,

    eigentlich ist das ja nur eine simple Zeichenkettenoperation. Du musst zunächst das entsprechende Feld auslesen, das + voranstellen und die neue Zeichenkette abspeichern.
    Habe ich das so richtig verstanden?

    Gruß Bent

  • BERD

    Hi Bent
    hab es gerade probiert, aber es läd das AD-Element nicht ein. Woran kann das liegen?
    Gruß

  • Bent Schrader

    Hallo Berd,

    ein paar mehr zusätzliche Informationen wären überaus hilfreich, wie lautet den die Fehlermeldung?

    Gruß Bent

  • juicee

    Hi Bent
    Netter Artikel – besten Dank!
    Wie kann ich eine CSV erstellen die folgendes beinhaltet: User, Member Of (Berechtigungen) und dies für alle User die in versch. OU’s sind?
    Besten Dank im Voraus & Gruss

  • Bent Schrader

    Hallo Juicee,

    damit bekommst Du was Du brauchst:

    Foreach ($User in $(Get-ADUser -Filter {name -like „*“} -SearchBase „DC=test,DC=lab“ -Properties {MemberOf})) { If ($User.MemberOf) {Foreach ($Group in $User.MemberOf) {$User.SamAccountName+“:“+$Group}} else {$User.SAMAccountName+“:kein Mitglied“}}

    Nur noch die Domäne anpassen und noch Export-CSV dahinter.

    Gruß Bent

  • juicee

    Hallo Bent
    Besten Dank für den Script. Funktioniert und gibt den Accountnamen aus. Wie kann ich die Ausgabe mit First Name und Last Name ergänzen?
    Besten Dank im Voraus & Gruss
    juicee

  • Bent Schrader

    In diesem Falle so:

    Foreach ($User in $(Get-ADUser -Filter {name -like „*“} -SearchBase „DC=test,DC=lab“ -Properties {MemberOf})) {If ($User.MemberOf) {Foreach ($Group in $User.MemberOf) {$User.SamAccountName+“(„+$User.SurName+“,“+$User.Givenname+“):“+$Group}} else {$User.SAMAccountName+“(„+$User.SurName+“,“+$User.Givenname+“):kein Mitglied“}}

    Für weitere Anfragen nehme ich dann PayPal-Spenden an :)

  • ThomasT

    Hallo zusammen,

    ich möchte (im zusammenhang mit der deaktivierung) die ou eines users ändern.
    kann mir jemand sagen, wie ich den pfad ändern kann?
    ich habe herausgefunden wie man fast alles ändern kann, aber nicht die ou bzw den pfad.

    kann mir da jemand helfen?
    danke im voraus

Einen Kommentar hinterlassen:

Antispam Bee hat Bent's Blog vor 410.433 Spam-Kommentaren bewahrt.