PowerShell将集合对象作为重复项返回

时间:2016-11-18 15:02:13

标签: powershell sharepoint office365

如果之前有人问过,请向你道歉。如果是的话

我有一个构建组成员对象数组的函数。我可以看到它在函数内部工作正常,但返回对象的成员正好是两倍 - 尝试了一个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

1 个答案:

答案 0 :(得分:2)

当然,这很容易。你输出了两次所有东西。使用Write-Output行后,再使用return行。 PowerShell函数将任何内容返回到未明确重定向的管道(例如使用Write-HostExport-Csv),因此这两个命令基本上都做同样的事情,这是你加倍的地方。删除一个或另一个,你将全部设置。