2017-02-13 43 views
1

任何人都好与哈希表强麦助阵就这一个。我有多个全球性组织,我在这里收集每个组的成员。我试图把它们添加到一个哈希表,每行包含所有要退回的有关用户帐号的信息,其中$组是关键。PowerShell的问题,从公元将用户信息添加到阵列

当我使用$ vdiArr.add我得到的错误无法找到“添加”过载和参数计数:“9”。 当我删除了哈希出命令它工作正常,但在阵列中的数据似乎是所有的地方。我试图在数组中的一行上实现每个用户的信息。例如vdiArr [0] = {theirGroup,名称,给定名称,姓氏等....

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]@{} 
[email protected]{} 

    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

(从空 阵列字面铸造)

这就是说,你第二天的语句 - [email protected]{} - 完全覆盖以前的声明和一个空的哈希表分配给$vdiArr,使得$vdiArr[hashtable][System.Collections.Hashtable])类型。

.Add()调用失败,因为一个哈希表的.Add()方法只接受参数 - 键和新条目的名称 - 不是你给它9。

这就是说,即使$vdiArr是一个[System.Collections.ArrayList]实例,因为你可能预期的.Add()电话是行不通的,因为[System.Collections.ArrayList].Add()方法只接受单一参数 - 要添加的新元素。