Как я могу получить и сохранить данные в том же формате из Get-ADUser, но с подмножеством атрибутов? - PullRequest
0 голосов
/ 29 июня 2019

Я использовал Get-ADUser для захвата данных в объект $users.Это прекрасно работает для затем использования Foreach-Object и перемещения переменной $user в Get-ADPrincipalGroupMembership $user.Командлет принимает $user и я получаю данные.

Поскольку я работаю с большим количеством пользователей - в 100 000 - я надеялся передать результаты Get-ADUser хотя Select-Object (включая Samaccountname), но как только я это сделаю, Get-ADPrincipalGroupMembership $user больше не работает.Теперь, если я использую -ExpandProperty и Samaccountname, командлет снова работает, но я застрял только с одним свойством.

Так что мой вопрос заключается в том, есть ли способ получить только нужные мне свойствас Get-ADUser при сохранении формата, чтобы данные могли использоваться другими командлетами, такими как Get-ADPrincipalGroupMembership?

Наконец, я знаю, что могу использовать $user.Samaccountname, но пытаюсь проверить, могу ли ясделать то же самое непосредственно с объекта.

Редактировать: Чтобы уточнить, данные, полученные из $ users, используются во многих других командах.Я использовал Get-ADPrincipalGroupMembership в качестве примера.Еще одна вещь, которую стоит отметить, когда я начал использовать опцию выбора, время выполнения моей функции уменьшилось в несколько раз.Сценарий, содержащий мою функцию, занял от нескольких часов до 30 минут.Я полагаю, что многократный запуск Get-ADUser еще раз увеличит время, необходимое моему сценарию.

1 Ответ

1 голос
/ 29 июня 2019

Нет необходимости использовать foreach. Вы можете напрямую передать Get-ADUser в Get-ADPrincipalGroupMembership, и он будет выполнять итерации по принципам AD, например ::1004

Get-ADUser -SearchBase 'OU=Staff,DC=contoso,DC=com' -Filter * | Get-ADPrincipalGroupMembership

или даже:

$users = Get-ADUser -SearchBase 'OU=Staff,DC=contoso,DC=com' -Filter *
$users | Get-ADPrincipalGroupMembership

Причина, по которой вы не можете использовать Select-Object, например:

$users = Get-ADUser -SearchBase 'OU=Staff,DC=contoso,DC=com' -Filter *
$users | Select-Object SamAccountName | Get-ADPrincipalGroupMembership

Это потому, что Select-Object дает вам:

PS> $users | Select-Object SamAccountName

SamAccountName
--------------
jsmith
bross

Массив объектов с одной строкой Property, SamAccountName. К сожалению, Get-ADPrincipalGroupMembership принимает только Microsoft.ActiveDirectory.Management.ADPrincipal как Ввод из конвейера. Следовательно, почему вы не можете передать ему массив строк. Это означает, что единственный способ заставить его работать - это либо напрямую передавать объекты AD Principal, либо, действительно, проходить через них с foreach и напрямую указывать пользователей с параметрами.

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