2016-11-18 4 views
1

Hallo Entschuldigung, wenn dies zuvor gefragt wurde. Wenn ja,PowerShell Rückholsammlungsobjekt als Duplikate

Ich habe Funktion, die ein Objekt-Array von Gruppenmitgliedern erstellt. Ich kann sehen, es funktioniert gut in der Funktion, aber das Objekt zurück hat genau doppelt die Mitglieder - versuchte eine ArrayList und das ist noch schlimmer. Kann jemand bitte erklären, was los ist ....

function Get-MsolGroupMembers 
    { 


    [CmdletBinding()] 
    param 
    (
    [Parameter(Mandatory=$true, Position=0)] 
    [string] 
    $SearchString 
) 

    $groups = Get-MsolGroup -SearchString $SearchString -MaxResults 1 

    $retObjs = @() 

    Write-Host -fore Yellow $groups.Count 'Group(s) found' 
    foreach ($group in $groups) 
    { 
    $groupGUID = $group.ObjectId 
    $groupDisplayName = $group.DisplayName 
    $groupEmail = $group.EmailAddress 
    $groupType = $group.GroupType 
    $groupMembers = Get-MsolGroupMember -GroupObjectId $groupGUID -All 


    foreach ($groupMember in $groupMembers) 
    { 
     $Properties = @{"GroupDisplayName"=$groupDisplayName; 
     "GroupEmail"=$grouEmail; 
     "GroupType"=$groupType; 
     "MemberDisplayName"=$groupMember.DisplayName; 
     "MemberEmail"=$groupMember.EmailAddress; 
     "MemberType"=$groupMember.GroupMemberType} 

     $Obj = New-Object -TypeName PSObject -Property $Properties 
     Write-Output $Obj | select GroupDisplayName,GroupEmail,GroupType,MemberDisplayName,MemberEmail,MemberType 

     $retObjs += $Obj 
    } 

    return $reObjs; 
    } 

}

$members = Get-MsolGroupMembers -SearchString 'My Test Group' 
$members.Count 

Antwort

2

Klar, das ist einfach. Du gibst alles zweimal aus. Einmal mit der Write-Output Linie, und dann wieder mit der return Linie. PowerShell-Funktionen geben alles an die Pipeline zurück, die nicht speziell umgeleitet wird (z. B. mit Write-Host oder Export-Csv), so dass beide Befehle im Wesentlichen das Gleiche tun, aus dem Ihre Verdoppelung stammt. Entferne das eine oder das andere und du bist fertig.

+0

Dank kann ich die nachfolgende Rückkehr entfernen, aber meine Sammlung immer noch an das aufrufende Skript übergeben. – westerdaled

+0

Ja, die Sammlung wird sowieso abgerollt, wenn die Funktion sie ausgibt, also macht es keinen Unterschied, wie Sie es tun. – TheMadTechnician

+0

Danke, ich war ein wenig verwirrt, da ich dachte, dass write-object nur die interne Bevölkerung jedes Objekts behandelt. Danke für das Korrigieren von mir – westerdaled

Verwandte Themen