Проблема с PowerShell при добавлении информации пользователя из AD в массив
Любой, кто хорош с хэш-таблицами Эля, может помочь в этом. У меня есть несколько глобальных групп, где я собираю каждого члена групп. Я пытаюсь добавить их в хеш-таблицу, каждая строка содержит всю информацию о возвращаемой учетной записи пользователя, где ключом является $group.
Когда я использую $vdiArr.add, я получаю сообщение об ошибке. Не удается найти перегрузку для "add" и количество аргументов: "9". Когда я удаляю команду hashed out, она работает нормально, но данные в массиве, кажется, повсюду. Я пытаюсь получить информацию о каждом пользователе в одной строке в массиве. например, vdiArr[0]={их группа, имя, имя, фамилия и т. д.
clear-host
$count = $null
$date = Get-Date -format "MM-dd-yyyy_hh-mm-ss"
$vdiGrps = Get-Content "D:\SourceFiles$\Scripts\Active Directory\ADGroups.txt"
$vdiArr=[System.Collections.ArrayList]@{}
$vdiArr=@{}
foreach($group in $vdiGrps)
{
$ADgroup=(get-adgroup $group -properties members).members | get-adobject | where {$_.objectclass -eq "User"}| get-aduser -properties * | select name, GivenName, Surname, UserPrincipalName, SamAccountName, Enabled, DistinguishedName
$ADgroup
$vdiArr.add($group,$ADgroup.name,$ADgroup.GivenName,$ADgroup.Surname,$ADgroup.UserPrincipalName,$ADgroup.SamAccountName,$ADgroup.SamAccountName,$ADgroup.Enabled,$ADgroup.DistinguishedName)
#$vdiArr.group = $group
#$vdiArr.Name = $ADgroup.name
#$vdiArr.GivenName = $ADgroup.GivenName
#$vdiArr.Surname = $ADgroup.Surname
#$vdiArr.UserPrincipalName = $ADgroup.UserPrincipalName
#$vdiArr.SamAccountName = $ADgroup.SamAccountName
#$vdiArr.Enabled = $ADgroup.Enabled
#$vdiArr.DistinguishedName = $ADgroup.DistinguishedName
}
$arrOutput += New-Object -TypeName psobject -Property $vdiArr
Out-File -InputObject $arrOutput -FilePath "$home\Desktop\test.csv"
1 ответ
Попробуйте следующее:
$vdiGrps = Get-Content "D:\SourceFiles$\Scripts\Active Directory\ADGroups.txt"
# Create empty array list.
$vdiArr=[System.Collections.ArrayList] @()
foreach($group in $vdiGrps)
{
# Get users in group.
$ADgroup=(get-adgroup $group -properties members).members | get-adobject | where {$_.objectclass -eq "User"}| get-aduser -properties * | select name, GivenName, Surname, UserPrincipalName, SamAccountName, Enabled, DistinguishedName
# Loop over all users in group and add them to the output array.
foreach($user in $ADgroup) {
$null = $vdiArr.Add([pscustomobject] @{
Group = $group
Name = $user.name
GivenName = $user.GivenName
Surname = $user.Surname
UserPrincipalName = $user.UserPrincipalName
SamAccountName = $user.SamAccountName
Enabled = $user.Enabled
DistinguishedName = $user.DistinguishedName
})
}
}
Out-File -InputObject $vdiArr -FilePath "$HOME\Desktop\test.csv"
$null = ...
подавляет (нежелательный) вывод из.Add()
вызов.Приведенный выше подход демонстрирует, как создать пользовательский объект из хеш-таблицы, но учтите, что если вы добавили
Group
недвижимость как рассчитанная недвижимость для вашегоSelect-Object
Вы можете добавить полученные объекты непосредственно в выходной массив.
Что касается того, что вы пробовали:
$vdiArr=[System.Collections.ArrayList]@{}
это, вероятно, не то, что вы хотели, потому что приведение пустого хеш-таблицы - @{}
- для [System.Collections.ArrayList]
приводит к пустому списку массивов - так же, как [System.Collections.ArrayList] @()
(приведение из литерала пустого массива) или New-Object System.Collections.ArrayList
Тем не менее, ваше следующее заявление - $vdiArr=@{}
- полностью переопределяет ваше предыдущее утверждение и присваивает пустой хеш-таблицу $vdiArr
, делая тип $vdiArr
[hashtable]
([System.Collections.Hashtable]
).
Ваш .Add()
вызов тогда терпит неудачу, потому что хеш-таблица .Add()
Метод принимает только 2 аргумента - ключ и имя новой записи, а не 9, которые вы ей даете.
Тем не менее, даже если $vdiArr
были [System.Collections.ArrayList]
экземпляр, как вы, вероятно, намеревались, .Add()
звонок не сработает, потому что [System.Collections.ArrayList]
"s .Add()
Метод принимает только один аргумент - новый элемент для добавления.