{"id":208512,"date":"2017-11-13T18:28:10","date_gmt":"2017-11-13T18:28:10","guid":{"rendered":"https:\/\/www.ninjaone.com\/script-hub\/synchronisieren-einer-csv-mit-der-active-directory\/"},"modified":"2024-03-04T15:56:08","modified_gmt":"2024-03-04T15:56:08","slug":"synchronisieren-einer-csv-mit-der-active-directory","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/de\/script-hub\/synchronisieren-einer-csv-mit-der-active-directory\/","title":{"rendered":"So importieren Sie Benutzer aus einer CSV-Datei mit PowerShell in das Active Directory"},"content":{"rendered":"<p><em>Diese Reihe von PowerShell Tipps und Tricks gr\u00fcndet auf einer fortlaufende Zusammenarbeit zwischen NinjaOne und Adam Bertram, Microsoft MVP.<\/em><\/p>\n<p>Eine der h\u00e4ufigsten Anwendungen von PowerShell, die ich als IT-Professional erachte, ist die Synchronisierung von Informationen mit Active Directory (AD). Es scheint, als ob jeder eine externe Datenquelle hat, die mit einigen Angestellten korreliert, die wir in die AD aufnehmen m\u00fcssen. Dies ist zu erwarten, da die AD in der Regel der am h\u00e4ufigsten verwendete IT-Service eines Unternehmens ist und eine hervorragende Funktion bietet, und zwar nicht nur als Authentifizierung, sondern auch als Repository f\u00fcr Mitarbeiterinformationen.<\/p>\n<p>Egal ob Sie Daten in einer benutzerdefinierten SQL-Datenbank oder in einem raffinierten HR-System gespeichert haben, es ist nervig, zwei verschiedene Stellen zu \u00fcberpr\u00fcfen, wenn Sie Informationen wie die Mitarbeiterabteilung, Gruppen, denen der Mitarbeiter angeh\u00f6ren sollte usw. ben\u00f6tigen. Wenn Sie mit der Synchronisierung dieser Daten beginnen, \u00e4ndert das Quellsystem m\u00f6glicherweise sein Schema, kann APIs, Server usw. \u00e4ndern, was eine Code-Nachbearbeitung bedeutet. Um sicherzustellen, dass die Datenquelle, von der aus Sie synchronisieren, immer gleich bleibt und aus einer beliebigen Anzahl von Systemen erstellt werden kann, ist es eine gute Idee, diese Daten in eine CSV-Datei zu \u00fcbertragen.<\/p>\n<p>Eine einfache CSV-Datei kann aus fast jeder Software oder Datenbank exportiert werden und gibt dem Administrator in diesem Format eine Kopie, die optimiert werden kann, sowie die notwendigen Informationen, die er von einem anderen Team verlangt, um irgendwo eine Datenbank zu \u00e4ndern.<\/p>\n<p><!--more--><\/p>\n<p>Lassen Sie uns ein einfaches Skript erstellen, das Sie heute verwenden k\u00f6nnen, um zu sehen, wie wir ein Attribut, eine Abteilung von einer CSV-Datei mit einem AD-Konto synchronisieren k\u00f6nnen.<\/p>\n<p>Als Auftakt nehmen wir an, ich habe eine CSV namens C:Employees.csv. Diese CSV hat drei Spalten: Vorname, Nachname und Abteilung. Sie m\u00f6chten ein Skript, das das AD-Konto finden kann, das mit diesem Vor-\/Nachnamen verkn\u00fcpft ist, und dann die Abteilung in die \u00e4ndern, die in der CSV-Datei steht.<\/p>\n<p>Dieses Skript besteht wie jedes Synchronisierungsskript haupts\u00e4chlich aus drei &#8222;Phasen&#8220;. Diese &#8222;Phasen&#8220; lesen die Quelldaten (in diesem Beispiel CSV), finden die eindeutigen ID der Zielquellendaten, die mit den Quelldaten \u00fcbereinstimmen (in diesem Beispiel AD samAccountName) und schreiben schlie\u00dflich die zugeh\u00f6rigen Attribute, die mit diesem Konto verkn\u00fcpft sind.<\/p>\n<p>Die erste Aufgabe ist das Lesen der CSV-Datei.<\/p>\n<div class=\"code-block\">$csvUsers = Import-Csv -Path 'C:Employees.csv'<\/div>\n<p>Erledigt. Der n\u00e4chste Teil besteht darin, die eindeutige ID f\u00fcr jede Zeile der CSV-Datei zu finden. Da wir keine eindeutige ID in der CSV-Datei haben, m\u00fcssen wir diese im Handumdrehen erstellen. Um diese eindeutige ID zu erhalten, gehen wir davon aus, dass der erste Vor-\/Nachname eines Mitarbeiters immer ein AD samAccountName ist. Wir m\u00fcssen diese Suche samAccountName erstellen und dann eine AD-Abfrage durchf\u00fchren, um festzustellen, ob ein Konto existiert.<br \/>\nHinweis: Bevor wir zu weit gehen, m\u00fcssen wir sichergehen, dass Sie die <a href=\"https:\/\/learn.microsoft.com\/en-us\/troubleshoot\/windows-server\/system-management-components\/remote-server-administration-tools\" target=\"_blank\" rel=\"noopener\">Remoteserver-Verwaltungstools<\/a> f\u00fcr Ihr Betriebssystem heruntergeladen und installiert haben. Dadurch erhalten Sie das Active Directory PowerShell-Modul, das die Cmdlets Get-AdUser und Set-AdUser enth\u00e4lt, die wir verwenden werden.<\/p>\n<div class=\"code-block\">foreach ($csvUser in $csvUsers) {<br \/>\n$userName = '{0}{1}' -f $csvUser.FirstName.SubString(0,1),$csvUser.LastName<br \/>\nwenn ($adUser = Get-AdUser -Filter \"samAccountName -eq $userName\" -Properties $attributesToSync) {<br \/>\n## Unsere \"eindeutige ID\" wurde gefunden. Fahren mit dem Lesen der CSV-Daten und dem Schreiben der Attribute fort<br \/>\n} else {<br \/>\nSchreiben Sie eine Warnmeldung 'Benutzer-\u00dcbereinstimmung nicht gefunden'<br \/>\n}<br \/>\n}<br \/>\n<\/div>\n<p>Sobald wir einen AD-Account haben, mit dem wir arbeiten k\u00f6nnen, k\u00f6nnen wir dann jedes Attribut, das diesem Angestelltennamen in der CSV-Datei zugeordnet ist, lesen und diese Information in den gefundenen AD-Account schreiben. Beachten Sie unten, dass ich die $attributesToSync variable definiere und diese dann sp\u00e4ter lese. Ich habe das getan, damit ich zus\u00e4tzliche Attribute hinzuf\u00fcgen kann, die in der CSV enthalten sein k\u00f6nnen, um diese auch in Zukunft zu synchronisieren. Im folgenden Beispiel wird zuerst \u00fcberpr\u00fcft, ob das Attribut identisch ist. Wenn nicht, wird Set-AdUser verwendet, um es zu \u00e4ndern.<\/p>\n<div class=\"code-block\">$attributesToSync = 'Department'<br \/>\nforeach ($csvUser in $csvUsers) {<br \/>\n$userName = '{0}{1}' -f $csvUser.FirstName.SubString(0,1),$csvUser.LastName<br \/>\nwenn ($adUser = Get-AdUser -Filter \"samAccountName -eq $userName\" -Properties $attributesToSync) {<br \/>\nforeach ($attr in $attributesToSync) {<br \/>\nwenn ($csvUser.$_ -ne $adUser.$_) {<br \/>\n$setParams = @{<br \/>\n$_ = $csvUser.$_<br \/>\n}<br \/>\n$adUser | Set-AdUser @setParams<br \/>\n}<br \/>\n}<br \/>\n} else {<br \/>\nSchreiben Sie eine Warnmeldung 'Benutzer-\u00dcbereinstimmung nicht gefunden'<br \/>\n}<br \/>\n}<\/div>\n<p>Dieses Beispiel funktioniert nur mit Attributen, die Zeichenfolgenwerte innerhalb der AD sind. Achten Sie auf Attribute wie den Manager, das Ablaufdatum des Kontos und so weiter. Diese Attribute erfordern, dass ein Objekt des richtigen Typs erstellt wird, bevor es in die AD geschrieben wird. Man br\u00e4uchte eine Reihe weiterer Artikel, um die Feinheiten der AD-Synchronisierung und der Arbeit mit verschiedenen Attributen zu untersuchen, aber ich habe eine PowerShell namens PSADSync kreiert, die Sie dabei unterst\u00fctzt. Sie k\u00f6nnen es finden, indem Sie es mit dem Install-Module PSADsync aus der PowerShell-Galerie ziehen.<\/p>\n<p><em>Adam Bertram ist ein Microsoft Windows Cloud und Datacenter Management MVP. Er hat verschiedene Schulungen verfasst, ist regelm\u00e4\u00dfiger Mitwirkender zahlreicher Print- und Online-Publikationen und pr\u00e4sentiert auf verschiedenen Benutzergruppen und Konferenzen. Sie k\u00f6nnen Adam unter adamtheautomator.com oder auf Twitter unter @adbertram finden.<\/em><\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full wp-image-16557\" src=\"https:\/\/www.ninjaone.com\/wp-content\/uploads\/2024\/02\/jd.jpg\" alt=\"\" width=\"640\" height=\"486\" \/><\/p>\n","protected":false},"author":9,"featured_media":0,"parent":0,"menu_order":535,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","_lmt_disableupdate":"no","_lmt_disable":""},"operating_system":[4212],"use_cases":[],"class_list":["post-208512","script_hub","type-script_hub","status-publish","hentry","script_hub_category-windows"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/script_hub\/208512","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/script_hub"}],"about":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/types\/script_hub"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/comments?post=208512"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/media?parent=208512"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/operating_system?post=208512"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/use_cases?post=208512"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}