PowerShell将用户信息从AD添加到数组中时出现问题



任何熟悉哈希表的人都可以在这方面提供帮助。我有多个全球小组,我在那里收集小组的每个成员。我正试图将它们添加到一个哈希表中,每一行都包含关于返回的用户帐户的所有信息,其中$group是密钥。

当我使用$vdiArr.add时,我得到错误找不到"add"的重载和参数计数:"9"。当我删除hashed out命令时,它运行良好,但数组中的数据似乎到处都是。我正试图在数组中的一行中实现每个用户的信息。例如vdiArr[0]={their Group,Name,GivenName,LastName等等…

clear-host
$count = $null
$date = Get-Date -format "MM-dd-yyyy_hh-mm-ss"
$vdiGrps = Get-Content "D:SourceFiles$ScriptsActive DirectoryADGroups.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 "$homeDesktoptest.csv"

尝试以下操作:

$vdiGrps = Get-Content "D:SourceFiles$ScriptsActive DirectoryADGroups.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 "$HOMEDesktoptest.csv"
  • $null = ...抑制来自.Add()调用的(不需要的)输出。

  • 上面的方法演示了如何从哈希表构造自定义对象,但请注意,如果将Group属性作为计算属性添加到Select-Object调用中,则可以将生成的对象直接添加到输出数组中。


至于您尝试了什么

$vdiArr=[System.Collections.ArrayList]@{}可能不是您想要的,因为将空的hashtableliteral-@{}-转换为[System.Collections.ArrayList]会导致空的数组列表-与[System.Collections.ArrayList] @()(从空的数组literal转换)或New-Object System.Collections.ArrayList相同

也就是说,您的下一个语句$vdiArr=@{}完全覆盖了您的上一个语句,并为$vdiArr分配了一个空哈希表,使$vdiArr的类型成为[hashtable]([System.Collections.Hashtable])。

然后,您的.Add()调用失败,因为哈希表的.Add()方法只接受2参数(键和新条目的名称),而不接受您给它的9。

也就是说,即使$vdiArr[System.Collections.ArrayList]实例,正如您可能想要的那样,.Add()调用也不会起作用,因为[System.Collections.ArrayList].Add()方法只接受单个参数-要添加的新元素。

最新更新