Filtrar o resultado do 'Get-ADUser' usando o sAMAccountname

Eu gostaria de extrair um nome de utilizador do AD usando {[[2]}. O problema que estou tendo é ao usar o nome sAMAaccount como filtro, eu recebo vários resultados se o valor for encontrado em vários itens. Para ilustrar, se o meu samaccountname é 'a123b', e o do meu colega de trabalho é 'c1234d', recebo ambos os nossos nomes quando dirijo isto:

get-aduser -ldapFilter "(samaccountname=*123*)"| select Name

gostaria de devolver apenas a minha informação baseada em ' 123 'e não em '1234'

Eu já tentei o seguinte também sem sucesso:

get-aduser -Filter "samaccountname -like '*123*'" | select Name
Author: mklement0, 2019-08-24

3 answers

Pode reduzir a lista com uma expressão regular:

$filter = "[a-zA-Z]123[a-zA-Z]"
Get-ADUser -Filter "samaccountname -like '*123*'" | where { $_.samaccountname -match $filter} | select name
  • $filter é um padrão simples de expressão regular à procura de 123 rodeados por letras (maiúsculas ou minúsculas)
  • -match é o operador que permite uma comparação regex
 5
Author: Itchydon, 2019-08-25 20:07:45

Ao usar umparcial SamAccountName num filtro ou LDAPFilter, é mais do que provável obter vários resultados.

Para testar e devolver uma conta de utilizador específica, você precisa que o filtro seja mais específico se possível (depende das políticas que o seu ambiente usa para nomes de conta), como

Get-ADUser -Filter "SamAccountName -like 'a123*'" | Select-Object Name

Ou usar uma cláusula extra Where-Object para reduzir os resultados por alguma outra propriedade do utilizador, como o primeiro nome, por exemplo:

Get-ADUser -Filter "SamAccountName -like '*123*'" | Where-Object { $_.GivenName -eq 'John' } | Select-Object Name
Veja os exemplos acima. ainda pode devolver vários objetos de usuário..

Se o tiver, a forma absoluta de obter um único objecto de Utilizador é usando o DistinghuishedName desse utilizador e obter o objecto usando o parâmetro -Identity. Ver Get-ADUSer

P. S.: Ao usar o operador -like ou um LDAPFilter, use caracteres especiais nas partes do nome que podem variar.

 3
Author: Theo, 2019-08-24 14:17:17

Dado que não pode usar a expressão regular na pesquisa LDAP, poderá usar uma pesquisa como esta para a indicar para encontrar contas de utilizador que contenham 123 mas não com um quarto dígito:

(&(objectClass=user)(samaccountname=*123*)(!samaccountname=*1231*)(!samaccountname=*1232*)(!samaccountname=*1233*)(!samaccountname=*1234*)(!samaccountname=*1235*)(!samaccountname=*1236*)(!samaccountname=*1237*)(!samaccountname=*1238*)(!samaccountname=*1239*)(!samaccountname=*1230*))
É feio, mas funciona.

Lembre-se que, se tiver um filtro que começa com um carácter especial, o índice desse atributo não poderá ser usado, pelo que terá de olhar para cada conta para encontrar uma correspondência. Adicionei um filtro para objectClass, uma vez que está indexado e irá garantir que só olha para o utilizador objecto.

 0
Author: Gabriel Luci, 2019-08-24 18:29:47