我正在尝试列出组中包含特定 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}) 创建一个数组 主SMTP地址 所有成员的属性,那么 如果 条件测试它是否匹配正则表达式(-匹配 应用于数组会返回所有匹配元素的数组,因此如果至少有一个元素匹配则为 true,如果数组为空则为 false)。

请注意,顺便说一句,右侧的字符串 -匹配 运算符是一个 正则表达式, ,不是文字字符串。这就是我添加反斜杠的原因。在正则表达式中, . 匹配任何单个字符,所以 -match 'contoso.com' 会匹配像这样的字符串 contososcomcontoso?com.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top