O script do PowerShell que deve localizar usuários desativados que não estejam em uma UO específica também gera usuários dessa UO

3

Olá, eu tenho este cmdlet aqui:

Get-ADUser -filter {(distinguishedName -notlike "Disabled Users") -and (enabled -eq $false)} -searchBase "ou=FirstOU,dc=domain,dc=com"

Eu o criei para encontrar usuários com deficiências que não estejam na UO "Usuários com deficiência". (uma UO dentro de uma UO)

Mas, por algum motivo, ele retorna não apenas os usuários com deficiência que não estão em "Usuários com Deficiência", mas também os usuários com deficiência que estão nele.

Por que o (distinguishedName -notlike "Disabled Users") não funciona?

Para tornar minha estrutura clara:

Forest
    FirstOU
       users,groups,etc..
       Disabled Users OU
.
.
.
    
por NirPes 04.06.2014 / 14:53

3 respostas

2

Colchetes e curingas. Experimente

PS C:\Users\BigHomie> Get-ADUser -SearchBase "OU=Users,dc=eng,dc=mit,dc=edu" -SearchScope Subtree -Filter {distinguishedname -notlike "*Disabled*"}

A sintaxe adequada foi encontrada aqui

    
por 04.06.2014 / 15:12
2

O filtro atua no tipo de objeto que você está tentando recuperar, neste caso, um objeto Usuário. Assim, sua consulta está retornando todos os usuários com deficiência, onde o dn não é "Usuários Desabilitados". Está aplicando o filtro aos objetos Usuário, não às UOs.

Sim, claro ... O User dn conterá a string "Usuários Desabilitados", como a BigHomie apontou corretamente. O problema real era a falta de caracteres curinga, já que o usuário dn não seria exatamente "Usuários com Deficiência"

Tente isso:

Get-ADUser -Filter  {(Enabled -eq $false)} | ? { ($_.distinguishedname -notlike '*Disabled Users*') }
    
por 04.06.2014 / 15:02
2

Sua consulta não funciona porque Os atributos do DN não suportam correspondência de caracteres curinga em consultas LDAP (e -like / -notlike é inútil sem curingas).

Você simplesmente terá que recuperar todos os usuários desativados e filtrar as contas indesejadas do resultado:

$Disabled = Get-ADUser -Filter { useraccountcontrol -bor 2 } -SearchBase "ou=FirstOU,dc=domain,dc=com"
$Filtered = $AllDisabledUsers |Where-Object {$_.distinguishedName -notmatch "OU=Disabled Users"}

O { useraccountcontrol -bor 2 } é equivalente a um filtro LDAP "puro" para contas desativadas:
(&(useraccountcontrol:1.2.840.113556.1.4.803:=2))

    
por 08.06.2014 / 13:00