Внутри вашего l oop вам необходимо указать значение SamAccountName
для параметра -Identity
Get-ADUser
.
Get-ADUser -Identity $user.SamAccountName
Объяснение:
Вы можете выполнить Get-ADUser
, указав значения вручную для параметров или добавив объекты в команду, и предоставьте расширенное назначение параметров для динамического сопоставления значений с параметрами. Некоторые параметры позиционны в том смысле, что вам не нужно указывать имя параметра при запуске команды со значением (ями). Эти функции / концепции существуют в большинстве команд PowerShell.
В случае Get-ADUser Value
, Value
автоматически сопоставляется с параметром -Identity
. -Identity
ожидает одно из следующих значений:
- Отличительное имя
- GUID (objectGUID)
- Идентификатор безопасности (objectSid)
- Имя учетной записи SAM (sAMAccountName)
Get-ADUser
имеет удобную функцию, позволяющую передавать объект типа Microsoft.ActiveDirectory.Management.ADUser
(возвращаемый с сервера каталогов) через pipe или параметру -Identity
, он автоматически выполнит поиск на основе предоставленных значений. Если вы предоставите ему какой-либо другой тип объекта, он не будет автоматически выбирать значения свойств для передачи -Identity
. Трубопровод к Select SamAccountName
возвращает PSCustomObject
, а не ADUser
объект, и тогда вы теряете удобство.
Как только вы имеете дело с объектами, которые не ADUser
, вы должны предоставить -Identity
фактическое значение, которое вы хотите запросить. В вашем случае это оставляет две опции.
Опция 1: Выберите только значения SamAccountName в исходном запросе
С помощью этой опции вы можете использовать -ExpandProperty
или -Expand
параметр Select-Object
для возврата только значений целевого свойства.
$users = Get-ADUser -Filter * -SearchBase "OU=Europe,DC=myDC,DC=com" |
Select-Object -ExpandProperty SamAccountName
$fr_all_grp_assigned_to_different_users = Foreach ($user in $users) {
Get-ADUser $user
}
Опция 2. Использование оператора доступа к элементу (.
) для прямого доступа к Значение SamAccountName
С помощью этой опции вы можете использовать синтаксис object.Property
для получения значения Property
.
# Using the singular object.Property ($user.SamAccountName)
$users = Get-ADUser -Filter * -SearchBase "OU=Europe,DC=myDC,DC=com" |
Select-Object SamAccountName
$fr_all_grp_assigned_to_different_users = Foreach ($user in $users) {
Get-ADUser $user.SamAccountName
}
Начиная с PowerShell v3, вы можете использовать тот же синтаксис в коллекции, чтобы вернуть коллекцию значений (collection.Property
).
# Using collection.Property ($users.SamAccountName)
# $user contains only a SamAccountName value here
$users = Get-ADUser -Filter * -SearchBase "OU=Europe,DC=myDC,DC=com" |
Select-Object -ExpandProperty SamAccountName
$fr_all_grp_assigned_to_different_users = Foreach ($user in $users.SamAccountName) {
Get-ADUser $user
}