Azure AD用户导出过滤问题:如何筛选Member用户并导出指定属性
解决Azure AD筛选Member用户并导出指定属性的问题
问题根源
你的核心问题出在两个地方:
- 过滤条件写反(你要筛选Member却错误使用了Guest作为判断值)
- 报表对象的UserType字段被错误赋值为布尔判断结果,导致原本的字符串类型("Member"/"Guest")变成了True/False,无法正确筛选。
正确实现方法
方法1:在Microsoft Graph请求层面直接过滤(推荐)
在请求URI中添加正确的$filter参数,直接让Graph只返回Member用户,减少数据传输量:
# 修正后的URI:添加$filter=userType eq 'Member',注意PowerShell中$需要转义为`$ $URI = "https://graph.microsoft.com/beta/users?`$select=displayName,userPrincipalName, mail, department, jobTitle, extension_1fe7973b28e74213b897d62528e614c7_extensionAttribute14, extension_1fe7973b28e74213b897d62528e614c7_extensionAttribute15, accountEnabled, signInActivity, UserType, id&`$expand=manager(`$select=displayName,userPrincipalName)&`$top=999&`$filter=userType eq 'Member'"
方法2:在PowerShell本地过滤(如果需要先获取所有用户再筛选)
- 修正报表对象的UserType字段:不要将其赋值为判断表达式,直接保留原始的UserType字符串值:
$ReportLine = [PSCustomObject] @{ DisplayName = $User.displayName UserPrincipalName = $User.userPrincipalName Mail = $User.mail Department = $User.department JobTitle = $User.jobTitle ExtensionAttribute14 = $User.extension_1fe7973b28e74213b897d62528e614c7_extensionAttribute14 ExtensionAttribute15 = $User.extension_1fe7973b28e74213b897d62528e614c7_extensionAttribute15 AccountEnabled = $User.accountEnabled LastSignIn = $User.signInActivity.lastSignInDateTime UserType = $User.UserType # 直接取原始值,不要做判断 ManagerName = $User.manager.displayName ManagerUPN = $User.manager.userPrincipalName Id = $User.id }
- 修正输出筛选逻辑:将筛选条件改为
UserType -eq "Member",并确保导出的是正确字段:
Write-Host "All done. " $Report.Count "accounts processed - output available in c:\Temp\ReportUserSignin.csv." $Report | Sort DisplayName | Out-GridView # 筛选Member用户并导出 $Report | Where-Object {$_.UserType -eq "Member"} | Sort-Object {$_.LastSignIn -as [DateTime]} -Descending | Select-Object DisplayName, LastSignIn, Mail, Department, JobTitle, UserType | Export-CSV -NoTypeInformation c:\Temp\ReportUserSignin.csv
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

