Как передать переменную в -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, Я думаю, что это может быть частью проблемы.

Ответы на вопрос(1)

Ваш ответ на вопрос