2014-07-23 101 views
1

我正在嘗試編寫一個PowerShell腳本,它將一起編譯Active Directory中的組列表以及每個組的成員。我的最終目標是出口這一點到CSV文件,所以我想最終的PowerShell多維數組的格式如下:將數據添加到PowerShell陣列/添加成員

GroupName   GroupMember 
Domain Admins  Henry Doe 
Domain Admins  Melody Doe 
Domain Names  Doe Ray Me 
Domain Users  John Doe 
Domain Users  Jane Doe 
(etc…) 

我使用下面的代碼,試圖做到這一點:

[array]$arrGroupMemberList = New-Object PSObject 
Add-Member -InputObject $arrGroupMemberList -membertype NoteProperty -Name 'GroupName' -Value "" 
Add-Member -InputObject $arrGroupMemberList -membertype NoteProperty -Name 'GroupMember' -Value "" 
[array]$arrGroupMemberList = @() 

[array]$arrGroupNameObjects = Get-ADGroup -Filter * | Where-Object {$_.Name -Like "Domain*"} 

If ($arrGroupNameObjects.Count -ge 1) 
    { 
    ## Cycle thru each group name and get the members 
    $arrGroupNameObjects | ForEach-Object { 
     [string]$strTempGroupName = $_.Name 
     $arrGroupMemberObjects = Get-ADGroupMember $strTempGroupName -Recursive 
     If ($arrGroupMemberObjects.Count -ge 1) 
      { 
      ## Cycle thru the group members and compile into the final array 
      $arrGroupMemberObjects | ForEach-Object { 
       $arrGroupMemberList += $strTempGroupName, $_.Name 
      } 
      } 
    } 
    } 

我的問題是,我一直在結束了以下爲我的數組:

Domain Admins 
Henry Doe 
Domain Admins 
Melody Doe 
Domain Names 
Doe Ray Me 
Domain Users 
John Doe 
Domain Users 
Jane Doe 

我已經嘗試了幾種不同的方法,我已經搜查,但沒有找到答案的任何地方。我確信這很簡單,但是我做錯了什麼?我可以使用必要的數據創建一個多維數組,例如我想要做的事情嗎?而是如果我使用以下命令:

  ## Cycle thru the group members and compile into the final array 
      $arrGroupMemberObjects | ForEach-Object { 
       $arrGroupMemberList[$intIndex].GroupName = $strTempGroupName 
       $arrGroupMemberList[$intIndex].GroupMember = $_.Name 
       $intIndex++ 

我結束了類似的錯誤:

Property 'GroupMember' cannot be found on this object; make sure it exists and is settable. 
Property 'GroupName' cannot be found on this object; make sure it exists and is settable. 

感謝

**更新**

我可能已經發現了其中我的問題是,它可能是當我添加數組成員。在我的PowerShell腳本年底,我加入以下代碼行:

$arrGroupMemberList | Get-Member 

有沒有性,我的元素是不存在的,即使我加入他們早期在腳本中添加會員cmdlet的。我是否正確使用Add-Member cmdlet?

回答

1

我想通了,我在做什麼錯 - 我是用加入會員不正確。我試圖使用添加成員將成員添加到集合中,但似乎沒有這樣工作。一些簡單的事情,但我真的沒有看到它在任何地方討論。所以我找到了一些例子,並做了反覆試驗並使其運行。所以我想在這裏發佈更新以防其他人有同樣的問題。下面的代碼就像我想要的一樣工作(並且將創建一個包含Active Directory中組的列表以及每個組中的組成員的列表的陣列):

[array]$arrGroupNameObjects = Get-ADGroup -Filter * | Where-Object {$_.Name -Like "Domain*"} 

If ($arrGroupNameObjects.Count -ge 1) 
    { 
    ## Cycle thru each group name and get the members 
    $arrGroupNameObjects | ForEach-Object { 
     [string]$strTempGroupName = $_.Name 
     $arrGroupMemberObjects = Get-ADGroupMember $strTempGroupName -Recursive 
     If ($arrGroupMemberObjects.Count -ge 1) 
      { 
      ## Cycle thru the group members and compile into the final array 
      $arrGroupMemberObjects | ForEach-Object { 
       $objGroupMember = New-Object PSObject 
       Add-Member -InputObject $objGroupMember -membertype NoteProperty -Name 'GroupName' -Value $strTempGroupName 
       Add-Member -InputObject $objGroupMember -membertype NoteProperty -Name 'GroupMemberName' -Value $_.Name 
       [array]$arrGroupMemberList += $objGroupMember 
      } 
      } 
    } 
    }