Фильтр Powershell LDAP с DirectorySearcher - PullRequest
0 голосов
/ 31 августа 2018

Я использую класс DirectorySearcher, чтобы найти одного пользователя. Критерии должны заключаться в том, что objectCategory является пользователем, и что его пароль не установлен на никогда не истекает .

После некоторых поисков я пришел к следующему:

$searcher = New-Object System.DirectoryServices.DirectorySearcher

$searcher.Filter = "(&(objectCategory=User)(samAccountName=$env:username)(!(userAccountControl:1.2.840.113556.1.4.803:=65536)))"

где userAccountControl:1.2.840.113556.1.4.803:=65536 должно быть для пользователей, чей пароль никогда не истекает.

Наконец я делаю:

$user = $searcher.FindOne().GetDirectoryEntry()

Но там говорится, что я не могу вызвать метод для выражения с нулевым значением. Я думаю, что я правильно использую скобки. Так может ли быть, что я не могу использовать! оператор для этого?

Также обратите внимание, что я мог бы использовать команду get-aduser, например, так:

get-aduser -filter * -properties samAccountName, PasswordNeverExpires | where { $_.passwordNeverExpires -eq "true" } | where {$_.enabled -eq "true"} | where {$_.samAccountName -eq $env:username}

но в этом случае было бы предпочтительнее использовать DirectorySearcher вместо этого, как показано выше.

1 Ответ

0 голосов
/ 31 августа 2018

На самом деле ваш код работает, но когда $searcher.FindOne() ничего не возвращает, то есть когда фильтр ничего не возвращает, метод GetDirectoryEntry() дает:

> You cannot call a method on a null-valued expression. At line:1 char:1
> + $searcher.FindOne().GetDirectoryEntry()
> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>     + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
>     + FullyQualifiedErrorId : InvokeMethodOnNull

Попробуйте:

$user = $searcher.FindOne()
if($user -ne $null) {$user.GetDirectoryEntry()} else {write-host "Niet"}
...