Jump to content

AD User mit Password erstellen via Powershell


Direkt zur Lösung Gelöst von magheinz,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen :)
Ich habe ein Skript in Powershell geschrieben mit dem automatisiert User aus einer csv Datei augelesen und erstellt werden.
zusätzlich muss ich ihnen jedoch ein Password mit 3 Komplexitätsanforderungen geben (mind. 8 Zeichen, Groß & Klein , Zahlen o. Sonderzeichen). Dies würde ich jetzt mit dem Parameter

 -AccountPassword (Read-Host -AsSecureString "Password123") 

 machen. Führe ich das aus, poppt ein Fenster auf :

 

                                                   Windows PowerShell ISE - Input

                                                   Password123

                                                <<hier soll ich irgendetwas eingeben>>

 

Meine Frage: Ist das was ich da jetzt eingeben soll das neue Passwort für den ersten User oder für alle? Und wenn ersteres, wie mache ich ein Password für alle ( oder generiere es aus beispielsweise dem Vornamen und der Telefonnummer des jeweiligen Users).

 

Mfg Reto

 

PS. Ich weiß jz, dass man das Password für jeden User eingeben muss. Bleibt also nur noch der zweite Teil der Frage ...

bearbeitet von J.Kepler
Link zu diesem Kommentar

Ich mache das in mehreren Schritten. Direkt in einem hat nie sauber funktioniert.

 

1. New-ADUser -Name $UserName -ChangePasswordAtLogon $true -GiveNname $Vname -Surname $NName und eventuell AccountExpirationDate

2. Set-ADAccountPassword -Identity $UserName -NewPassword (Convert-SecureString -AsPlainText $InitialPassword -force)

 

3. Enable-Account -Identity $UserName

 

$InitialPassword wird ausgewürfelt:

function GET-Temppassword()
{
    #Param([int]$length=10,[string[]]$sourcedata)
    Param([int]$length=10)
    $ascii_klein=$NULL;
    $ascii_gross=$NULL;
    $ascii_zahl=$NULL;
    $TempPasswordarray=$NULL;
    For ($a=48;$a –le 57;$a++) {$ascii_zahl+=,[char][byte]$a }  #Zahlen
    For ($a=65;$a –le 90;$a++) {$ascii_gross+=,[char][byte]$a }  #Buchstabem
    For ($a=97;$a –le 122;$a++) {$ascii_klein+=,[char][byte]$a }  #buchstabem


    [int]$i=2
    [int]$j=2
    [int]$k=2
    while ((($i+$j+$k) -ne $length))
    {
        [int]$i = get-random(2..($length-4))
        [int]$j = get-random(2..($length-($i+2)))
        [int]$k = ($length-($i+$j))
#        Write-Host("i=$i j=$j k=$k")
    }
    ####Write-Host("ENDE i=$i j=$j k=$k")
    $TempPassword = ""
    $TempPassword1 = ""

    For ($loop=1; $loop –le $i; $loop++)
    {
               $TempPassword+=($ascii_gross | GET-RANDOM)
    }
    For ($loop=1; $loop –le $j; $loop++)
    {
               $TempPassword+=($ascii_klein | GET-RANDOM)
    }
    For ($loop=1; $loop –le $k; $loop++)
    {
               $TempPassword+=($ascii_zahl | GET-RANDOM)
    }

    $TempPasswordarray = ($TempPassword[0..$TempPassword.Length]) | Sort-Object {Get-Random}


    For ($loop=1; $loop –le $length; $loop++)
    {
               $TempPassword1+= $TempPasswordarray[$loop]
    }

    return $TempPassword1
}

Nach dem Anlegen des Users fällt ein Zettel aus dem Drucker mit den wichtigsten Infos:

Username, initiales Passwort, E-Mailadresse etc welcher dem neuen Mitarbeiter in die Hand gedrückt wird.

Eine Abfrage nach Abteilung/Fachbereich ist auch dabei so das der User auch gleich in der richtigen OU landet. In de OUs sind die Vorgesetzten als Manager(oder wie der Reiter heisst) eingetragen womit direkt der Vorgesetzte beim user eigetragen wird. alle weiteren info wie z.B. Telefonnummer, Raumnummer etc liegen zu diesem Zeitpunkt leider noch nicht vor.

Link zu diesem Kommentar

Du kannst das Passwort in einer Variable speichern und dann für alle Benutzer nutzen.

Du kannst natürlich auch aus den vorhanden Daten (Name, Tel,...) ein Passwort generieren und setzen, aber dies ist dann für andere Nutzer reproduzierbar. Das musst du wissen, ob du das willst.

Alternativ ein Passwort würfeln.

 

@Magheinz: Du musst das nicht in mehreren Schritten machen. Es muss prinzipiell mit einem Befehl gehen.

Das einzige, was nicht direkt sondern nur im Nachhinein geht ist ein SPN vergeben.

 

Deine Passwort Funktion, sieht sehr komplex aus. Ich nutze für den Fall folgendes:

function Get-RandomPasswordold { # kein Komplexitäts Test
	param(
    $length = 16,
    $characters = 'abcdefghkmnprstuvwxyzABCDEFGHKLMNPRSTUVWXYZ123456789!"§$%&/()=?*+#_'
    )
	$random = 1..$length | ForEach-Object { Get-Random -Maximum $characters.length }
	$private:ofs = ""
	#Write-Output $([String]$characters[$random])
	return $([String]$characters[$random])
}
Link zu diesem Kommentar

Die Passwortfunktion soll halt die Komplexitätsanforderungen erfüllen.

Ich bin aber sicher das man die eleganter machen kann. Das war damals ein Schnellschuss der zum ständigen Provisorium wurde.

 

Das Script ist ein immer mehr erweitertes recyceltes Abfallprodukt unserer eDirectory2AD-Migration.

Damals hatte ich mit vielen Zwischenschritten gearbeitet um erst die User aus Novell auszulesen, diese (Username, email-adresse etc) an die neuen Konventionen anzupassen, die neuen Gruppen zu erzeugen usw.

 

Dabei wurde gefühlte 20 ldif-Dateien erzeugt die ich dann in das AD importiert hatte.

Das war so notwendig da in jedem Zwischenschritt die Daten korrigiert werden mussten um den Novell-Wildwuchs zu vereinheitlichen. Es gab also jeweils noch ein csv wo die Änderungen händisch gepflegt werden konnten. Die Perlscripte müsste ich noch rumliegen haben...

 

aber ich schweife von Thema ab: Mag also sein das man das in einem Rutsch machen kann. Könnte sein der UPN das Thema ist da der auch explizit gesetzt wird.


Vorteil mit den zufälligen Passwörtern war übrigens das wir das für alle machen konnten und niemand das Passwort eines Kollegen errechnen konnte. Einige waren zum Zeitpunkt der Umstellung im Urlaub/Krank etc so das bei einzelnen Zeit genug für Schindluder gewesen wäre. Die Passwortfunktion nutzen wir dann heute halt einfach weiter...

bearbeitet von magheinz
Link zu diesem Kommentar
  • Beste Lösung

so, bin wieder am Rechner.

 

$initialPassword wird mit der Funktion von oben (Get-TempPassword) befüllt.

-Force ist die Bestätigung das du verstanden hast das Passwort im Plaintext übergeben wird. Ansonsten nimmt das commandlet keine Plaintextpasswörter an.

 

Relativ weit oben im Script steht

try{
    $InitialPassword = GET-Temppassword –length 10
}catch{
    "konnte kein Passwort finden"
    exit 1
}

Nach dem Anlegend es User gibts dann folgene Zeilen:

$Info += "Das Username lautet '$UserName'"+ [System.Environment]::NewLine
$Info += "Das Passwort für den ersten Login lautet '$initialPassword'"+ [System.Environment]::NewLine
$Info += "Dieses Passwort muss bei der ersten Anmeldung geändert werden."+ [System.Environment]::NewLine
$info += [System.Environment]::NewLine
$Info += "Wichtige Informationen:"+ [System.Environment]::NewLine

Dazu kommen dann noch ein paar mehr mit der OWA-URL und diversen anderen wichtigen und unwichtigen Infos.

Das wandert dann mit

$Info | Out-Printer -Name \\$PRINTSERVER\$DRUCKERNAME

direkt auf den Drucker hier im Büro. Der Neue Mitarbeiter bekommt den Zettel in die Hand gedrückt und kann direkt loslegen.

Theoretisch könnte man das script aus der Personalverwaltungssoftware beim Anlegen des Mitarbeiters direkt auslösen. Den Ausdruck würde man dann dem Neuen mit dem Laufzettel in die Hand geben.

 

Das ganze New-User.script ist inklusive Fehlerbehandlung, Mailbox anlegen etc knappe 400 Zeilen lang. Ganz sicher gibts hier noch einiges an Optimierungsmöglichkeiten.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...