Gruppen im Active Directory per Powershell Script umbenennen

Bei uns gab es die Anforderung im Active Directory Gruppen umzubenennen. Da dies sehr viele waren habe ich erst einmal einen Dump der Gruppen gezogen um diese dann per CSV in Excel zu bekommen. Danach habe ich per suchen und ersetzen in Excel die Umbenennung gemacht.

Den Dump der Gruppen kann man mit folgendem Befehl in eine CSV Datei schreiben:

Get-ADGroup -Filter * -SearchBase "OU=Gruppen,DC=contoso,DC=com" | Select Name, DistinguishedName | Export-csv -path c:\temp\username.csv -NoTypeInformation

Dann kann man die CSV in Excel importieren. Dort habe ich zuerst die Daten in ein zweites Tabellenblatt kopiert und dann per „suchen und ersetzten“ die Änderungen durchgeführt. Danach habe ich die Änderungen zurück in das erste Blatt hinter die Orginaldaten kopiert. Wichtig ist das die Spaltenüberschriften geändert werden da diese beim ändern im Powershell Script wieder angegeben werden. Hierfür habe ich die beiden Spaltenüberschriften „Name_neu“ und „DistinguishedName_neu“ genommen.

Nun  stellt sich das Problem das man die CSV die man im Excel hat mit Anführungszeichen zwischen den Kommas braucht da dies sonst nicht eindeutig für die Powershell ist. Hierfür bin ich auf eine Excel Makro gestoßen das dies dann in die gewünschte Form exportiert. Anbei der Code dazu:

Sub SaveCSV() 

Dim Bereich As Object, Zeile As Object, Zelle As Object 
Dim strTemp As String 
Dim strDateiname As String 
Dim strTrennzeichen As String 
Dim strMappenpfad As String 

strMappenpfad = ActiveWorkbook.FullName 
strMappenpfad = Replace(strMappenpfad, ".xls", ".csv") 

strDateiname = InputBox("Wie soll die CSV-Datei heißen (c:\test.csv)?", "CSV-Export", strMappenpfad) 
If strDateiname = "" Then Exit Sub 

strTrennzeichen = InputBox("Welches Trennzeichen soll verwendet werden?", "CSV-Export", ",") 
If strTrennzeichen = "" Then Exit Sub 

  Set Bereich = ActiveSheet.UsedRange 

  Open strDateiname For Output As #1 

  For Each Zeile In Bereich.Rows 
    For Each Zelle In Zeile.Cells 
      strTemp = strTemp & """" & CStr(Zelle.Text) & """" & strTrennzeichen 
    Next 
    If Right(strTemp, 1) = strTrennzeichen Then strTemp = Left(strTemp, Len(strTemp) - 1) 
    Print #1, strTemp 
    strTemp = "" 
  Next 

  Close #1 
  Set Bereich = Nothing 
  MsgBox "Export erfolgreich. Datei wurde exportiert nach" & vbCrLf & strDateiname 

End Sub

Quelle: http://www.office-loesung.de/ftopic14862_0_0_asc.php

Dieses CSV kann dann per Powershell die Änderungen an den Gruppen durchführen:

$csv= import-csv c:\temp\export.csv
foreach ($group in $csv)
{
 Set-ADGroup $group.Name -SamAccountName $group.Name_neu.ToLower()
 Rename-ADObject -Identity $group.DistinguishedName -newname $group.DistinguishedName_neu.ToLower()
}

Bei uns hat dies wunderbar geklappt. Aber alles natürlich auf eigene Gefahr. 🙂

Clemens

Beruflich beschäftige ich mich hauptsächlich mit Microsoft Technologien wie dem Mailserver Exchange und dem Verzeichnisdienst Active Directory. Neben meinem Wirtschaftsinformatik Studium nutze ich meine Freizeit um diesen Blog, den wir in einem kleinen Team pflegen, mit Inhalt und Informationen zu füllen.

8 thoughts to “Gruppen im Active Directory per Powershell Script umbenennen”

  1. Hi,

    eine super Anleitung. Hat mich schon weiter gebracht. Ich habe aber ein Problem. Ich will mir die Beschreibung der Gruppen mit exportieren lassen. Innerhalb der CSV setzt er die überschrift description auch richtig um aber füllt die zeilen nur mir Name und DN

    Sieht dann so aus:
    Name,“DistinguishedName“,“description“
    Gruppe1, „DC=subdomain ,DC=domain,DC=de“,

     

    Eine Idee?

  2. Set-ADGroup : Das Argument für den Parameter „Identity“ kann nicht überprüft werden. Das Argument ist NULL. Geben Sie ein Argument an, das nicht NULL ist, und führen Sie dann den Befehl erneut aus.
    Bei c:\test\umbenennen.ps1:7 Zeichen:13
    + Set-ADGroup <<<< $group.Name -SamAccountName $group.Name_neu
    + CategoryInfo : InvalidData: (:) [Set-ADGroup], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.SetADGroup

    Rename-ADObject : Das Argument für den Parameter „Identity“ kann nicht überprüft werden. Das Argument ist NULL. Geben Sie ein Argument an, das nicht NULL ist, und führen Sie dann den Befehl erneut aus.
    Bei c:\test\umbenennen.ps1:8 Zeichen:27
    + Rename-ADObject -Identity <<<< $group.DistinguishedName -newname $group.DistinguishedName_neu
    + CategoryInfo : InvalidData: (:) [Rename-ADObject], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.RenameADObject

     

    Hat jemand eine Idee?

  3. Stimmen auch deine Spaltenüberschriften in deiner CSV? Du brauchst 4 Spalten. Jeweils mit den alten und mit den neuen Namen. Also 2 mal den alten Name und DistinguishedName und 2 mal den neuen. In meinem Script heißen die neuen Name_neu und DistinguishedName_neu.

  4. Hallo,

    hab ein Problem bei folgender Zeile:

    Rename-ADObject -Identity $group.DistinguishedName -newname $group.DistinguishedName_neu

    Beu Ausführen gibt mir die Powershell folgendes zurück:

    Rename-ADObject : Ein Wert für das Attribut befindet sich nicht im zulässigen Bereich
    Bei C:\rename_groups.ps1:29 Zeichen:20
    + Rename-ADObject <<<<  -newname $group.DistinguishedName_neu
    + CategoryInfo : NotSpecified: (CN=LangerName…,DC=AD,DC=DE:ADGroup) [Rename-ADObject], ADException
    + FullyQualifiedErrorId : Ein Wert für das Attribut befindet sich nicht im zulässigen Bereich,Microsoft.ActiveDirectory.Management.Commands.RenameADObject

  5. Hi,

    I’m from the Netherlands and I managed to follow this manual quite well.
    German and Dutch don’t differ that much from each other 😉

    I got stuck in the last part of the discussion, where PS gives a solution for the error he receives.

    I’ve tried to fix the script i’m using but was not able to translate PS‘ solution well enough to get the script done. Can you  show me how the script has to look like, with PS‘ solution included ?
    Thanks a lot in advance,

    Dieter

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.