求助:获取Azure中隶属于Company A的用户所在组的列表(仅组名与描述)
脚本问题排查与修正
原脚本的核心问题
- 参数语法错误:
Get-AzureADUser没有-User参数,需用-UserPrincipalName指定用户的UPN(可直接传入$user.PrimarySmtpAddress)。 - 筛选条件不符需求:原脚本中
Company -eq "Company"未匹配目标的Company A,需修正筛选值。 - 去重逻辑低效且易出错:数组拼接
$FinalGroupList = $FinalGroupList + $group性能差,空数组时$FinalGroupList.displayname会返回$null,导致重复判断失效。 - CSV导出冗余:循环创建对象再追加导出的方式没必要,直接选择属性一次性导出更高效。
修正后的脚本
# 首次运行需先安装模块:Install-Module AzureAD -Force -AllowClobber Import-Module AzureAD # 获取Company A的邮箱用户 $userList = Get-Recipient -Filter { Company -eq "Company A" } | Where-Object { $_.RecipientType -eq "UserMailbox" } # 用哈希表实现高效去重,键为组名称,值为组对象 $uniqueGroups = @{} foreach ($user in $userList) { # 通过UPN获取用户所属组 $userGroups = Get-AzureADUser -UserPrincipalName $user.PrimarySmtpAddress | Get-AzureADUserMembership foreach ($group in $userGroups) { # 仅添加未记录的组 if (-not $uniqueGroups.ContainsKey($group.DisplayName)) { $uniqueGroups[$group.DisplayName] = $group } } } # 提取组名称和描述,导出到CSV $uniqueGroups.Values | Select-Object DisplayName, Description | Export-Csv -Path "C:\temp\Groups.csv" -NoTypeInformation -Encoding UTF8
关键修改说明
- 修正命令参数:改用
-UserPrincipalName匹配用户的邮箱地址,符合Get-AzureADUser的语法要求。 - 匹配目标公司:将筛选条件中的公司名称改为
Company A,贴合需求。 - 哈希表去重:利用哈希表键的唯一性实现高效去重,避免数组拼接的性能损耗和空数组判断错误。
- 简化导出流程:直接通过
Select-Object提取所需属性,一次性完成CSV导出,省去循环创建对象的冗余操作。 - 指定编码:导出时添加
-Encoding UTF8,避免中文描述出现乱码问题。
内容的提问来源于stack exchange,提问作者newmish77
相关产品推荐
相关产品推荐

