Powershell: Set-ADUser im Einsatz

26. Februar 2013

Ein tolles Werkzeug für das Bearbeiten von Konten im Active Directory mit Hilfe der Powershell stellt Mark Minasi mit Set-ADUser vor. Es ergänzt Cmdlets wie Enable-adaccount, Unlock-adaccount oder Clear-ADAccountExpiration.

Das Arbeiten am Active Directory (AD) gehört zu den Hauptaufgaben eines Administrators im Windows-Umfeld. Und es eignet sich kaum etwas besser als die Powershell, wenn derartige Aktionen an vielen Konten auszuführen sind.

Dazu wurden bisher bereits einige Cmdlets der Powershell gezeigt, die sich dazu eignen. Im Beitrag „Powershell: Aus Einzeilern werden Power-Tools“ wurden bereits einige wichtige Cmdlets gezeigt:

  • Enable-adaccount: Dieser Befehl aktiviert ein zuvor deaktiviertes Konto erneut.
  • Unlock-adaccount: Dieses Kommando entsperrt ein gesperrtes Konto.
  • Clear-ADAccountExpiration: Es ist bei einem Konto im Active Directory (AD) möglich, einen Zeitpunkt vorzugeben, an dem das Konto nicht mehr gültig ist. Diese Charakteristik des AD-Kontos lässt sich mit dem Cmdlet Clear-ADAccountExpiration wieder aufheben.

Das sind sehr nützliche Tools, aber in diesem Beitrag geht es vor allem um das Cmdlet Set-ADUser. Es gilt beim Bearbeiten von Informationen in einem AD-Konto als ein Universal-Werkzeug.

Der Befehl wird wie folgt verwendet:

set-aduser -identity IDinfo -changeparameters

Dabei steht IDinfo – ganz so wie der Parameter -identity beim get-aduser – entweder der „Samaccountname“ eines Objekts oder sein DN (Distinguished Namen), oder seine Objekt-GUID oder seine SID.

Die Option changeparameters bezieht sich generell auf einen ganzen Stapel  von Parametern. Damit lassen sich dann Dutzende von AD-Attributen (wie etwa der Titel, die Beschreibung, und so weiter) ändern.

Um zum Beispiel den Anzeigenamen („displayname“) eines Kontos mit dem Samaccountnamen JulesM in Julie Marsella zu ändern, ist der folgende Befehl nötig:

set-aduser julesm -displayname "Julie Marsella"

Die Entwickler des AD-Modules der Powershell haben bereits eine Menge von attributspezifischen Parametern vorgesehen – wie etwa -Company, -Givenname, -description und viele andere.

Daher wird man meist herausfinden, dass es bei set-aduser bereits den eingebauten Parameter gibt, der zu der Information passt, die man ändern möchte. In den meisten Fällen muss man nur einfache Zeichenketten übergeben, daher kann man viele Attribute auf einmal modifizieren, wie etwa:

set-aduser MartinT -description "Debugger" -Initials "R" -surname "Thomas"

Wie so oft hat das Powershell-Team das Leben für die Administratoren leichter gemacht. So zum Beispiel muss man in den meisten Tools für den “Manager” eines Kontos als Wert den kompletten DN eingeben – doch das ist hier nicht der Fall.

Angenommen JulesM wäre der Manager von MartinT, dann würde das folgende Kommando

set-aduser MartinT -manager JulesM

zur Folge haben, dass man das dem AD so ganz einfach mitgeteilt hat,  und dabei nicht beispielsweise

-manager "cn=julesm,cn=users,dc=bigfirm,dc=com"

angeben muss.

Eine ähnliche Konstellation ergibt sich wie folgt: Angenommen man weiß, dass der AD Attributname für den Familiennamen sn lautet – was wohl eine Abkürzung von „surname“ (Familienname) ist. Das führt oftmals zu Stirnrunzeln, denn das AD-Attribut für den Vornamen lautet „givenname“ und das wird immer ausgeschrieben. Warum dann ein „sn“ anstelle von „surname“?

Auch hier haben die Entwickler der Powershell die Sache vereinfacht: Es wurde ein „synthetisches“ Attribut erzeugt: „Surname“ anstelle von „sn“. Damit wird das Ändern des Familiennamens umgebaut:

Gibt man den folgenden Befehl ein,

set-aduser MartinT -sn "Thomas"

gibt es eine Fehlermeldung.

Dagegen wird der folgende Befehl korrekt ablaufen – auch wenn man nun das synthetische Argument verwendet:

set-aduser MartinT -surname "Thomas"

Und das ist nicht das einzige synthetische Attribut.

Zum Beispiel erweist sich “LastLogonDate” als ein Glücksfall, wenn man herausfinden möchte, wer sich seit einer gewissen Zeit nicht mehr angemeldet hat. Der AD-Bereich für ein Email-Konto lautet innerhalb des AD „mail“, doch man muss „emailaddress“ verwenden anstelle von -mail, um die Mail-Adresse für ein Konto zu ändern.

Diese Diskussion führt zu einem anderen wichtigen Punkt: Wie sieht es denn mit den anwenderspezifischen AD-Attributen aus? Wie kann ich den Wert eines AD-Attributes setzen, den eine Applikation  eines Drittherstellers dem AD hinzugefügt hat – wie zum Beispiel „shoesize“.

In Fällen wie diesen kann der Administrator den Parameter -replace verwenden. Beliebige AD-Attribute lassen sich wie folgt modifizieren:

set-aduser identifier -replace @{attributename="newvalue";"attributename="newvalue"…}

Um zum Beispiel den „givenname“ und den „userprincipalname“ von Martin zu ändern, ist der folgende Befehl nötig:

set-aduser MartinT -replace @{userprincipalname="martint@bigfirm.com";givenname="martin"}

Dabei ist noch auf eine Sache hinzuweisen: Beim Einsatz von -replace müssen die Attributnamen zu den internen AD-Werten passen. Der Grund dafür dürfte sein, dass dabei einige LDAP-Abfragen unter der Oberfläche abgesetzt werden. Daher muss man, wenn man die Mailadresse und den Manager von Martin setzen möchte, den internen AD-Attributnamen (mail) angeben und dabei den Namen des Managers als DN angeben, wie etwa bei:

set-aduser MartinT -replace @{mail="martint@bigfirm.com";manager="cn=julesm,cn=users,dc=bigfirm,dc=com}

Set-aduser ermöglicht es aber auch, einen bestehenden Wert komplett zu löschen. Dazu muss der Administrator den Parameter -clear verwenden:

set-aduser MartinT -clear mail

Und auch hier gilt: Der Parameter -clear benötigt die internen LDAP-Namen der AD-Attribute.

Einige AD-Attribute erlauben auch mehr als nur einen Wert – wie etwa bei „othermobile“. Sie können mithilfe von -add gesetzt werden wie zum Beispiel im folgenden Befehl:

set-aduser martint -add @{othermobile="+1724333-5544"}

Damit könnte man beliebig viele zusätzliche Telefonnummern hinzufügen und das AD würde sie abspeichern. Anzeigen lassen sicjh sich dann mit dem folgenden Befehl, der das Cmdlet get-aduser benutzt:

get-aduser martint -pr othermobile | select othermobile

Um die Satz von Kommandos abzurunden, der mit -replace, -clear und -add begonnen hat, gibt es noch -remove. Damit kann man Einträge aus einer Liste löschen. Um die erste Telefonnummer von Martins Liste „othermobile“ zu entfernen, kann man den folgenden Befehl eingeben:

set-aduser martint -remove @{othermobile="+1724333-5545"}

Mit set-aduser bekommt der Administrator eine elegante Möglichkeit, AD-Attribute zu ändern.

Mark Minasi

Lesen Sie auch