killtec
Goto Top

Benutzerobjekte im AD anpassen

Hallo,
ich will im AD einmal "aufräumen".
Ich will alle Benutzerobjekte (sind aktuell Vorname Nachname) anpassen, indem der Displayname und der CN angepasst wird. Es soll dann Nachname, Vorname werden.

Das ganze möchte ich per Powershell machen und habe dazu auch schon was gefunden / gebastelt.

Hier ist mein Code:
get-aduser -Filter * | ?{$_.Surname -ne $null -and $_.Givenname -ne $null} | %{set-aduser $_.SamAccountName -DisplayName "$($_.Surname), $($_.Givenname)"}  
get-aduser -Filter * | ?{$_.Surname -ne $null -and $_.Givenname -ne $null} | %{Rename-ADObject $_.SamAccountName -NewName "$($_.Surname), $($_.Givenname)"}  

Teil 1 funktioniert soweit (erstmal mit einem User getestet).
Teil 2 funktioniert leider nicht.

PS C:\WINDOWS\system32> get-aduser vorname.nachname | ?{$_.Surname -ne $null -and $_.Givenname -ne $null} | %{Rename-ADO
bject $_.SamAccountName -NewName "$($_.Surname), $($_.Givenname)"}  
Rename-ADObject : Unter "DC=mydom,DC=local" kann kein Objekt mit der ID "vorname.nachname" gefunden werden.  
In Zeile:1 Zeichen:87
+ ...  $null} | %{Rename-ADObject $_.SamAccountName -NewName "$($_.Surname) ...  
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (vorname.nachname:ADObject) [Rename-ADObject], ADIdentityNotFoundExcepti
   on
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,M
   icrosoft.ActiveDirectory.Management.Commands.RenameADObject

Das Objekt existiert definitiv.

PS C:\WINDOWS\system32> get-aduser vorname.nachname


DistinguishedName : CN=Vorname Nachname,OU=Benutzer,DC=mydom,DC=local
Enabled           : True
GivenName         : Vorname
Name              : Vorname Nachname
ObjectClass       : user
ObjectGUID        : bf1b67b9-dae1-4842-833d-95c49acc56ec
SamAccountName    : vorname.nachname
Surname           : Nachname
UserPrincipalName : vorname.nachname@mydom.local

Ich sehe gerade leider nicht, wo der Fehler liegt face-sad
Sieht jemand von euch ihn, oder habt ihr eine andere Idee, wie ich das machen kann?

Gruß

Content-ID: 346045

Url: https://administrator.de/forum/benutzerobjekte-im-ad-anpassen-346045.html

Ausgedruckt am: 03.04.2025 um 07:04 Uhr

133883
133883 11.08.2017 aktualisiert um 10:16:38 Uhr
Goto Top
Weil du bei Rename-AdObject den DistinguishedName und nicht den SamAccountname angeben musst, deswegen findet er kein Objekt face-smile.

Gruß
killtec
killtec 11.08.2017 um 14:01:31 Uhr
Goto Top
OK, d.h. wenn ich das später über alle laufen lassen will, mache ich das dann so?:
get-aduser -Filter * | ?{$_.Surname -ne $null -and $_.Givenname -ne $null} | %{set-aduser $_.SamAccountName -DisplayName "$($_.Surname), $($_.Givenname)"}  
get-aduser -Filter * | ?{$_.Surname -ne $null -and $_.Givenname -ne $null} | %{Rename-ADObject $_.SamAccountName -NewName "$($_.Surname), $($_.Givenname)"}  

Gruß
133883
133883 11.08.2017 aktualisiert um 14:20:20 Uhr
Goto Top
Nö, ist so ja immer noch gleich. Wieso schreibe ich wohl "DistinguishedName"??
Also mal bitte lesen
https://technet.microsoft.com/de-de/library/ee617225.aspx
killtec
killtec 14.08.2017 um 12:06:29 Uhr
Goto Top
Ich hab noch ein bisschen gebastelt...

get-aduser -Filter * | ?{$_.Surname -ne $null -and $_.Givenname -ne $null} | Rename-ADObject -NewName "$($_.Surname), $($_.Givenname)"  

Die beiden Variablen bleiben jedoch leer und mein CN ist nur noch "," was natürlich ungünstig ist.
Wenn ich den Test mache und gebe das hier ein:
get-aduser vorname.nachname | ?{$_.Surname -ne $null -and $_.Givenname -ne $null} | Rename-ADObject -NewName "Nachname, Vorname"  

dann funktioniert der Befehl.

Hab aber noch etwas im Netz gefunden, mit dem funktioniert es:
https://gheywood.wordpress.com/2012/10/16/rename-ad-users-with-powershel ...

Wobei es schön wäre, wenn mir noch jemand sagen könnte, warum oben meine Variablen leer bleiben, wäre das super face-smile

Gruß
133883
133883 14.08.2017 aktualisiert um 14:36:29 Uhr
Goto Top
Weil du um den String keine geschweiften Klammern setzt, denn ohne gibt es die Laufvariablen nicht.
get-aduser -Filter * -Properties Surname,Givenname | ?{$_.Surname -ne $null -and $_.Givenname -ne $null} | Rename-ADObject -NewName {"$($_.Surname), $($_.Givenname)"}  
killtec
killtec 14.08.2017 um 14:55:07 Uhr
Goto Top
Mag er irgendwie nicht so ganz.
Meine Aktuelle LÖsung ist die hier:
#Rebrand-Users.ps1
 
#Read users into variable.
$users = get-aduser -filter *
#$users = get-aduser vorname.nachname
  
#Process users.
Foreach ($user in $users) {
    $newDN = $user.surname + ", " + $user.GivenName  
    #Change display name, and company name
    set-aduser $user -Displayname $newDN -ErrorAction SilentlyContinue
    #Change distinguished name
        Try {
            Rename-ADObject -identity $user -Newname $newDN
        }
        Catch {
            Write-Host "$user may already exist."  
        }
    }

ist minimal angepasst (Sachen entfernt) von dem aus der Quelle oben.
133883
133883 15.08.2017 aktualisiert um 09:18:29 Uhr
Goto Top
Mag er irgendwie nicht so ganz.
Na das nenne ich mal eine fachgerechte Antwort...
Lüppt hier einwandfrei, du kannst es auch mit Schleife drum rum.
killtec
killtec 15.08.2017 um 14:26:43 Uhr
Goto Top
Hi,
hast recht,
wenn ich das eingebe, kommt das raus:
get-aduser vorname.nachname -Properties Surname,Givenname | ?{$_.Surname -ne $null -and $_.Givenname -ne $null} | Rename-ADObject -NewName {"$($_.Surname), $($_.Givenname)"}  

"$($_.Surname), $($_.Givenname)"

Gruß
133883
Lösung 133883 15.08.2017 um 14:35:44 Uhr
Goto Top
get-aduser vorname.nachname -Properties Surname,Givenname | ?{$_.Surname -ne $null -and $_.Givenname -ne $null} | %{Rename-ADObject $_.DistinguishedName -NewName "$($_.Surname), $($_.Givenname)"}