gabebu
Goto Top

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:
#
# 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

Content-ID: 383906

Url: https://administrator.de/contentid/383906

Printed on: October 9, 2024 at 16:10 o'clock

erikro
erikro Aug 20, 2018 at 11:50:41 (UTC)
Goto Top
Moin,

$nummer = 3; 

ich vermute mal, dass das Semikolon hinter der 3 stört. ;) Dann ist das ein String und den kann man nicht hochzählen.

hth

Erik
gabeBU
gabeBU Aug 20, 2018 at 12:05:09 (UTC)
Goto Top
Hallo Erikro

Leider nicht, ich habe es erneut ohne Semikolon getestet und erhalte die selbe Fehlermeldung.
colinardo
colinardo Aug 20, 2018 updated at 12:34:50 (UTC)
Goto Top
while($nummer -lt $user)
Kein Wunder wenn du Äpfel mit Birnen vergleichst face-smile.
$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 face-wink.

G. Uwe
erikro
erikro Aug 20, 2018 at 12:27:09 (UTC)
Goto Top
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
gabeBU
gabeBU Aug 21, 2018 at 07:13:04 (UTC)
Goto Top
Okay...ich habe das Script nun angepasst. Doch leider vergibt er nur dem ersten User in der Liste ein Passwort:

#
# 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
$nummer = 3
$zaehler = 1
# Get the list of accounts from the file on file
# List the user names one per line
# $users = Get-ADUser -SearchBase “OU=user,OU=TEST,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
$user = 1
do
{

$Password1 = "RAUKO@0$zaehler"  
$Password2 = "RAUKO@$zaehler"  
$line = $userlist | Select -Index $nummer

ForEach ($userlist in $users.count)
{
    

    # Set the default password for the current account
    if($nummer -lt 10)
    {
        Set-ADAccountPassword -Identity "CN=$line,OU=user,OU=TEST,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=user,OU=TEST,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"  
    }
}
$zaehler++
$nummer++
}while($nummer -lt $users.count)
# ————- End ———– 
erikro
erikro Aug 21, 2018 at 08:07:42 (UTC)
Goto Top
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