Как передать переменную в -Filter
Я столкнулся с очень странной ситуацией в PS.
В скрипте у меня есть командлет (Get-Mailbox
), который возвращает несколько почтовых ящиков и сохраняет их в$mailboxes
.
Затем я проверяю это следующим образом, чтобы найти подходящую учетную запись AD.
foreach ($user in $mailboxes) {
Get-ADUser -Filter {UserPrincipalName -eq $user.UserPrincipalName}
}
Когда я запускаю это, он говорит, что не может найти свойствоUserPrincipalName
на$user
.
Я отладил сценарий и тщательно его протестировал. В тот момент, когда это ошибки, если я наберу$user.UserPrincipalName
он выводит список UPN и их тип даты является строкой, поэтому свойство там и содержит данные.
Я пришел к выводу, что по какой-то причине-Filter
не вижу$user
переменная - как если бы она была изолирована внутри скобок {}, которые я слышал, может быть в случае с функциями. Однако, если я изменю код так, он будет работать.
foreach ($user in $mailboxes) {
$name = $user.UserPrincipalName
Get-ADUser -Filter {UserPrincipalName -eq $name}
}
Хотя это решает мою проблему, я хотел бы узнать, почему первый пример не работает. Кто-нибудь может объяснить?
Стоит отметить, что get-mailbox сначала подключается к Exchange Online и возвращает тип данных:
Deserialized.Microsoft.Exchange.Data.Directory.Management.Mailbox
но когдаGet-ADUser
ошибки команды говорит, что объект имеет типPSCustomobject
, Я думаю, что это может быть частью проблемы.