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-Key: 346045

Url: https://administrator.de/contentid/346045

Printed on: April 25, 2024 at 12:04 o'clock

Mitglied: 133883
133883 Aug 11, 2017 updated at 08:16:38 (UTC)
Goto Top
Weil du bei Rename-AdObject den DistinguishedName und nicht den SamAccountname angeben musst, deswegen findet er kein Objekt face-smile.

Gruß
Member: killtec
killtec Aug 11, 2017 at 12:01:31 (UTC)
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ß
Mitglied: 133883
133883 Aug 11, 2017 updated at 12:20:20 (UTC)
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
Member: killtec
killtec Aug 14, 2017 at 10:06:29 (UTC)
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ß
Mitglied: 133883
133883 Aug 14, 2017 updated at 12:36:29 (UTC)
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)"}  
Member: killtec
killtec Aug 14, 2017 at 12:55:07 (UTC)
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.
Mitglied: 133883
133883 Aug 15, 2017 updated at 07:18:29 (UTC)
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.
Member: killtec
killtec Aug 15, 2017 at 12:26:43 (UTC)
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ß
Mitglied: 133883
Solution 133883 Aug 15, 2017 at 12:35:44 (UTC)
Goto Top
get-aduser vorname.nachname -Properties Surname,Givenname | ?{$_.Surname -ne $null -and $_.Givenname -ne $null} | %{Rename-ADObject $_.DistinguishedName -NewName "$($_.Surname), $($_.Givenname)"}