1

グループ内の特定の 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"
  }
}
4

1 に答える 1

3

ifステートメントは、条件内のコードが正常に実行されるかどうかをテストするだけであり、どのグループでも失敗する理由がないため、これは機能しません。Foreach-Objectブロックで一致するものが見つからない場合に条件を false にするロジックはありません。これを試して:

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

(Get-DistributionGroupMember $group | %{$_.PrimarySmtpAddress})すべてのメンバーのPrimarySmtpAddressプロパティの配列を作成し、 if条件が正規表現に一致するかどうかをテストします ( -matchを配列に適用すると、一致するすべての要素の配列が返されるため、少なくとも 1 つの要素が一致する場合は true、一致する場合は false配列は空です)。

ところで、-match演算子の右側の文字列は、リテラル文字列ではなくregexであることに注意してください。そのため、バックスラッシュを追加しました。正規表現では、 は.任意の 1 文字に一致するため、や など-match 'contoso.com'の文字列に一致します。contososcomcontoso?com

于 2014-01-08T17:11:19.623 に答える