【问题标题】:Simple LDAP Query Returning nothing with multiple CN selection简单的 LDAP 查询不返回多个 CN 选择
【发布时间】:2017-05-02 17:57:48
【问题描述】:

如果我运行它,它会正确返回:

$DirSearcher = New-Object System.DirectoryServices.DirectorySearcher([adsi]'')
$DirSearcher.Filter = '(&(objectClass=Computer) (cn=*dc*))'
$DirSearcher.FindAll().GetEnumerator() | sort-object { $_.Properties.name } `
| ForEach-Object { $_.Properties.name }

如果我用两个选项运行它,它会失败:

$DirSearcher = New-Object System.DirectoryServices.DirectorySearcher([adsi]'')
$DirSearcher.Filter = '(&(objectClass=Computer) (cn=*dc*) (cn=*adm*))'
$DirSearcher.FindAll().GetEnumerator() | sort-object { $_.Properties.name } `
| ForEach-Object { $_.Properties.name }

如果我使用 OR 来运行它,它会返回所有计算机:

$DirSearcher = New-Object System.DirectoryServices.DirectorySearcher([adsi]'')
$DirSearcher.Filter = '(|(objectClass=Computer) (cn=*dc*) (cn=*adm*))'
$DirSearcher.FindAll().GetEnumerator() | sort-object { $_.Properties.name } `
| ForEach-Object { $_.Properties.name }

为了只搜索两个通配符名称,我在过滤器部分缺少什么?顺便说一句,如果我试图排除计算机,它似乎工作正常:

$DirSearcher = New-Object System.DirectoryServices.DirectorySearcher([adsi]'')
$DirSearcher.Filter = '(&(objectClass=Computer)(!(cn=*esx*)) (!(cn=*slng*)) (!(cn=*dcen*)) )'
$DirSearcher.FindAll().GetEnumerator() | sort-object { $_.Properties.name } `
| ForEach-Object { $_.Properties.name }

【问题讨论】:

    标签: powershell filter ldap adsi


    【解决方案1】:

    我找到了一种更简洁的方法:

    Get-ADComputer -Filter { Name -like '*dc*' -or Name -like '*adm*'} | sort-object Name | select-object -ExpandProperty Name `
    | Out-File -FilePath C:\Scripts\PI_Computers.txt
    

    谢谢!

    【讨论】:

      【解决方案2】:

      仅用于协议:

      您查询的正确 LDAP 过滤器是

      (&(objectClass=Computer)(|(cn=*dc*)(cn=*adm*)))
      

      但您的解决方案更好(使用预定义的 Cmdlet 执行默认任务总是更好)

      再见

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-26
        相关资源
        最近更新 更多