2014-07-23 1 views
1

J'essaye d'écrire un script PowerShell qui va compiler ensemble une liste de groupes dans Active Directory avec les membres de chaque groupe. Mon but ultime est d'exporter ce vers un fichier CSV, donc je veux le tableau PowerShell pluridimensionnelle finale pour avoir le format suivant:Ajout de données à une baie PowerShell/Add-Member

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

J'utilise le code suivant pour essayer de le faire:

[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 
      } 
      } 
    } 
    } 

mon problème est, je continue à se retrouver avec comme mon tableau:

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

J'ai essayé quelques façons différentes et je l'ai cherché, mais n'ont pas trouvé la réponse nulle part. Je suis sûr que c'est quelque chose de simple, mais qu'est-ce que je fais de mal? Puis-je créer un tableau multidimensionnel avec les données nécessaires, comme j'essaie de le faire? Si j'utilise les éléments suivants à la place:

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

je me retrouve avec des erreurs comme:

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. 

Merci

** Mise à jour **

je peut avoir trouvé où mon problème est, il peut être quand j'ajoute les membres du tableau. A la fin de mon script PowerShell, je suis en ajoutant la ligne de code suivante:

$arrGroupMemberList | Get-Member 

Il n'y a aucune propriété, mes éléments ne sont pas là, même si je les ajoutais avec cmdlet Add-Member plus tôt dans le script. Est-ce que j'utilise la cmdlet Add-Member correctement?

Répondre

1

je me suis dit ce que je faisais mal - j'utilisais Add-Member de manière incorrecte. J'essayais d'utiliser Add-Member pour ajouter des membres à une collection, et cela ne semble pas fonctionner de cette façon. Quelque chose d'aussi simple mais je ne l'ai vraiment pas vu discuté nulle part. J'ai donc trouvé quelques exemples et j'ai fait l'essai et l'erreur et je l'ai mis au travail. Donc, je voulais poster une mise à jour ici au cas où quelqu'un d'autre a le même problème. Le code suivant fonctionne exactement comme je le veux (et va créer un tableau avec une liste de groupes d'Active Directory avec les membres du groupe dans chaque groupe):

[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 
      } 
      } 
    } 
    } 
Questions connexes