任何善于使用哈希表的人都可以帮助解决这个问题。我有多个全球小组,我正在收集小组的每个成员。我试图将它们添加到哈希表,每行包含有关返回的用户帐户的所有信息,其中$ group是键。
当我使用$ vdiArr.add时,我收到错误找不到超载#34;添加"和参数计数:" 9"。 当我删除散列输出命令它工作正常但数组中的数据似乎到处都是。我试图在阵列中的一行上获得每个用户的信息。例如vdiArr [0] = {itsGroup,Name,GivenName,LastName等......
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"
答案 0 :(得分: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]
({ {1}})。
您的[System.Collections.Hashtable]
电话会失败,因为哈希表的.Add()
方法只接受 2 参数 - 新条目的密钥和名称 - 而不是9你要给它。
也就是说,即使.Add()
是$vdiArr
个实例,正如您可能想要的那样,[System.Collections.ArrayList]
来电也不会有效,因为.Add()
&#39 ; s [System.Collections.ArrayList]
方法只接受单个参数 - 要添加的新元素。