我正在寻找一种方法来通过 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