Powershell: Bereits bestehenden Benutzer individuelle Passwörter zuweisen
Hallo Zusammen
Ich bin gerade dabei, ein Powershell SCript zu erstellen, bei dem jedem Benutzer ein individuelles Passwort erstellt wird. Dass Passwort ist immer das selbe Wort mit einer aufsteigenden Zahl (z.B: RAUKO0@nummer"
Hier ist das geschriebene Script:
wenn ich aber nun versuche die Passwörter anuzugleichen erhalte ich jedesmal die folgende Fehlermeldung:
Wüsste da jemand, woran es liegen könnte?
Besten Dank für eure Auskunft.
Gruss
gabeBU
Ich bin gerade dabei, ein Powershell SCript zu erstellen, bei dem jedem Benutzer ein individuelles Passwort erstellt wird. Dass Passwort ist immer das selbe Wort mit einer aufsteigenden Zahl (z.B: RAUKO0@nummer"
Hier ist das geschriebene Script:
#
# Script: ResetPwd.ps1
# Description: Reset the password for bulk number of users, and
# set the property to change passwrod required at next logon
#
#
#
Import-Module ActiveDirectory
# Set the default password
$password = ConvertTo-SecureString -AsPlainText “rau@2018” -Force
# Get the list of accounts from the file on file
# List the user names one per line
#$users = Get-ADUser -SearchBase “OU=L-Konstruktion,OU=Users,OU=RAUEXT,OU=RAU,DC=rauglobal,DC=local” -Filter * | Select givenName > C:\Users\admgb\users.txt
gc C:\Users\admgb\users.txt | sort | get-unique > C:\Users\admgb\userlist.txt
$userlist = Get-Content -Path C:\Users\admgb\userlist.txt
do
{
$nummer = 3;
$Password1 = "RAUKO0@$nummer"
$Password2 = "RAUKO@$nummer"
$line = $userlist | Select -Index $nummer
ForEach ($user in $userlist)
{
# Set the default password for the current account
if($nummer -lt 10)
{
Set-ADAccountPassword -Identity "CN=$line,OU=L-Konstruktion,OU=Users,OU=RAUEXT,OU=RAU,DC=rauglobal,DC=local" -Reset -NewPassword (ConvertTo-SecureString -AsPlainText $Password1 -Force)
Write-Host “Passwort wurde für den Folgenden Benutzer zurückgesetzt: $user”
Write-Host "Das neue Passwort ist: $Password1"
}
elseif ($nummer -gt 10)
{
Set-ADAccountPassword -Identity "CN=$line,OU=L-Konstruktion,OU=Users,OU=RAUEXT,OU=RAU,DC=rauglobal,DC=local" -Reset -NewPassword (ConvertTo-SecureString -AsPlainText $Password2 -Force)
Write-Host “Passwort wurde für den Folgenden Benutzer zurückgesetzt: $user”
Write-Host "Das neue Passwort ist: $Password2"
}
}
$nummer++
}while($nummer -lt $user)
# ————- End ———–
wenn ich aber nun versuche die Passwörter anuzugleichen erhalte ich jedesmal die folgende Fehlermeldung:
Cannot convert value "kon_20" to type "System.Int32". Error: "Input string was
not in a correct format."
At C:\Users\admgb\Untitled1.ps1:44 char:1
+ $nummer++
+ ~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) , RuntimeException
+ FullyQualifiedErrorId : InvalidCastFromStringToInteger
Wüsste da jemand, woran es liegen könnte?
Besten Dank für eure Auskunft.
Gruss
gabeBU
Please also mark the comments that contributed to the solution of the article
Content-ID: 383906
Url: https://administrator.de/contentid/383906
Printed on: October 9, 2024 at 16:10 o'clock
6 Comments
Latest comment
while($nummer -lt $user)
Kein Wunder wenn du Äpfel mit Birnen vergleichst .$nummer ist eine Zahl und $user ist ein String mit Inhalt des Vornamens (Givenname laut deinem Export, warum auch immer.) und beide lassen sich nunmal in der While Condition nicht vergleichen, sagt ja schon die Fehlermeldung
Cannot convert value "kon_20" to type "System.Int32". Error: "Input string was not in a correct format."
Er kann den Namen "kon_20" nicht in eine Zahl konvertieren, die PS ist ja schon so schlau und versucht dich zu unterstützen indem es die Umwandlung des Strings in eine Zahl vornimmt, aber das geht ja mit "kon_20" nunmal nicht.Ersetze also $User bspw. durch $users.Count.
Das man die Liste erst in eine Textdatei exportieren muss ist auch überflüssiger Strunz, geschweige denn die Schleife, die man auch direkt über Get-ADUser in der Pipe hätte laufen lassen können, naja so what sieht eh nach Anfänger aus da lass ich mal Gnade vor Recht ergehen .
G. Uwe
Moin nochmal,
die Initialisierung der Zählervariable muss außerhalb der Do-While-Schleife stehen. Sonst wird das eine Endlosschleife, da $nummer immer 3 ist, wenn die Schleife ausgeführt wird, bzw. 4, wenn Du bei der Abbruchbedingung ankommst.
Ansonsten hat Uwe den Fehler, nach dem Du gefragt hast, schon gefunden.
Liebe Grüße
Erik
die Initialisierung der Zählervariable muss außerhalb der Do-While-Schleife stehen. Sonst wird das eine Endlosschleife, da $nummer immer 3 ist, wenn die Schleife ausgeführt wird, bzw. 4, wenn Du bei der Abbruchbedingung ankommst.
Ansonsten hat Uwe den Fehler, nach dem Du gefragt hast, schon gefunden.
Liebe Grüße
Erik
Moin,
klar. In der Foreach-Schleife überschreibst Du ja auch $userlist. Und was soll das, dass Du da $users.count als Array angibst? Was soll die ganze Schleife überhaupt. So auf den ersten Blick würde ich sagen, dass das funktioniert, wenn Du das Foreach ganz weglässt (inkl. der schließenden Klammer).
Zur Schleifenprogrammierung guckst Du mal hier: https://www.windowspro.de/script/schleifen-powershell-foreach-while-do-u ...
hth
Erik
klar. In der Foreach-Schleife überschreibst Du ja auch $userlist. Und was soll das, dass Du da $users.count als Array angibst? Was soll die ganze Schleife überhaupt. So auf den ersten Blick würde ich sagen, dass das funktioniert, wenn Du das Foreach ganz weglässt (inkl. der schließenden Klammer).
Zur Schleifenprogrammierung guckst Du mal hier: https://www.windowspro.de/script/schleifen-powershell-foreach-while-do-u ...
hth
Erik