2016-03-29 17 views
1

Bir CSV dosyasında birkaç kullanıcı alacağı bir komut dosyası oluşturmaya çalışıyorum, daha sonra parolalarını değiştirip Active Directory'de etkinleştirin. Sorun, CSV veya şuna benzer bir metin dosyasına birine çıkışına tüm kullanıcıları almak gibi olamaz: Ben Write-Host denedim ve işe yaramadıTüm kullanıcı ve parolaları bir dosyaya çıkış

User1 Password 
User2 Password 
User3 Password 
User4 Password

, bu yüzden bir oynuyordu dizi, ama hala bunu elde edemiyorum. Birisi bana yanlış yaptığım şey konusunda yardımcı olabilir, böylece tüm kullanıcıları bir tabloya gönderebilirim?

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' asla parolalar için kullanılmamalıdır. Tahmin edilebilir bir algoritma kullanır. Bunun yerine 'System.Security.Cryptography.RNGCryptoServiceProvider' kullanmalısınız ya da' 'System.Web.Security.Membership ':: GeneratePassword (8.0)' gibi çok basit bir şey. –

+0

@krousemw Güvenlik açısından, şifrelerinizi oluşturmak için üçüncü taraf güvenli olmayan bir web sayfası kullanmak beyinsiz bir fikir olurdu. Sözlü saldırıları, gizlice dinleme ve ortadaki adam çok kolay saldırı vektörleridir. – vonPryz

cevap

2

yerine

$outarray += $Username,$NewPassword 

yeni PsObject oluşturun ve diziye ekleyin:

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

ve ihraç İşte

kullanıyorum kodudur kullanarak:

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

Yaklaşımınız ($outarray += $Username,$NewPassword) ile, kullanıcı adlarını ve parolalarını (atamalar olmadan) içeren bir dize listesi oluşturdunuz.

Export-Csv Yardımına göz atmak isteyebilirsiniz.

+1

Bu soruya cevap verirken, lütfen * nedenini * açıklayarak ve yalnızca örnek kod vermek yerine orijinal yaklaşımda neyin yanlış olduğunu açıklayarak değer katmayı düşünün. – vonPryz

+0

Haklısınız @vonPryz. Orada tembel olmak için biraz eğlendim. –

+0

Yardımın için teşekkür ederim, sanki bir kaç gün boyunca başımın bir kayaya çarptığını görüyordum. Ancak, csv dosyasını çıktığında, parola bölümünü csv dosyasının B sütunundaki a ve kullanıcı adının içine yerleştirdi. Neden böyle çıktı? Nasıl tersine çevirebilirim? – squirrel

İlgili konular