【问题标题】:Listing distribution groups only if smtp address exists仅当存在 smtp 地址时才列出通讯组
【发布时间】:2014-01-26 21:33:37
【问题描述】:

我正在尝试列出组中包含特定 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"
  }
}

【问题讨论】:

    标签: powershell active-directory exchange-server exchange-management-shell


    【解决方案1】:

    这不起作用,因为您的 if 语句只是测试条件中的代码是否成功执行,并且没有任何理由会导致任何组失败。如果 Foreach-Object 块没有找到任何匹配项,则逻辑中没有任何内容使条件为假。试试这个:

    foreach ($group in $temp) {
      if ((Get-DistributionGroupMember $group | %{$_.PrimarySmtpAddress}) -match 'contoso\.com') {
        [...]
    

    (Get-DistributionGroupMember $group | %{$_.PrimarySmtpAddress}) 创建一个包含所有成员的 PrimarySmtpAddress 属性的数组,然后 if 条件测试它是否匹配正则表达式(-match 应用于数组会返回一个包含所有匹配元素的数组,因此如果至少有一个元素匹配,则为 true,如果数组为空,则为 false)。

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

    【讨论】:

    • 很好用,感谢您的解释,下次一定会帮助我:-)
    猜你喜欢
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 2023-03-19
    • 1970-01-01
    • 2016-10-19
    相关资源
    最近更新 更多