Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top