我正在尝试列出组中包含特定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"
}
}
这是行不通的,因为 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 运算符右侧的字符串是正则表达式,而不是文字字符串。这就是我添加反斜杠的原因。在正则表达式中,.
匹配任何单个字符,因此-match 'contoso.com'
匹配 contososcom
和 contoso?com
等字符串。