AD Felder von einem AD ins ein anderes übertragen
Hallo zusammen,
ich habe leider ein Problem, das ich nicht selbst lösen kann und wer weiß, für den ein oder anderen sind es nur wenige Minuten, für mich wären es mehrere Stunden:
Folgendes Problem stellt sich dar:
Ausgangslage: 2 ADs, die nicht miteinander kommunizieren und in unterschiedlichen Domänen zu Hause sind.
Ziel:
ldap Objekte wie streetAddress, postOfficeBox, l, st, postalCode, countryCode
sollen in die neu angelegten Benutzer des neuen ADs übertragen werden (bei dem die Felder streetAddress, postOfficeBox, l, st, postalCode, countryCode) fehlen.
Als gemeinsamer, einziger Schlüssel, der User von AD alt mit User AD verknüpft, dient uns nur:
AD alt --> E-Mail Adresse Feld (ldap Objekt Mail)
AD neu --> ldap Objekt extensionAttribute1
Export in eine CSV mit den genannten Felders als CSV und dann Import im neuen AD?
Aber wie bekomme ich die Schnittstelle her zwischen Benutzer aus AD alt : "Mail" zu AD neu: "extensionAttribute1" ?
Ich bin um jede Hilfe dankbar. Wollte es eigentlich per Copy und Paste machen, aber das würde geschätzt circa eine Ewigkeit dauern.
Bin um jeden Ratschlag dankbar.
Mit freundlichen Grüßen
lordofremixes
ich habe leider ein Problem, das ich nicht selbst lösen kann und wer weiß, für den ein oder anderen sind es nur wenige Minuten, für mich wären es mehrere Stunden:
Folgendes Problem stellt sich dar:
Ausgangslage: 2 ADs, die nicht miteinander kommunizieren und in unterschiedlichen Domänen zu Hause sind.
Ziel:
ldap Objekte wie streetAddress, postOfficeBox, l, st, postalCode, countryCode
sollen in die neu angelegten Benutzer des neuen ADs übertragen werden (bei dem die Felder streetAddress, postOfficeBox, l, st, postalCode, countryCode) fehlen.
Als gemeinsamer, einziger Schlüssel, der User von AD alt mit User AD verknüpft, dient uns nur:
AD alt --> E-Mail Adresse Feld (ldap Objekt Mail)
AD neu --> ldap Objekt extensionAttribute1
Export in eine CSV mit den genannten Felders als CSV und dann Import im neuen AD?
Aber wie bekomme ich die Schnittstelle her zwischen Benutzer aus AD alt : "Mail" zu AD neu: "extensionAttribute1" ?
Ich bin um jede Hilfe dankbar. Wollte es eigentlich per Copy und Paste machen, aber das würde geschätzt circa eine Ewigkeit dauern.
Bin um jeden Ratschlag dankbar.
Mit freundlichen Grüßen
lordofremixes
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1466547946
Url: https://administrator.de/contentid/1466547946
Ausgedruckt am: 25.11.2024 um 06:11 Uhr
69 Kommentare
Neuester Kommentar
Moin,
Wenn Du es lernen willst, dauert das erheblich länger.
Schlecht. Aber dann wäre das ja keine Aufgabe.
Das sind keine Objekte, sondern Attribute der Objekte der Klasse "User" (hab grad kein AD zur Hand und kann nicht genau sagen, wie die Klasse(n) heißen).
Genau so. Wie so oft ist die Powershell Deine beste Freundin. Export gibbet mal auf die Schnelle:
Wobei es sein kann, dass einige Attribute nicht direkt erreichbar sind. Dann wird es ein wenig komplizierter.
Der einfachste Weg wäre, dann im CSV vor dem Import die Spalte "Mail" einfach in "extensionAttribute1" umzubennen. Wieso hat das Attribut eigentlich einen so komischen Namen?
Wie man dann ein CSV in das AD reinlutscht, erzählt Dir Tante Google. Dafür gibt es gefühlt eine Millionen Skripte im Internet. Wenn Du ein AD betreuen willst, musst Du das sowieso lernen.
Liebe Grüße
Erik
Zitat von @lordofremixes:
ich habe leider ein Problem, das ich nicht selbst lösen kann und wer weiß, für den ein oder anderen sind es nur wenige Minuten, für mich wären es mehrere Stunden:
ich habe leider ein Problem, das ich nicht selbst lösen kann und wer weiß, für den ein oder anderen sind es nur wenige Minuten, für mich wären es mehrere Stunden:
Wenn Du es lernen willst, dauert das erheblich länger.
Folgendes Problem stellt sich dar:
Ausgangslage: 2 ADs, die nicht miteinander kommunizieren und in unterschiedlichen Domänen zu Hause sind.
Ausgangslage: 2 ADs, die nicht miteinander kommunizieren und in unterschiedlichen Domänen zu Hause sind.
Schlecht. Aber dann wäre das ja keine Aufgabe.
Ziel:
ldap Objekte wie streetAddress, postOfficeBox, l, st, postalCode, countryCode
ldap Objekte wie streetAddress, postOfficeBox, l, st, postalCode, countryCode
Das sind keine Objekte, sondern Attribute der Objekte der Klasse "User" (hab grad kein AD zur Hand und kann nicht genau sagen, wie die Klasse(n) heißen).
sollen in die neu angelegten Benutzer des neuen ADs übertragen werden (bei dem die Felder streetAddress, postOfficeBox, l, st, postalCode, countryCode) fehlen.
Als gemeinsamer, einziger Schlüssel, der User von AD alt mit User AD verknüpft, dient uns nur:
AD alt --> E-Mail Adresse Feld (ldap Objekt Mail)
AD neu --> ldap Objekt extensionAttribute1
Export in eine CSV mit den genannten Felders als CSV und dann Import im neuen AD?
Als gemeinsamer, einziger Schlüssel, der User von AD alt mit User AD verknüpft, dient uns nur:
AD alt --> E-Mail Adresse Feld (ldap Objekt Mail)
AD neu --> ldap Objekt extensionAttribute1
Export in eine CSV mit den genannten Felders als CSV und dann Import im neuen AD?
Genau so. Wie so oft ist die Powershell Deine beste Freundin. Export gibbet mal auf die Schnelle:
get-aduser -filter * | select [Liste der Attribute, die Du brauchst mit Kommata getrennt] | export-csv zieldatei.csv
Wobei es sein kann, dass einige Attribute nicht direkt erreichbar sind. Dann wird es ein wenig komplizierter.
Aber wie bekomme ich die Schnittstelle her zwischen Benutzer aus AD alt : "Mail" zu AD neu: "extensionAttribute1" ?
Der einfachste Weg wäre, dann im CSV vor dem Import die Spalte "Mail" einfach in "extensionAttribute1" umzubennen. Wieso hat das Attribut eigentlich einen so komischen Namen?
Wie man dann ein CSV in das AD reinlutscht, erzählt Dir Tante Google. Dafür gibt es gefühlt eine Millionen Skripte im Internet. Wenn Du ein AD betreuen willst, musst Du das sowieso lernen.
Liebe Grüße
Erik
Moin,
ich habe das schon verstanden. Gut, die CSV hast Du schon. Jetzt noch die Überschrift ändern von "Mail" in "ExtensionAttribute1" und dann eins der vielen, vielen, vielen Skripts, die es im Internet so gibt, um AD-User anzulegen oder zu manipulieren, so anpassen, dass es die Bedingung nimmt und die anderen Attribute reinschreibt.
Oder Du bezahlst jemanden, der Dir das Skript schreibt.
Liebe Grüße
Erik
ich habe das schon verstanden. Gut, die CSV hast Du schon. Jetzt noch die Überschrift ändern von "Mail" in "ExtensionAttribute1" und dann eins der vielen, vielen, vielen Skripts, die es im Internet so gibt, um AD-User anzulegen oder zu manipulieren, so anpassen, dass es die Bedingung nimmt und die anderen Attribute reinschreibt.
Oder Du bezahlst jemanden, der Dir das Skript schreibt.
Liebe Grüße
Erik
Nein, Du hast es nicht verstanden. Es macht die Sache halt nur einfacher. Du musst für jeden Datensatz nach dem User suchen, bei dem die beiden Attribute gleich sind. Du kannst das Feld auch Mail heißen lassen oder KuhliefumdenTeich. Das ist vollkommen egal. Ich wollte Dir das Leben nur einfacher machen. Hast Du den User gefunden, zu dem der DS gehört, schreibst Du die Attribute rein. Dabei ist es dann auch vollkommen egal, ob Du das ExtensionAttribute1 mit Mail überschreibst oder nicht. Das ist ja sowieso gleich. Also so mal schnell hingerotzt:
Was hinter dem ... kommt, müsste ich jetzt nachschlagen, welches der Attribute bei set-aduser wie heißt.
https://docs.microsoft.com/en-us/powershell/module/activedirectory/set-a ...
$altesAD = import-csv deine.csv -delimiter ";" -encoding utf8 # Delimiter und Encoding bitte auf das CSV anpassen
foreach($user in $altesAD) {
$neuerADUser = get-aduser -filter {ExtensionAttribute1 -eq $($user.mail)} # edit: Klammern korrigiert
set-aduser $neuerADUser -streetAddress $user.streetAddress ...
}
Was hinter dem ... kommt, müsste ich jetzt nachschlagen, welches der Attribute bei set-aduser wie heißt.
https://docs.microsoft.com/en-us/powershell/module/activedirectory/set-a ...
Moin,
um das nur auf eine TEST-OU loszulassen, kannst du im Get-ADUser() noch die SearchBase angeben:
Quelle: https://social.technet.microsoft.com/Forums/en-US/4a3eeade-31da-4842-b93 ...
Gruß
em-pie
um das nur auf eine TEST-OU loszulassen, kannst du im Get-ADUser() noch die SearchBase angeben:
$path = "OU=Service accounts,OU=Users,OU=WebbWorld,DC=webbworld,DC=local"
$neuerADUser = get-aduser -SearchBase $path -filter * -properties name
Gruß
em-pie
Moin,
Zwischen Parameter und Variable (-parameter $var) gehört ein Leerzeichen und die schließende Klammer fehlt. Die Kollegin @em-pie hat ja schon gesagt, wie Du das testen kannst.
Liebe Grüße
Erik
Zitat von @lordofremixes:
Meinst du ich bin der Lösung nahe oder soll ich es lieber bleiben lassen?
> $altesAD = import-csv Altes_AD.csv -delimiter "," -encoding utf8
> foreach($user in $altesAD) {
>
> $neuerADUser = get-aduser -filter (ExtensionAttribute1 -eq $($user.mail))
> set-aduser $neuerADUser -company$user.company -extensionAttribute1$user.extensionAttribute1 -facsimiletelephonenumber$user.facsimiletelephonenumber -mobile$user.mobile -physicalDeliveryOfficeName$user.physicalDeliveryOfficeName -postalcode$userpostalcode. -st$user.st -streetAdress$user.streetAdress -telephoneNumber$user.telephoneNumber -title$user.title
>
>
Meinst du ich bin der Lösung nahe oder soll ich es lieber bleiben lassen?
Zwischen Parameter und Variable (-parameter $var) gehört ein Leerzeichen und die schließende Klammer fehlt. Die Kollegin @em-pie hat ja schon gesagt, wie Du das testen kannst.
Liebe Grüße
Erik
Zitat von @erikro:
Habe ich das falsch in Erinnerung? Hattest Du nicht früher ein weibliches Profilbild?
Jo, hatte ich. Aber man reift ja mit der Zeit, sodass ich nun ein schlichter Typ mit einer "Fliege" bin Habe ich das falsch in Erinnerung? Hattest Du nicht früher ein weibliches Profilbild?
Sorry
Alles gut. Das ist ja der Vor-/ Nachteil der mitunter anonymen digitalen Welt: man kann sich nie sicher sein, wer da hinter steckt.Bei @aqui vermutet man ja sicherlich auch kein cooles Häschen (aber wissen tun wir es ja auch nicht ^^)
Zitat von @lordofremixes:
Kannst du mir vielleicht noch sagen wie ich das in. Zeile 4 richtig schreibe? Habe alles probiert
Kannst du mir vielleicht noch sagen wie ich das in. Zeile 4 richtig schreibe? Habe alles probiert
Einfach mit copy&paste das reinschreiben, was ich geschrieben habe:
-eq[LEERTASTE]$($user.extensionAttribute1)
Wenn Du die Leertasten mal machst, wo sie nicht hingehören, und nicht machst, wo sie hingehören, dann wird das nichts.
Die zwei $ sind richtig. Warum das so ist, kannst Du hier lernen.
Moin,
Du tippst ab und machst nicht copy&paste.
Das ist nochmal mein Original
Und nochmal. Du musst unter o. g. Adresse nachschauen, welche Attribute Du mit set-aduser direkt setzen kannst mit z. B.
und welche nicht. Und achte bitte auch auf das Leerzeichen zwischen dem Ausdrücken.
Liebe Grüße
Erik
Du tippst ab und machst nicht copy&paste.
Das ist nochmal mein Original
$altesAD = import-csv deine.csv -delimiter ";" -encoding utf8 # Delimiter und Encoding bitte auf das CSV anpassen
foreach($user in $altesAD) {
$neuerADUser = get-aduser -filter (ExtensionAttribute1 -eq $($user.mail))
set-aduser $neuerADUser -streetAddress $user.streetAddress ...
}
Und nochmal. Du musst unter o. g. Adresse nachschauen, welche Attribute Du mit set-aduser direkt setzen kannst mit z. B.
-streetAddress $user.streetAddress
und welche nicht. Und achte bitte auch auf das Leerzeichen zwischen dem Ausdrücken.
Liebe Grüße
Erik
Zitat von @lordofremixes:
Hi,
ich bin echt blöd, ich hab das tatsächlich falsch kopiert, und die eckige Klammer zu war auch an der falschen Stelle.
Jetzt sollte es aber passen:
Kann es sein, dass der Fehler
erikro 08.11.2021 um 18:10:42 Uhr
Und nochmal. Du musst unter o. g. Adresse nachschauen, welche Attribute Du mit set-aduser direkt setzen kannst mit z. B.
-streetAddress $user.streetAddress
und welche nicht. Und achte bitte auch auf das Leerzeichen zwischen dem Ausdrücken.
Liebe Grüße
Erik
Das habe ich jetzt gemacht, und mir speziell nur das Feld company rausgesucht:
Jetzt habe ich aber sogar ein Fehler mehr:
Kannst du bitte nochmal darüber schauen?
Hi,
ich bin echt blöd, ich hab das tatsächlich falsch kopiert, und die eckige Klammer zu war auch an der falschen Stelle.
Jetzt sollte es aber passen:
> $altesAD = import-csv C:\Script\altesad2.csv -delimiter ";" -encoding utf8
> foreach($user in $altesAD) {
> $path = "OU=TEST,OU=UserAccounts,OU=xxx,OU=DE,DC=xxx,DC=xxx,DC=xx,DC=com"
> $neuerADUser = get-aduser -SearchBase $path -filter (extensionAttribute1 -eq $($user.mail))
> set-aduser $neuerADUser -company $user.company
> }
>
Kann es sein, dass der Fehler
erikro 08.11.2021 um 18:10:42 Uhr
Und nochmal. Du musst unter o. g. Adresse nachschauen, welche Attribute Du mit set-aduser direkt setzen kannst mit z. B.
-streetAddress $user.streetAddress
und welche nicht. Und achte bitte auch auf das Leerzeichen zwischen dem Ausdrücken.
Liebe Grüße
Erik
Das habe ich jetzt gemacht, und mir speziell nur das Feld company rausgesucht:
> set-aduser $neuerADUser -company $user.company
>
Jetzt habe ich aber sogar ein Fehler mehr:
> extensionAttribute1 : Die Benennung "extensionAttribute1" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad
> korrekt ist (sofern enthalten), und wiederholen Sie den Vorgang.
> In Zeile:3 Zeichen:54
> + ... r = get-aduser -SearchBase $path -filter (extensionAttribute1 -eq $($ ...
> + ~~~~~~~~~~~~~~~~~~~
> + CategoryInfo : ObjectNotFound: (extensionAttribute1:String) , CommandNotFoundException
> + FullyQualifiedErrorId : CommandNotFoundException
>
> Set-ADUser : Das Argument für den Parameter "Identity" kann nicht überprüft werden. Das Argument ist NULL. Geben Sie einen gültigen Wert für das Argument an, und führen Sie den Befehl erneut aus.
> In Zeile:4 Zeichen:12
> + set-aduser $neuerADUser -company $user.company
> + ~~~~~~~~~~~~
> + CategoryInfo : InvalidData: (:) [Set-ADUser], ParameterBindingValidationException
> + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.SetADUser
>
Kannst du bitte nochmal darüber schauen?
Oooops. Mein Fehler. Das muss natürlich
- filter {ExtensionAttribute1 -eq ... }
heißen. Also geschweifte Klammern und nicht runde. Aber nun machst Du es richtig. Langsam rantasten.
Liebe Grüße
Erik
Moin,
Das kann nicht richtig sein. Da fehlt mindestens ein DC=irgendwas.
Zitat von @lordofremixes:
Das war der Code:
Das war der Code:
> $altesAD = import-csv C:\Script\altesad2.csv -delimiter ";" -encoding utf8
> foreach($user in $altesAD) {
> $path = "OU=TEST,OU=UserAccounts,DC=com"
> $neuerADUser = get-aduser -SearchBase $path -filter "extensionAttribute1 -eq '$($user.mail)'"
> set-aduser $neuerADUser -company $user.company
> }
>
$path = "OU=TEST,OU=UserAccounts,DC=com"
Das kann nicht richtig sein. Da fehlt mindestens ein DC=irgendwas.
@erikro
@lordofremixes
Es steht doch deutlich in der Fehlermeldung, was nicht funktioniert bzw. welcher Parameter fehlt. Zudem gibt es auch entsprechende Hilfeseiten zu den Powershell cmdlets. Einfach mal ein bisschen expermentieren.
Gruß,
Dani
Das kann nicht richtig sein. Da fehlt mindestens ein DC=irgendwas.
Warum. Single Lable Domain? @lordofremixes
Das Argument für den Parameter "Identity" kann nicht überprüft werden. Das Argument ist NULL. Geben Sie
einen gültigen Wert für das Argument an, und führen Sie den Befehl erneut aus.hast du noch eine Idee?
2. Ich benutze immer Power Shell mit dem Active Directory Modul, das ist korrekt oder würde powershell reichen?
Die Antwort findest du hier: ActiveDirectoryGruß,
Dani
Moin,
Das ist aber der Folgefehler aus dem leeren Ergebnis des nicht funktionierenden get-aduser.
Liebe Grüße
Erik
Zitat von @Dani:
Es steht doch deutlich in der Fehlermeldung, was nicht funktioniert bzw. welcher Parameter fehlt.
Es steht doch deutlich in der Fehlermeldung, was nicht funktioniert bzw. welcher Parameter fehlt.
Das ist aber der Folgefehler aus dem leeren Ergebnis des nicht funktionierenden get-aduser.
Liebe Grüße
Erik
Moin,
Irgendwas muss da mit Deinem CSV nicht stimmen. Ich habe das jetzt kurz getestet. Der Code sollte richtig sein. Poste doch mal die ersten drei Zeilen Deines CSV. Persönliche Daten bitte ändern.
Ich war heute den ganzen Tag unterwegs und habe auch gleich noch einen Termin. Aber vielleicht habe ich heute spät Abend ja noch Lust.
Liebe Grüße
Erik
Irgendwas muss da mit Deinem CSV nicht stimmen. Ich habe das jetzt kurz getestet. Der Code sollte richtig sein. Poste doch mal die ersten drei Zeilen Deines CSV. Persönliche Daten bitte ändern.
Ich war heute den ganzen Tag unterwegs und habe auch gleich noch einen Termin. Aber vielleicht habe ich heute spät Abend ja noch Lust.
Liebe Grüße
Erik
Moin,
herzlichen Glückwunsch. Ein paar Anmerkungen zum Schluss:
1. Das ist der Winklersweg in Hamburg. Einen Winkerlsweg gibt es m. W. nicht.
2. Wenn das Ergebnis des Filters nichts ergibt, dann gibt es natürlich eine Fehlermeldung von set-aduser, dass da nichts ist, was er setten kann. Das sollte man z. B. mit einem if oder einem try-catch abfangen.
3. Eigentlich sollten fehlende Attribute nicht stören. Jedenfalls habe ich das noch nicht erlebt. Es ist ja durchaus normal, dass mal einer kein Fax hat oder seine Mobilnummer nicht angeben will.
4. Das mit den falschen Überschriften ahnte ich. Die müssen natürlich stimmen. Sonst klappt das mit dem Filtern nicht. Das ist ein wenig lästig bei der Objektorientierung, dass man eben auch Eigenschaften abfragen kann, die gar nicht da sind, was dann nicht zum direkten Fehler führt. Aber daran gewöhnt man sich.
Du scheinst ein beharrlicher Mensch zu sein. Weiter so. Nur so lernt man was.
Liebe Grüße
Erik
herzlichen Glückwunsch. Ein paar Anmerkungen zum Schluss:
1. Das ist der Winklersweg in Hamburg. Einen Winkerlsweg gibt es m. W. nicht.
2. Wenn das Ergebnis des Filters nichts ergibt, dann gibt es natürlich eine Fehlermeldung von set-aduser, dass da nichts ist, was er setten kann. Das sollte man z. B. mit einem if oder einem try-catch abfangen.
3. Eigentlich sollten fehlende Attribute nicht stören. Jedenfalls habe ich das noch nicht erlebt. Es ist ja durchaus normal, dass mal einer kein Fax hat oder seine Mobilnummer nicht angeben will.
4. Das mit den falschen Überschriften ahnte ich. Die müssen natürlich stimmen. Sonst klappt das mit dem Filtern nicht. Das ist ein wenig lästig bei der Objektorientierung, dass man eben auch Eigenschaften abfragen kann, die gar nicht da sind, was dann nicht zum direkten Fehler führt. Aber daran gewöhnt man sich.
Du scheinst ein beharrlicher Mensch zu sein. Weiter so. Nur so lernt man was.
Liebe Grüße
Erik
Oh, da habe ich mich bei set-aduser geirrt. Es geht nicht mit leeren Attributen. Also entweder - das wäre die schnelle Lösung - alle fehlenden Attribute mit z. B. #nv füllen oder set-aduser nur mit den Attributen aufrufen, die beim jeweiligen DS vorhanden sind. Der Ansatz, der in dem Skript steht, das Du verlinkt hast, gefällt mir auf den ersten Blick. Aber, da die Zeit drängt ...
Ja. Aber stört das? Dann sieht man gleich, dass da nichts ist, wo doch was sein sollte. Aber wenn es stört, dann halt ein Leerzeichen.
Zitat von @lordofremixes:
Wenn das mit der Leertaste geht, ist das doch schon die Lösung.....
Excel alle leeren Felder ne Leertaste rein und fertig-..
Wenn das mit der Leertaste geht, ist das doch schon die Lösung.....
Excel alle leeren Felder ne Leertaste rein und fertig-..
Probiere es. Dann steht da was. Das sollte set-aduser reichen.