J.Kepler 0 Geschrieben 9. März 2016 Melden Teilen Geschrieben 9. März 2016 (bearbeitet) 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 9. März 2016 von J.Kepler Zitieren Link zu diesem Kommentar
magheinz 110 Geschrieben 9. März 2016 Melden Teilen Geschrieben 9. März 2016 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 AccountExpirationDate2. 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. Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 9. März 2016 Melden Teilen Geschrieben 9. März 2016 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]) } Zitieren Link zu diesem Kommentar
magheinz 110 Geschrieben 9. März 2016 Melden Teilen Geschrieben 9. März 2016 (bearbeitet) 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 9. März 2016 von magheinz Zitieren Link zu diesem Kommentar
J.Kepler 0 Geschrieben 9. März 2016 Autor Melden Teilen Geschrieben 9. März 2016 (bearbeitet) 2. Set-ADAccountPassword -Identity $UserName -NewPassword (Convert-SecureString -AsPlainText $InitialPassword -force) Danke erst nal @magheinz, kannst du vielleicht die Ausdrücke & Parameter in den Klammern erklären ? wird die Variable $InitialPassword vorher festgelegt ? was bewirkt force? bearbeitet 9. März 2016 von J.Kepler Zitieren Link zu diesem Kommentar
Beste Lösung magheinz 110 Geschrieben 10. März 2016 Beste Lösung Melden Teilen Geschrieben 10. März 2016 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. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.