Jürgen Fälchle - stock.adobe.c
Wie Sie AD-Attribute und -Werte mit PowerShell bearbeiten
Mithilfe der PowerShell können Administratoren Werte oder Attribute im Active Directory verwalten und verändern. Wie Sie dafür Skripte verfassen, zeigen wir in diesem Ratgeber.
Mithilfe von PowerShell können Administratoren viele Arbeitsschritte automatisieren, wie beispielsweise die Verwaltung von Werten und Attributen in Active Directory (AD). Nicht nur können Sie so Skripte automatisieren, sondern auch generelle Änderungen sind schneller durchführbar.
In diesem Artikel erklären wir den Prozess dafür, wie Sie ein Skript zum Zuweisen von Benutzerattributen schreiben. Die Vorgehensweise lässt sich jedoch auch auf viele andere Active-Directory-Verwaltungsaufgaben übertragen.
Wie Sie Benutzerdaten auslesen und mit PowerShell ändern
Sie können mit Benutzerdaten in der von Ihnen verwalteten Domäne mit Get-ADObject auslesen. Die einzelnen Daten sind bei Benutzerobjekten auf der Registerkarte Attribut-Editor zu finden. Um bestimmte Daten aus Active Directory auszulesen, zum Beispiel displayName und description, verwenden Sie den folgenden Befehl:
Get-ADObject -Filter "ObjectCategory -eq 'person'" -SearchBase „DC=Joos,DC=int“ -Properties description, displayName
Sie benötigen diese Informationen, um sie zum Beispiel über eine Variable in andere Befehle zu kopieren.
PowerShell kann mit Set-ADObject in Active Directory schreiben. Angenommen, Sie möchten allen Benutzerobjekten oben die Beschreibung Standort Bad Wimpfen zuweisen, sieht der Befehl folgendermaßen aus:
Get-ADObject -Filter "ObjectCategory -eq 'person'" -SearchBase „DC=Joos,DC=int“ -Properties description, displayName | Set-ADObject -description „Standort Bad Wimpfen“
Um die Änderungen anzuzeigen, verwenden Sie wieder Get-ADObject:
Get-ADObject -Filter "ObjectCategory -eq 'person'" -SearchBase „DC=Joos,DC=int“ -Properties description
Es ist auch möglich, alle Attribute eines einzelnen Benutzers auszulesen:
Get-ADUser -Identity Joost -Properties *
Die angezeigten Attribute lassen sich anschließend ändern. Wie das geht, zeigen die nächsten Abschnitte in diesem Beitrag.
Mit dem folgenden Befehl fragen Sie Benutzer ab, bei denen die Beschreibung auf Standort Bad Wimpfen gesetzt ist:
Get-ADUser -Filter "description -eq ' Standort Bad Wimpfen'"
Es ist auch möglich, nur AD-Benutzer in einer bestimmten Organisationseinheit auszulesen:
Get-ADUser -Filter * -SearchBase "OU=Einkauf,OU=Benutzerkonten,DC=Joos,DC=int"
Dieses Ergebnis lässt sich weiter anpassen:
Get-ADUser -Filter "description -eq ' Standort Bad Wimpfen'" | Set-ADUser -description „Standort Hof Erbach“
Außerdem können Sie prüfen, ob Ihr Befehl erfolgreich durchgeführt wurde.
Get-ADObject -Filter "ObjectCategory -eq 'person'" -SearchBase „DC=Joos,DC=int“ -Properties description
Diese Vorgehensweise funktioniert mit sämtlichen Attributen in Active Directory, die in AD-Benutzer und -Computer bei Attribut-Editor angezeigt werden.
Wenn mehrere Benutzer gleichzeitig geändert werden sollen, ist das mit PowerShell ebenfalls problemlos möglich:
Get-ADUser -Filter 'Name -like "*"' -SearchBase 'OU=HumanResources,OU=UserAccounts,DC=FABRIKAM,DC=COM' -Properties DisplayName | % {Set-ADUser $_ -DisplayName ($_.Surname + ' ' + $_.GivenName)}
Der obenstehende Befehl setzt die Anzeigenamen der Benutzer auf eine Kombination aus den jeweiligen Vor- und Nachnamen.
Steuerung von Multi-Valued-Werten
Einige Attribute in Active Directory ermöglichen mehrere Werte. In diesem Fall ist es sinnvoll, die vorhandenen Werte nicht zu überschreiben, sondern zu ergänzen. Zum Anpassen der Werte stehen für Cmdlets, die Parameter -Add, -Replace und -Remove zur Verfügung. Während -Add neue Werte zu einem Attribut hinzufügt, entfernt -Remove einzelne Werte, der Rest bleibt bestehen. Mit -Replace können Sie einzelne Daten komplett ersetzen, statt sie nur hinzuzufügen.
Neben den Standard-Attributen können Sie auch mit einem CustomAttribute in AD arbeiten. Das ermöglicht das Erstellen von benutzerdefinierten Werten für Benutzer-, Computer- oder Gruppenkonten. Um deren Werte abzufragen, können Sie folgenden Befehl verwenden:
Get-ADUser -Properties * -Filter * | Select-Object samaccountname,customattribute1
Ein bekanntes Beispiel ist das Attribut ProxyAdresses in Active Directory. Dieses kommt vor allem bei der Verwaltung von Microsoft Exchange zum Einsatz. Das Attribut speichert alle E-Mail-Adressen eines Benutzers. Dabei handelt es sich um ein typisches Multi-Valued-Attribut – also ein solches mit mehreren Werten. Es ist möglich, diese Werte mit folgendem Befehl zu ändern:
Set-ADUser -Identity "Joost" -Replace @{ ProxyAddresses = @("[email protected]","[email protected]","[email protected]")}
Und mit einem weiteren Befehl lassen Sie sich die Änderung anzeigen:
Get-ADUser -Identity Joost -Properties *
Um einzelne Werte aus dem Attribut zu entfernen, zum Beispiel eine der zugeteilten E-Mail-Adressen, nutzen Sie:
Set-ADUser -Identity "Joost" -Remove @{ ProxyAddresses = @("[email protected]")}
Der Befehl löscht die E-Mail-Adresse [email protected] aus dem Attribut. Die anderen Werte bleiben erhalten. Auf dem gleichen Weg können Sie einzelne Werte hinzufügen:
Set-ADUser -Identity "Joost" -Add @{ ProxyAddresses = @("[email protected]")}
Auch das lässt sich in der PowerShell überprüfen:
Get-ADUser -Identity Joost -Properties *
Außerdem können Sie diese Werte kopieren – entweder auf ein neues Benutzerkonto, oder auf bereits vorhandene Konten. Dazu speichern Sie die alten Daten zunächst in einer Variablen:
$ProxyAddresses = (Get-ADUser -Identity "Joost" -Properties "ProxyAddresses").ProxyAddresses
Sie überprüfen die Werte mit $ProxyAdresses. Um diese Werte auf ein neues Benutzerkonto zu kopieren, kann zum Beispiel folgender Befehl verwendet werden:
Set-ADUser -Identity "NewUser" -Replace ([Array] $ProxyAddresses)
Wenn Sie diesen Vorgang automatisieren möchten, erstellen Sie dafür eine CSV-Datei, in die Sie die alten und neuen Benutzerkonten aufnehmen. Danach können Sie mit einem PowerShell-Skript sämtliche Daten in einem Rutsch kopieren:
UserList = Get-Content "C:TempUsersToCopyProxyAddresses.CSV"
foreach ($User in $UserList)
{
$OldUserProxyAddresses = (Get-ADUser -Identity ($User.OldSamAccountName) -Properties "ProxyAddresses").ProxyAddresses
Set-ADUser -Identity ($User.NewSamAccountName) -Replace ([Array] $OldUserProxyAddresses)