如果之前有人问过,请向你道歉。如果是的话
我有一个构建组成员对象数组的函数。我可以看到它在函数内部工作正常,但返回对象的成员正好是两倍 - 尝试了一个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
答案 0 :(得分:2)
当然,这很容易。你输出了两次所有东西。使用Write-Output
行后,再使用return
行。 PowerShell函数将任何内容返回到未明确重定向的管道(例如使用Write-Host
或Export-Csv
),因此这两个命令基本上都做同样的事情,这是你加倍的地方。删除一个或另一个,你将全部设置。