2016-11-18 7 views
1

これまでに尋ねられたことがありましたら、お詫び申し上げます。その場合PowerShellでコレクションオブジェクトが重複して返される

私はグループメンバーのオブジェクト配列を構築する関数を持っています。私はそれが関数内で正常に動作することがわかりますが、返すオブジェクトは、正確にメンバーの2倍です - ArrayListを試して、それはさらに悪いです。誰かが

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 

答えて

2

確かに、これは簡単です。すべてを2回出力しています。一度Write-Output行を入力し、return行を入力してください。 PowerShell関数は、特にリダイレクトされないパイプライン(例えばWrite-HostまたはExport-Csvなど)に何かを返すので、これらのコマンドは基本的に同じことを行います。どちらか一方を削除すると、すべて設定されます。

+0

ありがとうございます。後の返品は削除できますが、引き続き呼び出し元のスクリプトにコレクションを渡します。 – westerdaled

+0

はい、関数が出力するとコレクションは展開されますので、どちらの方法でも違いはありません。 – TheMadTechnician

+0

ありがとう、私は書き込みオブジェクトが各オブジェクトの内部の人口をちょうど処理したと思ったので少し混乱しました。 – westerdaled

関連する問題