Как я могу вернуть подстановочный знак свойств объекта powershell, отфильтрованный по имени их свойства? - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь использовать Get-ADUser, чтобы найти конкретный расширенный атрибут, имя которого я не знаю. В моей организации у каждого пользователя AD должно быть поле атрибута, которое указывает, обучались ли они по определенной теме, но я не знаю, как именно называется это поле. Поэтому я надеюсь найти атрибуты, которые могут иметь определенные строки в названии, например «titleIX».

Приведенный ниже код не работает, как я собираюсь (очевидно), но я надеюсь, что он иллюстрирует то, что я ищу: Get-ADUser -filter 'name -like "johndoe"' -properties * | Where-Object {$_.propertyname -like "*titleIX*"}

В этом примере мы надеемся, что результат будет выглядеть примерно так: trngTitleIXDone: Yes В этот момент я бы знал, что это поле называется «trngTitleIXDone», и мог бы продолжить свой веселый путь, используя его для реальных отчетов, которые я хочу создать.

Я понимаю, что мне могут понадобиться дополнительные конвейерные команды для достижения требуемой фильтрации, а не просто полный список атрибутов, связанных с объектом, который имеет атрибут с именем, соответствующим запросу.

Спасибо и, пожалуйста, дайте мне знать, если мне нужно лучше объяснить себя. == Мэтт

P.S. Дополнительный контекст по запросу:

В: Вы не можете спросить своего администратора или найти его в ADUC?
A: Организация огромна и имеет множество пользовательских атрибутов, которые не документированы (так, как я могу получить к ним доступ). Получение этой информации или даже поиск нужного человека потребует гораздо больше времени, чем поиск самой. И я хотел бы знать этот навык на случай, если он снова появится, чтобы я мог избежать задержки в следующий раз.

Что касается ADUC, я не знаю точно логику, когда возвращается атрибут или нет, но я понимаю, что атрибуты, которые я ищу, имеют некую классификацию, которая препятствует их возвращению если вы специально не нацелены на них по имени. Простое использование properties * не возвращает того, что я ищу, и атрибуты, перечисленные в ADUC, более или менее совпадают с набором данных.

1 Ответ

0 голосов
/ 13 января 2019

В итоге мы обнаружили, что я задавал неправильный вопрос для своей проблемы из-за таинственных подробностей работы пользовательских атрибутов AD, которые я не до конца понимал. Спасибо комментариям @LotPings, @Theo и @TheMadTechnician за освещение различных возможностей.

На заданный вопрос, вероятно, наиболее точно отвечает комментарий @ Lee_Dailey о скрытом свойстве PSObjects (.PSObject), его дочернем свойстве (.Properties и его дочерних свойствах .Name, Значение и т. Д.). Хотя у меня в настоящее время нет рабочего ответа, я уверен, что есть программный способ использовать их для перебора неизвестных свойств данного объекта.

Что касается моей проблемы, я не могу легко вернуть список свойств для повторения по двум основным причинам:

1) Даже при запросе всех свойств из командлета Get-AD * (например, Get-ADUser -filter 'name -like "johndoe"' -properties *) возвращаются только свойства (то есть атрибуты), которые имеют ненулевое (то есть неустановленное) значение. AD никогда не вернет такие атрибуты для данного объекта, поскольку они не существуют в объекте. Чтобы вернуть список возможных атрибутов, которые доступны в схеме, но не используются в данном объекте, вы должны (очевидно) запросить саму схему.

Запрос схемы для возможных атрибутов:

Select-Object @{n="Attributes";e={$_.maycontain + $_.systemmaycontain}} | 
Select-Object -ExpandProperty Attributes |
Sort-Object

Источники:
https://social.technet.microsoft.com/Forums/windowsserver/en-US/8da2aa4e-5ae6-47d9-ac1b-159e5e3f2612/pull-all-user-attributes-with-powershell?forum=winserverpowershell (спасибо @LotPings)
https://blogs.technet.microsoft.com/poshchap/2017/09/22/one-liner-query-the-ad-schema-for-user-object-attributes/ (спасибо @Theo)

2) По-видимому, даже атрибуты, которые установлены для объекта, но являются пользовательскими (то есть не входят в стандартный или расширенный набор атрибутов), никогда не будут возвращены, если вы не запросите их по имени. Из подробных справочных файлов Get-ADUser:
To specify an individual extended property, use the name of the property. For properties that are not default or extended properties, you must specify the LDAP display name of the attribute.

В моем случае, кажется, что даже (по крайней мере, некоторые) настраиваемые атрибуты org фактически возвращаются путем запроса -properties *, что заставляет меня думать, что в моей среде они каким-то образом специально настроены для участия в расширенный набор, если это возможно. Если это так, возможно, могут существовать некоторые пользовательские атрибуты, которые не были настроены таким образом, что очень затруднит определение того, какие атрибуты, доступные для схемы, могут быть установлены для объекта, но которые необходимо запрашивать по имени. , Чтобы определить это, я мог бы просмотреть возможные атрибуты, запросить их все и сравнить результаты с расширенным набором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...