ПРИМЕЧАНИЕ : в вашем сценарии отсутствует подключение к Exchange Online, что требуется для Get-Recipient
, но я предполагаю, что вы это сделали, но просто забыли добавить к своему вопросу.
Прежде всего, вы фильтруете $MSOLCombinedResults
в этой строке:
$MSOLCombinedResults | Where-Object (...)
Но затем вы перенаправляете в Out-GridView
нефильтрованный массив:
$MSOLCombinedResults | Out-GridView (...)
То, что вы забыли, это сохранитьотфильтровать массив и затем оперировать им. PowerShell не делает этого автоматически, поэтому вы должны использовать что-то вроде:
$filteredResults = $MSOLCombinedResults | Where-Object { $_.emailaddresses -match $search -or $_.emailaddress -match $search -or $_.userprincipalname -eq $search -or $_.proxyaddresses -match $search }
Switch ($filteredResults .Count) {
# do something
}
Другое дело, что $MSOLCombinedResults
содержит несколько типов объектов, поэтому вы должны выбрать нужные свойства перед выводом (для производительностипричин, по которым было бы неплохо выбрать их еще раньше).
Интересующие вас данные выглядят следующим образом:
- From
Get-MsolUser
: UserPrincipalName (string),ProxyAddresses (массив) - С
Get-MsolGroup
: EmailAddress (строка), ProxyAddresses (массив) - С
Get-MsolContact
: EmailAddress (строка), ProxyAddresses (массив, необязательно, как я необычно видеть это значение) - С
Get-Recipient
: EmailAddress es (массив, уведомление во множественном числе), ExternalEmailAddress (строка в формате SMTP:xxx
), PrimarySmtpAddress (строка)
Вы должны соответствующим образом изменить свой фильтр и затем вывести желаемые результаты, используя Select-Object
до Out-GridView
. Взгляните на вычисленные свойства , так как вы можете переименовать / преобразовать некоторые свойства для упрощения фильтрации.