2017-02-13 1 views
1

Toute personne ayant une bonne table de hachage peut aider à résoudre ce problème. J'ai plusieurs groupes mondiaux où je rassemble chaque membre des groupes. J'essaie de les ajouter à une table de hachage, chaque ligne contient toutes les informations sur le compte d'utilisateur retourné où le groupe $ est la clé.Problème avec PowerShell lors de l'ajout d'informations utilisateur d'AD dans Array

Lorsque j'utilise $ vdiArr.add, j'obtiens l'erreur Impossible de trouver une surcharge pour "add" et le nombre d'arguments: "9". Lorsque je supprime la commande hashed out, cela fonctionne correctement, mais les données du tableau semblent être partout. J'essaye de réaliser l'information de chaque utilisateur sur une ligne dans le tableau. par exemple vdiArr [0] = {theirGroup, Nom, GivenName, LastName et ainsi de suite ....

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" 

Répondre

1

Effectuez les actions suivantes:

$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 = ... supprime la sortie (non désiré) de l'appel .Add().

  • L'approche ci-dessus montre comment construire un objet personnalisé à partir d'une table de hachage, mais notez que si vous avez ajouté une propriété Group comme une propriété calculée à votre Select-Object appel, vous pouvez ajouter les objets résultants directement au tableau de sortie .


Quant à ce que vous avez essayé:

$vdiArr=[System.Collections.ArrayList]@{} est probablement pas ce que vous vouliez, parce que la coulée du vide Hashtable littéral - @{} - à [System.Collections.ArrayList] résultats dans un tableau vide liste - identique à [System.Collections.ArrayList] @() (diffusion à partir d'un tableau vide ) ou New-Object System.Collections.ArrayList

Cela dit, votre déclaration très prochaine - [email protected]{} - complètement votre déclaration emporte précédente et attribue un Hashtable vide $vdiArr, ce qui rend le type de $vdiArr[hashtable] ([System.Collections.Hashtable]).

Votre .Add() appel échoue alors, parce qu'une méthode de Hashtable .Add() accepte uniquement arguments - la clé et le nom de la nouvelle entrée - pas 9 vous donner.

Cela dit, même si $vdiArr étaient une instance [System.Collections.ArrayList], comme vous avez probablement l'intention, l'appel .Add() ne fonctionnerait pas, parce que la méthode de .Add()[System.Collections.ArrayList] accepte un seul argument - le nouvel élément à ajouter.