如何为Get-AzureADUser命令设置两个同时生效的过滤条件?
Azure AD用户查询多条件筛选配置
你原来用来筛选DisplayName以student开头用户的语句是:Get-AzureADUser -Filter "startswith(DisplayName,'student')"
要叠加UserPrincipalName字段匹配@somedomain.com的规则,直接把两个条件用逻辑连接词拼到同一个Filter参数里就行,能让服务端直接完成联合匹配,不用把全量数据拉到本地再筛。
可直接运行的配置写法
考虑到Azure AD的UPN结构是「用户名@域名」,要匹配包含@somedomain.com的规则,优先选兼容性更好的后缀匹配写法,避免部分环境下contains()操作符的语法兼容问题:
Get-AzureADUser -Filter "startswith(DisplayName,'student') and endswith(UserPrincipalName,'@somedomain.com')"
如果确实需要匹配字段任意位置包含指定字符串的逻辑,也可以直接用contains()操作符,对应语句为:Get-AzureADUser -Filter "startswith(DisplayName,'student') and contains(UserPrincipalName,'@somedomain.com')"
配置避坑要点
- 整个Filter值必须用双引号包裹,内部的匹配常量用单引号包裹,不要混用引号导致PowerShell解析报错
- OData语法要求逻辑连接词
and小写,写为大写AND很可能触发服务端的筛选语法校验失败 - 别图省事用本地管道做二次过滤(比如在原有语句后面拼
| Where-Object {$_.UserPrincipalName -like "*@somedomain.com"}),这种写法会先把所有符合DisplayName条件的用户全量拉到本地终端,租户用户量较大时会出现查询超时、速度极慢的问题
内容的提问来源于stack exchange,提问作者richgkav
相关产品推荐
相关产品推荐

