2016-03-29 5 views
1

Ich versuche, ein Skript zu erstellen, in dem einige Benutzer in einer CSV-Datei gespeichert werden. Ändern Sie dann das Kennwort und aktivieren Sie es in Active Directory. Das Problem ist, ich kann nicht alle Benutzer ausgeben zu bekommen scheinen entweder CSV oder eine Textdatei, die wie folgt aussieht:Alle Benutzer und Kennwörter in eine Datei ausgeben

User1 Password 
User2 Password 
User3 Password 
User4 Password

ich versucht habe Write-Host und das hat nicht funktioniert, so dass ich spielte mit ein Array, aber ich kann es immer noch nicht bekommen. Kann mir bitte jemand helfen mit dem was ich falsch mache, damit ich alle User an einen Tisch ausgeben lassen kann? Hier

ist der Code, den ich verwende:

if (-not (Get-Module ActiveDirectory)){ 
    Import-Module ActiveDirectory 
} 

#Construct an out-array to use for data export 
$OutArray = @() 

# User setup   
$users = Import-Csv "C:\accounts.csv" 

foreach ($user in $users) { 
    # set up random number generator 
    $rand = New-Object System.Random 

    #Generate a new password 
    $NewPassword = [char]$rand.next(65,90) + [char]$rand.next(65,90) + 
       [char]$rand.next(48,57) + [char]$rand.next(97,122) + 
       [char]$rand.next(48,57) + [char]$rand.next(97,122) + 
       [char]$rand.next(97,122) + [char]$rand.next(35,38) 

    #setup username variables 
    $username = $user.samAccountName 

    #enable ad account 
    Enable-ADAccount -Identity $username 

    #set-ad password 
    Set-ADAccountPassword $username -NewPassword (ConvertTo-SecureString -AsPlainText "$NewPassword" -Force) -PassThru -Reset 

    #$outarray += $Username,$NewPassword 
    #Write-Host "Password has been set for:" $username $NewPassword 
} 

#After the loop, export the array to CSV 
$outarray | Export-Csv "c:\login.csv" 
+1

'System.Random' sollte niemals für Kennwörter verwendet werden. Es verwendet einen vorhersagbaren Algorithmus. Sie sollten stattdessen 'System.Security.Cryptography.RNGCryptoServiceProvider' verwenden, oder sogar etwas sehr einfaches wie' [System.Web.Security.Membership] :: GeneratePassword (8,0) '. –

+0

@krousemw Aus Sicherheitsgründen wäre es eine hirnverbrannte Idee, eine nicht sichere Website von Drittanbietern zu verwenden, um Ihre Kennwörter zu generieren. Wörterbuchangriffe, Lauschangriffe und Man-in-the-Middle sind viel zu einfache Angriffsvektoren. – vonPryz

Antwort

2

Statt

$outarray += $Username,$NewPassword 

Erstellen Sie ein neues PsObject und fügen Sie dem Array:

$OutArray += New-Object PSObject -Property @{UserName=$username; Password=$NewPassword} 

und exportieren Verwenden:

$OutArray | Export-Csv "c:\login.csv" -NoTypeInformation 

Mit Ihrem Ansatz ($outarray += $Username,$NewPassword), haben Sie nur eine String-Liste mit Benutzernamen und Passwörtern (ohne Zuweisungen) erstellt.

Sie können einen Blick auf die Export-Csv Hilfe werfen.

+1

Während dies die Frage beantwortet, ziehen Sie bitte in Betracht, Mehrwert hinzuzufügen, indem Sie erklären * warum * das funktioniert und was im ursprünglichen Ansatz falsch war, anstatt nur Beispielcode zu geben. – vonPryz

+0

Sie haben Recht @vonPryz. Ich war ein bisschen zu faul dort. –

+0

Danke für die Hilfe, ich habe mich scheinbar ein paar Tage lang mit dem Kopf gegen einen Felsen geschlagen. Bei der Ausgabe der CSV-Datei wurde jedoch der Kennwortabschnitt in Spalte a und der Benutzername in Spalte B der csv-Datei gespeichert. Warum sollte es so ausgegeben werden? Wie kann ich es umkehren? – squirrel