Consulta do PowerShell AD LDS com filtro usando curinga não se comportando como esperado

3

Eu sou o administrador de um site do sistema de gerenciamento de aprendizado que armazena sua estrutura de página no AD LDS. Eu estou tentando executar uma consulta para obter objetos (páginas no site) correspondendo a um filtro para distinguishedName. Meu filtro não está se comportando como esperado.

Abaixo estão três consultas, todas idênticas, exceto pelo parâmetro de filtro. Isso não é exatamente o que estou tentando fazer, mas para fins de demonstração isso ilustrará o meu problema.

Isso funciona (retornando um número muito grande de resultados):

Get-ADObject -Server 'localhost:389' -SearchBase 'CN=Academics,CN=Portal,O=Jenzabar,C=US' -Filter 'distinguishedName -like "*"'

Isso também funciona (retornando um único resultado):

Get-ADObject -Server 'localhost:389' -SearchBase 'CN=Academics,CN=Portal,O=Jenzabar,C=US' -Filter 'distinguishedName -like "CN=LEC,CN=Academics,CN=Portal,O=Jenzabar,C=US"'

No entanto, isso não retorna resultados, e eu não entendo o porquê:

Get-ADObject -Server 'localhost:389' -SearchBase 'CN=Academics,CN=Portal,O=Jenzabar,C=US' -Filter 'distinguishedName -like "C*"'

Tanto quanto eu posso dizer, a terceira consulta deve retornar todos os resultados da primeira consulta, e deve, pelo menos, certamente retornar o único resultado da segunda consulta. Qualquer ajuda seria apreciada!

    
por MasterOfNone 31.07.2015 / 17:30

1 resposta

4

Você não pode usar um curinga parcial em um filtro LDAP em um atributo DN, como distinguishedName .

De Active Directory: filtros de sintaxe LDAP

The wildcard character '*' is allowed, except when the (AD Attribute) is a DN attribute. Examples of DN attributes are distinguishedName, manager, directReports, member, and memberOf. If the attribute is DN, then only the equality operator is allowed and you must specify the full distinguished name for the value (or the * character for all objects with any value for the attribute).

Seu primeiro exemplo distinguishedName -like "*" significa que "distinguishedName não está vazio", e é por isso que ele retorna resultados.

Em vez disso, use Where-Object para corresponder aos atributos fora da sintaxe do filtro LDAP. A tabela a seguir retorna todos os objetos do AD a partir de $server em $searchBase e usa Where-Object para filtrar a coleção em que distinguishedName corresponde a CN=Jason* .

Get-ADObject -Server $server -SearchBase $searchBase -Filter * |
  Where-Object { $_.distinguishedName -like 'CN=Jason*' }

Você também tem uma opção de regex completa usando -match em vez de -like .

    
por 31.07.2015 / 18:49