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. 🙂
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?
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?
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.
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
Zur Info. Das Problem ist gelöst. Man darf zwar nach dem DN suchen, aber der -newName sollte nur die cn sein. also $group.Name.Neu
Freut mich zu hören das es geklappt hat! 🙂
Hi,
das war mein Fehler. Ich Idiot. Vielen Dank
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