Вывод списка групп рассылки только при наличии адреса 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"
}
}
1 ответ
Это не сработает, потому что ваш оператор if просто проверяет, успешно ли выполняется код в условии, и нет никаких причин, по которым он потерпит неудачу для любой группы. В логике нет ничего, что делает условие ложным, если блок Foreach-Object не находит совпадений. Попробуй это:
foreach ($group in $temp) {
if ((Get-DistributionGroupMember $group | %{$_.PrimarySmtpAddress}) -match 'contoso\.com') {
[...]
(Get-DistributionGroupMember $group | %{$_.PrimarySmtpAddress})
создает массив свойств PrimarySmtpAddress всех членов, а затем условие if проверяет, соответствует ли оно регулярному выражению (-match, примененный к массиву, возвращает массив всех совпадающих элементов, так что это правда, если хотя бы один элемент соответствует, ложь, если массив пуст)
Обратите внимание, что строка справа от оператора -match является регулярным выражением, а не литеральной строкой. Вот почему я добавил обратную косую черту. В регулярном выражении .
соответствует любому отдельному символу, поэтому -match 'contoso.com'
будет соответствовать строки как contososcom
а также contoso?com
,