Nutzer aus CSV-Datei in Active Directory importieren

Eine der stumpfesten Tätigkeiten des Admins ist das massenhafte Anlegen von Nutzern in der Active Directory. Schneller geht das über den Import der Daten aus einer Text-Datei.
Rasch hat man sich eine Exceltabelle mit den Namen und geeigneten Start-Passworten für die anzulegenden Accounts erstellt und diese in eine CSV-Datei exportiert:

Test.csv
name;vorname;nachname;password
maxmustermann;Max;Mustermann;kAv9VgNagk
evamuster;Eva;Muster;yd2TNurDkZ

Wir betrachten in diesem Artikel nur die Basisinformationen, der Importbefehl lässt wesentlich mehr Felder für den Import zu. Die komplette Beschreibung dafür gibt es in der Dokumentation

Im weiteren erstellen wir ein Powershell-Script. Dies kann mit einem Texteditor oder der Powershell ISE geschehen.
In Zeile 1 wird das Cmdlet Import-Csv verwendet, um die oben generierte CSV-Datei zu importieren. Dabei werden als Parameter das Trennzeichen und der Pfad und Dateiname übergeben und der Variable $Import zugeordnet.
Zeile 2 ordnet die passende OU der Variablen $OU zu.
In Zeile 6 beginnt die Importschleife für jede Zeile der importierten CSV-Datei. Da beim Import der Passworte nur bereits verschlüsselte Werte angenommen werden, wird in der Zeile 12 das im Klartext übergebene Passwort umgewandelt.
In der Zeile 13 wird aus Vor- und Nachname noch der Anzeigename generiert. Natürlich hätte man das bereits in der CSV-Datei machen können, aber so sieht man gleich, dass Zeichenketten auch im Skript verknüpft werden können.
In Zeile 14 wird dann mit dem Cmdlet New-ADUser der Account im Active Directory angelegt. Die übergebenen Parameter stellen sicher, dass der Account „aktiv“ gesetzt wird (-Enabled) und der Nutzer das Passwort bei der ersten Anmeldung nicht ändern muss (-ChangePasswordAtLogon). Die restlichen Parameter beziehen sich auf die zu importierenden Daten.

import.ps1
1  $Import = Import-Csv -Delimiter ";" -LiteralPath "c:\Test\test.csv"
2
3  $OU = "OU=MeineOU,DC=company,DC=com"
4
5
6  Foreach ($user in $Import)
7
8
9  {
10
11
12 $password = $user.password | ConvertTo-SecureString -AsPlainText -Force
13 $Detailedname = $user.vorname + " " + $user.nachname

14  New-ADUser -Name $user.name -GivenName $user.vorname -Surname $user.nachname -DisplayName $Detailedname -Path $OU -AccountPassword $password -ChangePasswordAtLogon $False -Enabled $True
15
16
17 }

Das Verfahren verwendet die Syntax vom Windows Server 2012 R2. Sie weicht leicht von der der Vorgängerversionen ab, die in den untenstehenden Quellen beschrieben ist.

Quellen:
http://www.active-directory-faq.de/2015/04/ad-powershell-basics-1-new-aduser/
https://gallery.technet.microsoft.com/scriptcenter/ed20b349-9758-4c70-adc0-19c5acfcae45
http://www.script-example.com/index.php/wie-erstelle-ich-ein-PowerShell-Skript

5 Gedanken zu „Nutzer aus CSV-Datei in Active Directory importieren

  1. Hallo,

    wenn ich das angepasste Script ausführe, bekomme ich massenhaft Fehlermeldungen:

    In D:\Home\admin-lehrer\import-msf-schueler.ps1:1 Zeichen:4
    + 1 $Import = Import-Csv -Delimiter „;“ -LiteralPath „D:\Home\admin-lehrer\msf-sc …
    + ~~~~~~~
    Unerwartetes Token „$Import“ in Ausdruck oder Anweisung.
    In D:\Home\admin-lehrer\import-msf-schueler.ps1:3 Zeichen:4
    + 3 $OU = „OU=Schueler,OU=Mittelschule Frontenhausen,DC=MSF,DC=intern“
    + ~~~
    Unerwartetes Token „$OU“ in Ausdruck oder Anweisung.
    In D:\Home\admin-lehrer\import-msf-schueler.ps1:6 Zeichen:4
    + 6 Foreach ($user in $Import)
    + ~~~~~~~
    Unerwartetes Token „Foreach“ in Ausdruck oder Anweisung.
    In D:\Home\admin-lehrer\import-msf-schueler.ps1:6 Zeichen:30
    + 6 Foreach ($user in $Import)
    + ~
    In der „foreach“-Schleife fehlt Anweisungstext.
    In D:\Home\admin-lehrer\import-msf-schueler.ps1:9 Zeichen:5
    + 9 {
    + ~
    Unerwartetes Token „{“ in Ausdruck oder Anweisung.
    In D:\Home\admin-lehrer\import-msf-schueler.ps1:12 Zeichen:5
    + 12 $password = $user.password | ConvertTo-SecureString -AsPlainText -Force
    + ~~~~~~~~~
    Unerwartetes Token „$password“ in Ausdruck oder Anweisung.
    In D:\Home\admin-lehrer\import-msf-schueler.ps1:13 Zeichen:5
    + 13 $Detailedname = $user.vorname + “ “ + $user.nachname
    + ~~~~~~~~~~~~~
    Unerwartetes Token „$Detailedname“ in Ausdruck oder Anweisung.
    In D:\Home\admin-lehrer\import-msf-schueler.ps1:14 Zeichen:5
    + 14 New-ADUser -Name $user.name -GivenName $user.Vorname -Surname $user.nachname …
    + ~~~~~~~~~~
    Unerwartetes Token „New-ADUser“ in Ausdruck oder Anweisung.
    + CategoryInfo : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : UnexpectedToken

    Meine Import-msf-schueler.ps1:
    1 $Import = Import-Csv -Delimiter „;“ -LiteralPath „D:\Home\admin-lehrer\msf-schueler.csv“
    2
    3 $OU = „OU=Schueler,OU=Mittelschule Frontenhausen,DC=MSF,DC=intern“
    4
    5
    6 Foreach ($user in $Import)
    7
    8
    9 {
    10
    11
    12 $password = $user.password | ConvertTo-SecureString -AsPlainText -Force
    13 $Detailedname = $user.vorname + “ “ + $user.nachname
    14 New-ADUser -Name $user.name -GivenName $user.Vorname -Surname $user.nachname -DisplayName $Detailedname -Path $OU -AccountPassword $Password -ChangePasswordAtLogon $False -Enabled $True
    15
    16
    17 }

    Meine msf-schueler.csv:
    name;vorname;nachname;password
    maxmustermann;Max;Mustermann;10.09.1959
    evamuster;Eva;Muster;11.09.1900

    Was mache ich falsch. Führe das script auf Windows Server 2012 R2 aus.

    Viele Grüße
    Alfred

    1. Der ganze Mechanismus ist case sensitive, das heißt, die Variablen im Skript und in der Importdatei müssen in Ihrer Schreibung identisch sein. Wenn ich also sehe
      „Meine msf-schueler.csv:
      name;vorname;nachname;password“
      Aber im Skript
      „14 New-ADUser -Name $user.name -GivenName $user.Vorname -Surname $user.nachname“,
      dann fällt mir auf, dass zumindest der Vorname einmal groß und einmal klein geschrieben werden. Das ist in meinem Beispiel leider falsch wiedergegeben, da ich die Daten, die gelaufen sind, verfremden musste. Ich habe das jetzt korrigiert.
      Ich kann nicht ausschließen, dass noch weitere Fehler vorliegen, aber das sehe ich jetzt so nicht.
      Gruß, Peer

  2. Super, vielen Dank! Ich habe nur folgendes Problem: In meiner Excel-Tabelle gibt es noch ein Feld „Abteilung“ wo beispielsweise Lehrperson oder eine Klasse drin steht. Wie kann ich diese aufsplitten?

Schreibe einen Kommentar zu Hubert Antworten abbrechen

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