PowerShell 通讯组和成员列表?(Office 365)

PowerShell 通讯组和成员列表?(Office 365)

我正在寻找一种方法来通过 Office 365 上的 PowerShell 导出通讯组列表以及每个组的成员。

我发现脚本可以导出用户及其所属组的列表,但反过来却不行?

我对此很接近:

$saveto = "C:\\listmembers.txt"

Get-DistributionGroup | sort name | ForEach-Object {

    "`r`n$($_.Name)`r`n=============" | Add-Content $saveto
    Get-DistributionGroupMember $_ | sort Name | ForEach-Object {
        If($_.RecipientType -eq "UserMailbox")
            {
                $_.Name + " (" + $_.PrimarySMTPAddress + ")" | Add-Content $saveto
            }
    }
}

但是它生成一个文本文件,其中包含所有分发组的列表,并由“====”很好地划分,但没有显示任何成员。我在找到的每个组上都收到以下错误:

Cannot process argument transformation on parameter 'Identity'. Cannot convert value "GROUP NAME" to type "Microsoft.Exchange.Configuration.Tasks.DistributionGroupMemberIdParameter". Error:
 "Cannot convert hashtable to an object of the following type: Microsoft.Exchange.Configuration.Tasks.DistributionGroupMemberIdParameter. Hashtable-to-Object conversion is not supported in rest
ricted language mode or a Data section."
    + CategoryInfo          : InvalidData: (:) [Get-DistributionGroupMember], ParameterBindin...mationException
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,Get-DistributionGroupMember

答案1

我尝试了 Vaibhav 的响应,但没有立即起作用。我使用以下代码解决了我的问题。

$saveto = "listmembers.txt"
Get-DistributionGroup $_.Alias | sort Name | Foreach-Object {
"`r`n$($_.DisplayName)`r`n=============" | Add-Content $saveto
    Get-DistributionGroupMember $_.Alias  | sort Name | Foreach-Object {
        $_.DisplayName| Add-Content $saveto
    }
}

运行此输出,下面列表中的组 DisplayName 后跟用户 DisplayName。

答案2

我认为我有一个解决方法,如果没有答案的话——这是您的脚本的简化版本(减去格式):

Get-DistributionGroup | select -Property alias | Foreach-Object {
    Get-DistributionMember S_.Alias | Foreach-Object {
        $_.Name | Add-Content $saveto
    }
}

看到我做了什么了吗?我没有将对象从分发组直接传递给 foreach(这在某种程度上会破坏它),而是选择创建一个属性数组并将其传递给 foreach。

这个有效,我试过了。希望它能有所帮助。

答案3

如果您想获得单个/特定分发组的成员资格,这可能会很有用。

$ExportCSV=".\DistributionGroupMembersReport.csv"
$DG=Import-Csv -Header "DisplayName" $GroupNamesFile
 foreach($item in $DG)
 {
  Get-DistributionGroup -Identity $item.displayname | Foreach{
    $DisplayName=$_.DisplayName
    $Members=Get-DistributionGroupMember -ResultSize Unlimited -Identity $DisplayName
    $MembersCount=($Members.name).Count
    if($MembersCount -eq 0)
    {$Member="No Members"
     $Result=@{'DisplayName'=$DisplayName;'Members'=$Member
     $Results= New-Object PSObject -Property $Result 
     $Results | Select-Object DisplayName,Members| Export-Csv -Path $ExportCSV - 
       Notype -Append}
    elseif{
     foreach($Member in $Members)
     {
      $Result=@{'DisplayName'=$DisplayName;'Members'=$Member
      $Results= New-Object PSObject -Property $Result 
      $Results | Select-Object DisplayName,Members| Export-Csv -Path $ExportCSV -Notype -Append
   }}}

有关更详细的报告/属性,您可以参考此源脚本:将 Office 365 通讯组成员导出为 CSV

答案4

$groups = (Get-DistributionGroup -ResultSize Unlimited).PrimarySMTPAddress

$Results = foreach ($group in $groups){
  $dist = Get-DistributionGroup $group
  $members = (Get-DistributionGroupMember $group).name
  $dist | Select-Object *,@{n="members";e={$members -join ';'}}
}

$Results | Export-Csv All-DLs-and-Members.csv -NoTypeInformation

相关内容