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
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
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.
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.