如何在PowerShell的Get-ADUser查询中添加多个displayName查询条件
PowerShell Get-ADUser 多displayName查询条件实现方法
以下是两种常用的实现方案:
场景1:少量固定displayName条件
直接在Filter参数里用-or逻辑运算符拼接多个条件即可,示例如下:
# 示例:匹配displayName以张开头、或以李开头、或以王开头的用户 Get-ADUser -Filter "displayName -like '张*' -or displayName -like '李*' -or displayName -like '王*'" -SearchBase "OU= ,OU= ,OU= AG,DC= ,DC=" -Properties mail | Select-Object mail | Sort-Object
如果是精确匹配多个displayName,把-like改成-eq,去掉通配符*即可。
场景2:大量动态displayName条件(存放在数组变量中)
如果需要查询的displayName数量多,或者是动态生成的数组,推荐用LDAP过滤器简化写法,示例如下:
# 第一步:定义待查询的displayName数组 $targetDisplayNames = @("张三", "李四", "王五", "赵六") # 第二步:生成LDAP格式的过滤规则 $ldapFilter = "(|" + ($targetDisplayNames | ForEach-Object {"(displayName=$_)"}) -join "" + ")" # 第三步:执行查询 Get-ADUser -LDAPFilter $ldapFilter -SearchBase "OU= ,OU= ,OU= AG,DC= ,DC=" -Properties mail | Select-Object mail | Sort-Object
如果需要模糊匹配,只需要修改生成过滤规则的部分,比如:
$ldapFilter = "(|" + ($targetDisplayNames | ForEach-Object {"(displayName=*$_*)"}) -join "" + ")"
优化提示
原代码里的-Properties *会查询用户的所有AD属性,非常消耗域控制器性能,你只需要用到mail属性的话,改成-Properties mail即可大幅提升查询效率。
内容的提问来源于stack exchange,提问作者chkdsk
相关产品推荐
相关产品推荐

