Что AD синтаксис запроса должен перечислить всех пользователей для конкретной группы?

Различные возможности:

  • Файловая система, смонтированная только для чтения
  • Неизменный набор битов (конкретная система)
  • От пессимизма хаоса: повреждение файловой системы
  • От хороших взглядов MarkR: если это не пусто, Вы не можете удалить его. Использовать ls -A проверять на скрытые файлы...
4
задан 2 June 2009 в 21:26
7 ответов

Третий синтаксис отлично работает в LDP.EXE для одного из моих доменов. Обычно я не помещаю туда (objectCategory = person), но он тоже отлично работает с ним.

Что за ошибка вы получаете, когда пытаетесь использовать это?

2
ответ дан 3 December 2019 в 02:28

Существует несколько вещей рассмотреть для этого типа запроса:

  1. Сколько объектов этот запрос, вероятно, возвратится?
  2. Вы хотите подробно остановиться на группах, которые являются членами групп?
  3. Необходимо ли обработать какие-либо "многочисленные" группы (большие участники 1500 года)?

Необходимо всегда включать" (ObjectCategory=person)", если запрос должен будет искать большую базу данных пользователей. Существует несколько причин, Вы хотите сделать это. ObjectCategory является индексируемым атрибутом, где objectClass не, это значительно увеличит Вашу скорость запроса на больших базах данных AD. Кроме того, использование и objectCategory и атрибуты objectClass будет препятствовать объектам "контакта" быть возвращенным в Вашем запросе.

Если Ваш набор результатов собирается возвратить больше чем 1 000 результатов, необходимо знать о проблемах производительности. В GUI ADUC существует предел объекта 2000 года, который можно изменить через диалог "Опций", увеличение может существенно замедлить запрос. Если Вы соберетесь использовать VBScript и перечислить по результату GetObject, то это также будет ОЧЕНЬ ОЧЕНЬ медленно для больших групп. Для Quest Powershell cmdlets необходимо включать "-sizelimit" параметр для переопределения 1 000 пределов объекта:

get-qadgroupmember somegroup -sizelimit 0

Если Вы используете код (VBScript, JScript, .NET) для создания соединения возражают и добавляют запрос LDAP к нему, необходимо будет установить ".pageSize" свойство на объекте соединения получить разбитый на страницы результат, поскольку значение по умолчанию не должно возвращать разбитый на страницы результат, но ограничить его 1 000 объектов. Я обычно устанавливал .pageSize на 1 000, как это максимум.

Расширение вложенных групп является хитрым битом. Самый простой способ получить вложенную информацию о группе состоит в том, чтобы использовать Quest Powershell cmdlets:

get-qadgroupmember somegroup -indirect -sizelimit 0

Из сценария VBscript/JScript можно использовать "GetObject" и перечислить по членскому набору, протестировать каждого участника на "пользователя или группу" и затем рекурсивно вызвать во вложенные группы. Это медленно, и Вы не должны делать этого, за исключением упражнения в программировании VBScript.

В конечном счете Вы, вероятно, захотите учиться делать это через прямой запрос LDAP. Это выполняется через оператор LDAP_MATCHING_RULE_IN_CHAIN. Этот оператор может быть трудно использовать, и это может быть ОЧЕНЬ ДОРОГО на DC, если у Вас есть глубокая вложенная структура для Ваших групп. Премия для этого метода - то, что для очень больших групп (более чем 1 500 участников по умолчанию) Вы сможете сделать запрос для пользователей, которые являются членом группы (даже косвенно), вместо того, чтобы получить группу и пытаться считать членский атрибут (который должен быть обработан в специальном методе для "многочисленных" групп. т.е. Вы получаете сообщение о Пользовательских объектах, ratehr, чем единый групповой объект, где Вы пытаетесь считать большой массив attrbiute.

(&(objectCategory=person)(objectClass=user)(memberof:1.2.840.113556.1.4.1941:=(cn=Group1,OU=groupsOU,DC=x)))

Если Вы испытываете затруднения из-за "многочисленных" групп, можно также увеличить предел, который AD использует при ограничении доступа к атрибуту .member.

9
ответ дан 3 December 2019 в 02:28
  • 1
    БОЛЬШОЙ ответ, много благодарит. Очень подробный. I' m delicious' луг те две ссылки you' ve добрался там. –  Greg Meehan 2 June 2009 в 23:16

Я думал, что вопрос состоит в том, чтобы найти ВСЕХ пользователей группы и не найти, является ли пользователь частью группы?

если Вы хотите найти всех участников использования группы

dsquery group -name "MyGroup" | dsget group -member

И если Вы хотите найти, что вложенные участники также используют

dsquery group -name "MyGroup" | dsget group -member -expand

Если существует больше чем 1 000 или 1 500 участников, dsquery не мог бы обеспечить, результаты в этом случае используют adfind.exe из joeware.net

ADFIND -f "&(objectcategory=group)(cn=MyGroup)" member 
1
ответ дан 3 December 2019 в 02:28

KAPes, Вы отвечаете на вопрос, которым я интересуюсь, перечислите всех членов группы A. Однако Ваш пример команды не работает, поскольку "участник" должен быть множественным числом, -members. Перечислить всех членов группы Active Directory в приятно отформатированной таблице имени для входа в систему, отображаемого имени и адреса электронной почты (все на одной строке):

dsget group "CN=Group A,OU=DepartmentB,OU=Users and Groups,DC=my,DC=domain,DC=com" -members | dsget user -samid -display -email

Подробнее: http://technet.microsoft.com/en-us/library/cc755876%28WS.10%29.aspx#BKMK_group

0
ответ дан 3 December 2019 в 02:28

Работавший в течение многих дней, чтобы попытаться произвести сценарий, который вытянул бы из файла, содержащего список пользователя DN и атрибуты синтаксического анализа для них. Столкнулся с Вашим сайтом с ответом JFV и имел сердечный приступ. Вот сценарий, который я произвел из ответа JFV. В основном, почему считанный из файла, когда можно вытянуть непосредственно от группы (никакое обнаружение ошибок все же)... Этот сценарий позволяет мне вытягивать текстовый файл в Excel или другое приложение электронной таблицы и deliminate на каналах. Я могу сделать всю сортировку, которую я хочу в той точке. Просто другие мысли могли получить от моей утраты.:-(

Dim objGroup

Dim objUser

on error resume next

'Create a file and write headers
Set fs = CreateObject("Scripting.FileSystemObject")

Set f = fs.CreateTextFile ("lastpassword.txt")

f.WriteLine "firstName|initials|lastName|userPrincipalName|physicalDeliveryOfficeName|sAMAccountName|mail|cn|description|mobile|telephoneNumber|physicalDeliveryOfficeName|department|facsimileTelephoneNumber|pager"

'Search for a group name in AD and parse information to a file in pipe delimination

   Set objGroup = Getobject ("LDAP: //CN=groupname,OU=GROUPS,DC=FQDN,DC=FQDN,DC=FQDN")

   For Each objUser In objGroup.Members

      f.WriteLine objUser.firstName & "|" & _

            objUser.initials & ".|" & _

            objUser.lastName & "|" & _

            objUser.userPrincipalName & "|" & _

            objUser.physicalDeliveryOfficeName & "|" & _

            objUser.sAMAccountName & "|" & _

            objUser.mail & "|" & _

            objUser.cn & "|" & _

            objUser.description & "|" & _

            objuser.mobile & "|" & _

            objuser.telephoneNumber & "|" & _

            objuser.physicalDeliveryOfficeName & "|" & _

            objuser.department & "|" & _

            objuser.facsimileTelephoneNumber & "|" & _

            objuser.userAccountControl & "|" & _

            objUser.PasswordLastChanged

   Next

f.close
1
ответ дан 3 December 2019 в 02:28

Легче всего это сделать в PowerShell. с помощью командлетов Quest AD -

get-QADGroupMember [groupname]

Затем фильтруйте и отсортируйте!

get-QADGroupMember [groupname] | where {$_.[Property] -like [criteria]} | sort-object
0
ответ дан 3 December 2019 в 02:28

Вот что я использовал через VBScript:

Перечисление пользователей

   Dim objGroup
   Dim x 

   Set objGroup = Getobject ("LDAP: //CN=LocalGrp,OU=Staff, DC=net, DC=dom")
   For Each x In objGroup.Members
      WScript.Echo x.Class
      WScript.Echo x.Name
      WScript.Echo x.ADsPath
      WScript.Echo x.distinguishedName + vbCrLf
   Next
0
ответ дан 3 December 2019 в 02:28

Теги

Похожие вопросы