Список групп рассылки только при наличии smtp-адреса
Вопрос
Я пытаюсь перечислить все группы, которые содержат определенный SMTP-адрес в группе.Ниже приведен код, который я использую, но он выводит все, а не только группы с указанным SMTP-адресом:
$temp = Get-DistributionGroup -ResultSize Unlimited
foreach ($group in $temp)
{
if (Get-DistributionGroupMember $group | select -ExpandProperty PrimarySmtpAddress`
| ForEach-Object {$_.PrimarySmtpAddress -match "contoso.com"}) {
Write-Output "GroupName:$group "
Write-Output "GroupName:$($group.PrimarySmtpAddress) "
Write-Output "GroupMembers:"
Get-DistributionGroupMember $group|ft displayname,primarysmtpaddress
}
else
{
Write-Host "null"
}
}
Решение
Это не сработает, потому что ваш если оператор просто проверяет, успешно ли выполняется код в условии, и нет никаких причин, по которым он мог бы завершиться неудачей для какой-либо группы.В логике нет ничего, что делало бы условие ложным, если Foreach-Объект блок не находит никаких совпадений.Попробуй это:
foreach ($group in $temp) {
if ((Get-DistributionGroupMember $group | %{$_.PrimarySmtpAddress}) -match 'contoso\.com') {
[...]
(Get-DistributionGroupMember $group | %{$_.PrimarySmtpAddress})
создает массив из PrimarySmtpAddress Первичный адрес свойств всех членов, то если условие проверяет, соответствует ли оно регулярному выражению (-совпадение применяется к массиву, возвращает массив всех совпадающих элементов, поэтому значение true, если совпадает хотя бы один элемент, и false, если массив пуст).
Обратите внимание, кстати, что строка справа от -совпадение оператор - это регулярное выражение, а не буквальная строка.Вот почему я добавил обратную косую черту.В регулярном выражении, .
соответствует любому отдельному символу, так что -match 'contoso.com'
соответствовали бы таким строкам, как contososcom
и contoso?com
.