PowerShell问题将AD中的用户信息添加到Array中

时间:2017-02-13 03:38:35

标签: powershell powershell-v5.0

任何善于使用哈希表的人都可以帮助解决这个问题。我有多个全球小组,我正在收集小组的每个成员。我试图将它们添加到哈希表,每行包含有关返回的用户帐户的所有信息,其中$ 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"

1 个答案:

答案 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]方法只接受单个参数 - 要添加的新元素。