2017-02-13 1 views
1

Jeder gut mit Hash-Tabellen Ale helfen auf dieser. Ich habe mehrere globale Gruppen, in denen ich jedes Mitglied der Gruppen versammle. Ich versuche, sie zu einer Hash-Tabelle hinzuzufügen, jede Zeile enthält alle Informationen über das Benutzerkonto zurückgegeben wird, wo die $ Gruppe der Schlüssel ist.PowerShell Problem beim Hinzufügen von Benutzerinformationen von AD in Array

Wenn ich $ vdiArr.add benutze bekomme ich den Fehler Kann keine Überladung für "add" und das Argument count: "9" finden. Wenn ich den Befehl Hashed entfernen, funktioniert es gut, aber die Daten im Array scheinen überall zu sein. Ich versuche, die Informationen jedes Benutzers auf einer Zeile innerhalb des Arrays zu erreichen. vdiArr zB [0] = {theirGroup, Namens-, Given, Lastname und so weiter ....

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" 

Antwort

1

Versuchen die folgenden:

$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 = ... unterdrückt die (unerwünschte) -Ausgabe von der Anruf .Add().

  • Der obige Ansatz zeigt, wie ein benutzerdefiniertes Objekt aus einer Hash-Tabelle zu konstruieren, aber beachten Sie, dass, wenn Sie eine Group Eigenschaft als berechnete Eigenschaft zu Ihrem Select-Object Aufruf hinzugefügt, um die resultierenden Objekte direkt mit dem Ausgang Array könnte hinzufügen .


Was , was Sie schon versucht:

$vdiArr=[System.Collections.ArrayList]@{} ist wahrscheinlich nicht das, was Sie gedacht, weil die leeren wörtliche hashtable Casting - @{} - zu [System.Collections.ArrayList] Ergebnissen in einem leeren Array Liste - das gleiche wie [System.Collections.ArrayList] @() (Gießen von einem leeren Array Literal) oder New-Object System.Collections.ArrayList

Das heißt, Ihre nächsten Anweisung - [email protected]{} - vollständig überschreibt Ihre frühere Aussage und weist eine leere Hash-Tabelle zu $vdiArr, die Art der $vdiArr[hashtable] ([System.Collections.Hashtable]) zu machen.

Ihr .Add() Anruf dann fehl, weil ein nur .Add() Methode des hashtable Argumente akzeptiert - der Schlüssel und der Name des neuen Eintrags - nicht die 9 Sie es zu geben sind.

Das heißt, selbst wenn $vdiArr eine Instanz [System.Collections.ArrayList] waren, wie Sie wahrscheinlich gedacht, würde die .Add() Anruf nicht funktioniert, weil [System.Collections.ArrayList] ‚s .Add() Methode akzeptiert nur ein Einzel Argument - das neue Element hinzuzufügen.

Verwandte Themen