Фильтр и методы DirectoryServices - PullRequest
3 голосов
/ 29 сентября 2011

Я пытаюсь получить список всех пользователей в OU / DC из AD.

Вот что я придумал:

$erroractionpreference = "SilentlyContinue"
function Get-GroupMembers {
    $filter = "(&(objectCategory=person)(objectClass=user))"
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher
    $objSearcher.Filter = $filter
    $colResults = $objSearcher.FindAll()

        foreach ($member in $colResults) { 
            $member
        }
}
get-GroupMembers 

Если я поменяю фильтр на

    $filter = "(&(objectCategory=person)(objectClass=user)("OU=Admin Accounts,DC=admin"))

Ничего не возвращается. Почему это?
Я также хотел бы отобразить определенные значения (если учетные записи активны или отключены и т. Д.), Но если я перенаправлю $member на gm, я ничего не получу.

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

4 голосов
/ 29 сентября 2011

Если вы хотите выполнить поиск определенного OU, вы можете установить его в качестве корня вашего поискового объекта:

$objOU = New-Object System.DirectoryServices.DirectoryEntry("LDAP://OU=Admin Accounts,DC=admin")
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objOU

Вы также можете контролировать область поиска.Вот два наиболее подходящих варианта для вас:

# Option 1: Return only users in the 'Admin Accounts' OU
$objSearcher.SearchScope = "OneLevel"

# Option 2: Return users in the 'Admin Accounts' OU or any level beneath it
$objSearcher.SearchScope = "SubTree"

Если вы не переопределите корень и область поиска, по умолчанию вы будете выполнять поиск по поддереву в корне текущего домена.Вы можете найти более подробную информацию в этой статье TechNet:

Редактировать: As uSlackrотметил, ваш компонент DC выглядит подозрительно.Я оставил его нетронутым для моего примера, но неполное / неправильно сформированное имя базового объекта будет мешать вашему поиску независимо от используемого вами метода.

4 голосов
/ 29 сентября 2011

Компонент DC не завершен.Это должно выглядеть примерно так:

 $filter = "(&(objectCategory=person)(objectClass=user)("OU=Admin Accounts,DC=myco,dc=com"))

, но dc = admin, dc = com должно переводиться из доменного имени AD в этом примере "admin.com", что выглядит неправильно

Это намного проще с командлетами Microsoft AD.

get-aduser -filter * -searchbase "ou=test,dc=mycom,dc=com"

Информация о загрузке и использовании командлетов доступна на TechNet

1 голос
/ 29 сентября 2011

Вы можете попробовать использовать Quest ActiveRolesManagement Shell для ActiveDirectory, которую можно загрузить здесь:

http://www.quest.com/downloads/

Пакет распространяется бесплатно и представляет собой более точные командлеты для управления Active Directory из powershell.

...