Вывод значений из gc в хэш-таблицу

Попытка сделать хэш-таблицу с 2 категориями: Пользователи и Пароли. Пока это мой код, но проблема в том, что на выходе отображается только команда, а не выполняется.

for ($i=1; $i -le 10; $i++){
$caps = [char[]] "ABCDEFGHJKMNPQRSTUVWXY"
$lows = [char[]] "abcdefghjkmnpqrstuvwxy" 
$nums = [char[]] "2346789"
$spl = [char[]] "!@#$%^&*?+"

$first = $lows | Get-Random -count 1;
$second = $caps | Get-Random -count 1;
$third = $nums | Get-Random -count 1;
$forth = $lows | Get-Random -count 1;
$fifth = $spl | Get-Random -count 1;
$sixth = $caps | Get-Random -count 1;

$pwd = [string](@($first) + @($second) + @($third) + @($forth) + @($fifth) + @($sixth))

Out-File C:\Users\Administrator\Documents\L8_userpasswords.txt -InputObject $pwd -Append

}

$here = @'
$users=Get-Content C:\\Users\\Administrator\\Desktop\\L8_users.txt
$passwords=Get-Content C:\\Users\\Administrator\\Documents\\L8_userpasswords.txt
'@
convertfrom-stringdata -stringdata $here

Это вывод, который я получаю:

PS C:\Users\Administrator> C:\Users\Administrator\Documents\l8.ps1

Name            Value
----            -----
$users          Get-Content C:\Users\Administrator\Desktop\Lab8_users.txt
$passwords      Get-Content C:\Users\Administrator\Documents\L8_userpasswords.txt

person Musa    schedule 13.03.2014    source источник


Ответы (3)


Я думаю, вам нужно это, чтобы превратить список пользователей и паролей в HashTable, а затем преобразовать его в PSCustomObject, который будет иметь два свойства: Users и Passwords.

$Data = [PSCustomObject]@{
    Users = Get-Content -Path C:\Users\Administrator\Desktop\L8_users.txt;
    Passwords = Get-Content -Path C:\Users\Administrator\Desktop\L8_userpasswords.txt;
}
$Data;
person Trevor Sullivan    schedule 13.03.2014
comment
Я пытаюсь это сделать, но теперь в моем выводе указано: Name Value ---- ----- Value {dV7a@H, wT9x+U, bU3y@Y, vC9s&R...} Name {Mike Baker, Mary Martin, Uma Siveram, Uri Demisky...} - person Musa; 13.03.2014
comment
@ТазБ. Пожалуйста, обновите свой вопрос с этой информацией. Не все так читабельно. - person Ansgar Wiechers; 14.03.2014

Или, эй, вы, вероятно, могли бы просто заменить весь скрипт одной строкой:

GC C:\Users\Administrator\Desktop\L8_users.txt|%{[PSCustomObject]@{User=$_;Password=[System.Web.Security.Membership]::GeneratePassword(10,3)}}

Если только вы не слишком привязаны к циклу генерации паролей. [System.Web.Security.Membership]::GeneratePassword(X,Y) будет генерировать сложные пароли, где X — длина, а Y — количество специальных символов (остальные будут случайным сочетанием букв верхнего регистра, букв нижнего регистра и цифр). Итак, в моем коде (10,3) пароль из 10 символов с 3 не буквенно-цифровыми символами.

Вы хотите сохранить его в файл? Передайте это Export-CSV. Или присвойте его переменной, поставив перед ней что-то вроде $UserList = <code>.

Или, если вам действительно нужна хеш-таблица, вы можете создать пустую, а затем немного изменить ее, чтобы добавить каждую пару в таблицу следующим образом:

$UserList = @{}
GC C:\Users\Administrator\Desktop\L8_users.txt|%{$UserList.add($_,[System.Web.Security.Membership]::GeneratePassword(10,3))}
person TheMadTechnician    schedule 13.03.2014

Предполагая, что L8_users.txt и L8_userpasswords.txt содержат одинаковое количество элементов, вы можете сделать что-то вроде этого:

$users     = Get-Content 'C:\Users\Administrator\Desktop\L8_users.txt'
$passwords = Get-Content 'C:\Users\Administrator\Documents\L8_userpasswords.txt'

$userpasswords = @{}
for ($i = 0; i -lt $users.Length; $i++) {
  $userpasswords[$users[$i]] = $passwords[$i]
}
person Ansgar Wiechers    schedule 13.03.2014