Benutzer im Active Directory mit PowerShell und CSV-Datei anlegen, Mailbox einrichten


    Tags: , ,

    Benutzerkonten anlegenMuss man mehrere Benutzer im Active Direc­tory an­legen, dann ist Power­Shell unter den Bord­mitteln das Tool der Wahl. Zumeist impor­tiert man dabei die Daten aus einer CSV-Datei, bevor man sie an das Cmdlet New-ADUser über­gibt. Bei dieser Ge­legen­heit kann man auch die Mailbox für Exchange ein­richten.

    Das Modul ActiveDirectory enthält unter anderem mehrere Cmdlets für das User-Management. Für das Anlegen neuer Konten ist New-ADUser zuständig. Es akzeptiert insgesamt rund 50 Parameter, deren Namen mit den Attributen im AD überein­stimmen. Dazu zählen etwa Name, GivenName, Enabled, Manager, Office, etc.

    User mit den wichtigsten Attributen anlegen

    Der simpelste Aufruf könnte so aussehen, wenn man einen Benutzer mit dem SamAccountName Max.Meier erzeugen möchte:

    New-AdUser -Name Max.Meier

    In der Regel möchte man aber einige weitere Attribute auf einen bestimmten Wert setzen:

    New-ADUser -Name Max.Meier -GivenName Max -Surname Meier `
    -Path "OU=Benutzer,DC=contoso,DC=Com"

    Der Benutzer wird so mit Vor- und Nachnamen in einer OU angelegt. Er ist allerdings noch deaktiviert, da er noch kein Passwort erhalten hat. Dieses lässt sich nicht im Klartext übergeben, sondern nur als Secure String:

    Dieser Befehl ordnet nun dem Benutzer über den Parameter AccountPassword ein entsprechendes Passwort zu. Es lassen sich jetzt natürlich noch zahlreiche weitere Attribute mit Werten versehen. Für die einfache Benutzer­anlage reicht dieses Beispiel allerdings schon jetzt aus, damit sich der User am System anmelden kann.

    Benutzerimport per CSV Datei

    Bei einer größeren Zahl an Benutzern wird man diese nicht anlegen, indem man New-AdUser für jeden separat aufruft. Am besten eignet hier der Import von Daten aus einer CSV-Datei (siehe dazu: CSV-Dateien in PowerShell erstellen, sortieren, filtern).

    Beispiel für die Struktur einer CSV-DAtei für den Import in das Active Directory

    Wenn diese nicht mit einem Komma formatiert ist, dann muss man bei Import-Csv das Trenn­zeichen über den Parameter Delimiter spezifizieren. Sind alle Voraus­setzungen gegeben, dann führt man folgende Anweisungen aus:

    Import-Csv .\benutzer.csv |
    New-ADUser -AccountPassword (ConvertTo-SecureString "Password123" -AsPlainText -force)

    Diese simple Variante des Scripts verzichtet auf die Verwendung von Parametern beim Aufruf von New-AdUser. In diesem Fall müssen die Spalten­überschriften in der CSV-Datei aber exakt mit den Namen der Parameter übereinstimmen.

    Eine Einschränkung dieses Scripts besteht darin, dass man das Passwort separat auf der Kommando­zeile übergeben muss, so dass es in diesem Beispiel für alle Konten identisch ist.

    Individuelle Passwörter setzen, Mailbox erzeugen

    Möchte man für jeden Benutzer ein eigenes Kennwort vorgeben und zudem gleich ein Postfach für Exchange erzeugen, dann kann man dafür über die einzelnen Datensätze der CSV-Datei iterieren:

    Lässt sich die CSV-Datei importieren, dann legt PowerShell die Benutzer in der vorgegebenen Organisations­einheit an. Darüber hinaus trägt das Script die Telefonnummer des Mitarbeiters in das AD ein und bestimmt, dass er das Passwort beim ersten Anmelden ändern muss. Die letzte Anweisung erzeugt dann das Postfach.

    Die Mail-Adresse für die neuen Benutzer folgt den Vorgaben der Adressrichtlinien in Exchange.

    Durch die Richtlinie auf dem Exchange Server erhalten die Benutzer ihre passende E-Mail-Adresse.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Roland Eich

    Roland Eich ist gelernter Fach­infor­matiker für System­inte­gration und in der IT seit über 14 Jahren zu Hause. Roland deckt auf­grund seiner Erfah­rungen ein breites Spek­trum der Microsoft-Produkt­palette ab.Zudem besitzt er ver­schiedene Zertifi­zierungen (MCITP, MCSA und MCSE, ITIL, PRINCE2).
    // Kontakt: E-Mail //

    Verwandte Beiträge

    Weitere Links

    8 Kommentare

    Wäre ganz toll gewesen, wenn....
    Nun, der Schreibfehler im Beispiel im Namen ist ja leicht erkennbar. Doch das Argument "AccountPassword" kennt Microsoft Server 2016 PS nicht... schade

    Bild von Wolfgang Sommergut

    Kann ich nicht nachvollziehen. Das Cmdlet New-AdUser unterstützt in PS 5 den Parameter AccountPassword, wie dieser Befehl zeigt:

    (Get-Command -Name New-ADUser).Parameters.AccountPassword

    Hallo.

    Ich habe ein minus vor den Parameter AccountPassword gesetzt.
    Also -AccountPassword, dann ist es durchgelaufen.

    Gruß

    Bild von Wolfgang Sommergut

    Ja, der Bindestrich hat bei einem Beispiel gefehlt. Habe ihn nun ergänzt. Danke für den Hinweis!

    Ich ersuche um Hilfe! Mein PowerShell (Win10) kennt das cmd New-ADUser nicht:
    New-AdUser : Die Benennung "New-AdUser" 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:4 Zeichen:3
    + { New-AdUser -Name $username$i -Enabled $True -ChangePasswordAtLogon ...
    + ~~~~~~~~~~
    + CategoryInfo : ObjectNotFound: (New-AdUser:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

    Danke im Voraus!

    Hallo Johann,
    ich kann mir schwer vorstellen, dass Ihr Windows10 das per default kann.
    Haben Sie denn vorher die RSAT Tools installiert oder das Active Directory Modul geladen ansonsten kennt Windows 10 die CMDlets doch gar nicht.
    Beste Grüße
    Roland Eich

    das funktioniert soweit alles wunderbar, solange der User Max Muster heißt. Sobald er aber Max Müller heißt wirds schwierig, weil im AD dann nicht Müller steht, sondern Max Müller

    Hallo Markus,

    vielen Dank für Ihren Beitrag.

    Sie müssten beim Importvorgang bereits merken, wenn Sie $Import auslesen, dass die Umlaute nicht mitgekommen sind. Dies hat ansich nicht mit meinem Vorgehen oder dem Beispiel zu tun, es geht viel mehr darum, dass der Import etwas anders angegangen werden muss.

    Wenn Sie am Ende des Strings ein -Encoding UTF8 machen und dann nochmal das Array $Import prüfen, sollten die Umlaute auch mit enthalten sein.

    Sollte es so immer noch nicht klappen, schreiben Sie mich gerne direkt an, dann schaue ich mir das sehr gerne an.

    BTW: Aus der Erfahrung heraus ein keiner Tipp, den UPN und ggf. auch den Samaccountname würde ich immer ohne Umlaute machen also Ü = ue etc. so haben die Benutzer es nachher etwas leichter bei der Anmeldung.

    herzliche Grüße
    Roland Eich