Назад | Перейти на главную страницу

Сценарий PowerShell, который должен находить отключенных пользователей, которые не входят в определенное подразделение, выводит пользователей из этого подразделения.

Привет, у меня здесь есть этот командлет:

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

Я построил его для поиска пользователей с ограниченными возможностями, которые не входят в OU «Пользователи с ограниченными возможностями». (OU в OU)

Но по какой-то причине он возвращает не только отключенных пользователей, которых нет в «Disabled Users», но и отключенных пользователей, которые в нем тоже.

Почему не (distinguishedName -notlike "Disabled Users") работай?

Чтобы прояснить мою структуру:

Forest
    FirstOU
       users,groups,etc..
       Disabled Users OU
.
.
.

Ваш запрос не работает, потому что Атрибуты DN не поддерживают сопоставление подстановочных знаков в запросах LDAP-like/-notlike бесполезен без подстановочных знаков).

Вам просто нужно будет получить всех отключенных пользователей, а затем отфильтровать нежелательные учетные записи из результата:

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

В { useraccountcontrol -bor 2 } эквивалентен "чистому" фильтру LDAP для отключенных учетных записей:
(&(useraccountcontrol:1.2.840.113556.1.4.803:=2))

Фильтр воздействует на тип объекта, который вы пытаетесь получить, в данном случае объект User. Таким образом, ваш запрос возвращает всех отключенных пользователей, для которых dn не является «Disabled Users». Фильтр применяется к объектам «Пользователь», а не к подразделениям.

Да, конечно ... User dn будет содержать строку «Disabled Users», как правильно указал BigHomie. Настоящая проблема заключалась в отсутствии подстановочных знаков, поскольку пользовательский dn не будет в точности «Пользователи с ограниченными возможностями».

Попробуйте вместо этого:

Get-ADUser -Filter  {(Enabled -eq $false)} | ? { ($_.distinguishedname -notlike '*Disabled Users*') }

Скобки и подстановочные знаки. Пытаться

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

Обнаружен правильный синтаксис Вот