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"
}
}
. 解決
がステートメントの場合、条件のコードが正常に実行されたかどうかをテストするだけで、ステートメントがテストするだけでは機能しません。 foreach-object ブロックが一致が見つからない場合、条件をFalseにするロジックには何もありません。これを試してください:
foreach ($group in $temp) {
if ((Get-DistributionGroupMember $group | %{$_.PrimarySmtpAddress}) -match 'contoso\.com') {
[...]
.
(Get-DistributionGroupMember $group | %{$_.PrimarySmtpAddress})
は、すべてのメンバーの primarysmtptpddress プロパティの配列を作成し、次に条件が正規表現と一致するかどうかをテストします( -match 配列に適用されるすべての要素の配列を返します。そのため、少なくとも1つの要素が一致する場合はtrueです。配列が空の場合はfalse)。
match 演算子の文字列が regex の文字列は、リテラル文字列ではありません。そのため、バックスラッシュを追加しました。正規表現では、.
は任意の単一文字と一致しているため、-match 'contoso.com'
はcontososcom
とcontoso?com
のような文字列に一致します。
所属していません StackOverflow