質問

グループ内の特定の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'contososcomcontoso?comのような文字列に一致します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top