Mehrere Passwörter mit Powershell erstellen und in einzelne Variablen
Moin,
stehe gerade auf dem Schlauch und weiß auch nicht so recht, wonach ich googeln soll (was bestimmt schon aus meinem schlauen Titel ersichtlich ist)...
Ich möchte mit einer Funktion mehrere Passwörter erstellen. Das klappt soweit, wenn ich mir alle Passwörter mit Write-Host ausgeben lasse, werden 30 Passwörter erzeugt und angezeigt.
Nun soll jedes einzelne Passwort in eine Variable und ich habe keine Ahnung, wie ich das bewerkstelligen soll. Mittels dieser Variablen schicke ich dann die Passwörter an neu erstellte Testuser, die kurzfristig auf unser System zugreifen sollen.
Frage: Wie kriege ich die 30 Passwörter in 30 Variablen, die ich dann weiterverwursten kann?
Gruß
stehe gerade auf dem Schlauch und weiß auch nicht so recht, wonach ich googeln soll (was bestimmt schon aus meinem schlauen Titel ersichtlich ist)...
Ich möchte mit einer Funktion mehrere Passwörter erstellen. Das klappt soweit, wenn ich mir alle Passwörter mit Write-Host ausgeben lasse, werden 30 Passwörter erzeugt und angezeigt.
$count=1..30
foreach ($i in $count)
{function Get-RandomCharacters($length, $characters) {
$random = 1..$length | ForEach-Object { Get-Random -Maximum $characters.length }
$private:ofs=""
return [String]$characters[$random]
}
function Scramble-String([string]$inputString){
$characterArray = $inputString.ToCharArray()
$scrambledStringArray = $characterArray | Get-Random -Count $characterArray.Length
$outputString = -join $scrambledStringArray
return $outputString
}
$password = Get-RandomCharacters -length 13 -characters 'abcdefghiklmnoprstuvwxyz'
$password += Get-RandomCharacters -length 2 -characters 'ABCDEFGHKLMNOPRSTUVWXYZ'
$password += Get-RandomCharacters -length 2 -characters '1234567890'
$password += Get-RandomCharacters -length 3 -characters '!"§$%&/()=?}][{@#*+'
Write-Host $password
$password = Scramble-String $password
}
Nun soll jedes einzelne Passwort in eine Variable und ich habe keine Ahnung, wie ich das bewerkstelligen soll. Mittels dieser Variablen schicke ich dann die Passwörter an neu erstellte Testuser, die kurzfristig auf unser System zugreifen sollen.
Frage: Wie kriege ich die 30 Passwörter in 30 Variablen, die ich dann weiterverwursten kann?
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 666674
Url: https://administrator.de/forum/mehrere-passwoerter-mit-powershell-erstellen-und-in-einzelne-variablen-666674.html
Ausgedruckt am: 07.04.2025 um 17:04 Uhr
11 Kommentare
Neuester Kommentar
[...]
Nun soll jedes einzelne Passwort in eine Variable und ich habe keine Ahnung, wie ich das bewerkstelligen soll. Mittels dieser Variablen schicke ich dann die Passwörter an neu erstellte Testuser, die kurzfristig auf unser System zugreifen sollen.
Frage: Wie kriege ich die 30 Passwörter in 30 Variablen, die ich dann weiterverwursten kann?
Frage: Wie kriege ich die 30 Passwörter in 30 Variablen, die ich dann weiterverwursten kann?
Einfach ein Array definieren und mit der Methode Add Elemente hinzufügen

Einfach den Password Output in die eine Array Variable ausgeben, feddisch
Gruß w.
$count = 30
function Get-RandomCharacters($length, $characters) {
$random = 1..$length | ForEach-Object { Get-Random -Maximum $characters.length }
$private:ofs=""
return [String]$characters[$random]
}
function Scramble-String([string]$inputString){
$characterArray = $inputString.ToCharArray()
$scrambledStringArray = $characterArray | Get-Random -Count $characterArray.Length
$outputString = -join $scrambledStringArray
return $outputString
}
[string[]]$passwords = 1..$count | %{
$password = Get-RandomCharacters -length 13 -characters 'abcdefghiklmnoprstuvwxyz'
$password += Get-RandomCharacters -length 2 -characters 'ABCDEFGHKLMNOPRSTUVWXYZ'
$password += Get-RandomCharacters -length 2 -characters '1234567890'
$password += Get-RandomCharacters -length 3 -characters '!"§$%&/()=?}][{@#*+'
Scramble-String $password
}
"Password 1: $($passwords[0])"
"Password 2: $($passwords[1])"
"Password 3: $($passwords[2])"
# ... usw

Zitat von @Coreknabe:
Auch bei Deiner Variante habe ich das Array noch nicht definiert:
Resultat:
gibt mir nur einzelne Zeichen aus dem Passwort aus, nämlich das Erste.
Doch, geht hier problemlos guckst du ...!Auch bei Deiner Variante habe ich das Array noch nicht definiert:
Es ist nicht möglich, einen Index auf ein NULL-Array anzuwenden.
>
Resultat:
write-host $password[1]

Bsp.
p.s. kennst du die Funktion ...? 
$users = 'Max','Hans'
$result = $users | %{$cnt=0}{
[pscustomobject]@{Name=$_;Password=$passwords[$cnt]}
$cnt++
}
$result | ?{$_Name -eq 'Max'}
[System.Web.Security.Membership]::GeneratePassword(20,3)

30 temporäre AD-Benutzer erzeugen,
Wenn du die sowieso selbst anlegst dann erzeuge in der selben Schleife doch direkt das jeweilige Passwort für den User dann brauchst du das nicht erst hinterher zuordnen 😉.Ich würde das gern in den Emailtext schreiben ($body).
Kannst du ja machen.
Ja. Da du ja jedem Empfänger mit einer Mail-Adresse aus deiner CSV einen User erstellen willst ist es ja sinnig gleich über die CSV-Datei per For-Each zu itterieren dem User einen Account zu generieren und ihm eine entsprechende Mail zuzustellen, all-in-one sozusagen.
Hier mal ein entsprechendes Beispiel (gehe da von aus das die Spalte der CSV in der die E-Mail Adresse steht "EMail" lautet, kannst du dann ja im Code in der Send-MailMessage-Zeile anpassen.
Zusätzlich habe ich das CSV-Object dann noch mit dem Initial-Password ergänzt damit man diese zusätzlich auch noch wieder exportieren kann.
Das regt vielleicht jetzt deine Fantasie etwas an
.
Schönen Vatertag noch
Gruß w.
Hier mal ein entsprechendes Beispiel (gehe da von aus das die Spalte der CSV in der die E-Mail Adresse steht "EMail" lautet, kannst du dann ja im Code in der Send-MailMessage-Zeile anpassen.
Zusätzlich habe ich das CSV-Object dann noch mit dem Initial-Password ergänzt damit man diese zusätzlich auch noch wieder exportieren kann.
# password generate function
function Generate-Password {
function Get-RandomCharacters($length, $characters) {
$random = 1..$length | ForEach-Object { Get-Random -Maximum $characters.length }
$private:ofs=""
return [String]$characters[$random]
}
function Scramble-String([string]$inputString){
$characterArray = $inputString.ToCharArray()
$scrambledStringArray = $characterArray | Get-Random -Count $characterArray.Length
$outputString = -join $scrambledStringArray
return $outputString
}
$password = Get-RandomCharacters -length 13 -characters 'abcdefghiklmnoprstuvwxyz'
$password += Get-RandomCharacters -length 2 -characters 'ABCDEFGHKLMNOPRSTUVWXYZ'
$password += Get-RandomCharacters -length 2 -characters '1234567890'
$password += Get-RandomCharacters -length 3 -characters '!"§$%&/()=?}][{@#*+'
Scramble-String $password
}
# ou path
$ou_path="OU=hierdrin,DC=domaene,DC=net"
# username prefix
$username_prefix = "TN-"
# email settings
$EMailFrom = 'from@domain.tld'
$EmailCredential = (new-Object PSCredential('username',(ConvertTo-SecureString 'Password' -AsPlainText -Force)))
$SMTPServer = 'server.domain.tld'
$SMTPPort = 587
# import user csv file
$users = Import-CSV .\Users.csv -Delimiter ";"
# add adiditional password field to store password only for reference
$users | Add-Member -MemberType NoteProperty -Name InitialPassword -Value '' -Force
# counter for Usernames
$cnt = 1
foreach ($user in $users){
# generate password
$pwd = Generate-Password
# new account name
$accName = "$username_prefix$cnt"
# add user and membership
New-AdUser -Name $accName -Path $ou_path -Enabled $True -ChangePasswordAtLogon $true -AccountPassword (ConvertTo-SecureString $pwd -AsPlainText -force) -Description Testteilnehmer -passThru | %{Add-ADGroupMember -Identity "Teilnehmer" -Members $_}
# send mail
Send-MailMessage -SmtpServer $SMTPServer -From $EMailFrom -To $user.EMail -Subject "Ihr neues Passwort" -Body "Ihr Passwort für den Useraccount $accName lautet: $pwd" -Port $SMTPPort -Credential $EmailCredential
# note password for later export
$user.InitialPassword = $pwd
# increase counter
$cnt++
}
# export userlist with assigned initial passwords
$users | export-csv .\Users_with_passwords.csv -Delimiter ";" -NoType -Encoding UTF8
Schönen Vatertag noch
Gruß w.