2016-03-29 5 views
1

Im пытается создать сценарий, в котором потребуется несколько пользователей в CSV-файле, а затем измените свой пароль и включите его в Active Directory. Беда в том, что я не могу показаться, чтобы получить все пользователи на выходе либо в CSV или текстовый файл, который выглядит следующим образом:Вывод всех пользователей и паролей в файл

User1 Password 
User2 Password 
User3 Password 
User4 Password

Я попытался Write-Host и что не работает, так что я играл с массив, но я все еще не могу его получить. Может кто-то, пожалуйста, помогите мне с тем, что я делаю неправильно, чтобы я мог заставить всех пользователей выводить на стол?

Вот код, который я использую:

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' никогда не должен использоваться для паролей. Он использует предсказуемый алгоритм. Вместо этого вы должны использовать 'System.Security.Cryptography.RNGCryptoServiceProvider' или даже что-то очень простое, например' [System.Web.Security.Membership] :: GeneratePassword (8,0) '. –

+0

@krousemw С точки зрения безопасности было бы мозговой мыслью использовать стороннюю незащищенную веб-страницу для генерации ваших паролей. Атаки на словах, подслушивание и «человек в середине» - слишком легкие атаки. – vonPryz

ответ

2

Вместо

$outarray += $Username,$NewPassword 

Создать новую PsObject и добавить его в массив:

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

и экспортировать его используя:

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

С вашим подходом ($outarray += $Username,$NewPassword) вы только что создали список строк, содержащий имена пользователей и пароли (без заданий).

Возможно, вы захотите ознакомиться с справкой Export-Csv.

+1

Хотя это отвечает на вопрос, пожалуйста, подумайте над добавлением значения, объяснив * почему * это работает, и что было неправильно в исходном подходе, а не просто дает пример кода. – vonPryz

+0

Вы правы @vonPryz. Я был немного ленив там. –

+0

Благодарим вас за помощь, я, казалось, стучал головой о камень в течение нескольких дней на этом. Однако, когда он выдает файл csv, он помещает раздел пароля в столбец a и имя пользователя в столбце B файла csv. Зачем это выводить это так? Как это можно отменить? – squirrel

Смежные вопросы