Frage

Ich versuche, alle Gruppen aufzulisten, die eine bestimmte SMTP-Adresse in der Gruppe enthalten.Unten ist der Code, den ich verwende, aber er gibt alles aus und nicht nur die Gruppen mit der angegebenen SMTP-Adresse:

$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"
  }
}
War es hilfreich?

Lösung

Das funktioniert nicht, weil dein wenn -Anweisung testet nur, ob der Code in der Bedingung erfolgreich ausgeführt wird, und es gibt keinen Grund, warum er für eine Gruppe fehlschlagen würde.Es gibt nichts in der Logik, was die Bedingung falsch macht, wenn die Für jedes Objekt block findet keine Übereinstimmungen.Versuchen Sie dies:

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

(Get-DistributionGroupMember $group | %{$_.PrimarySmtpAddress}) erstellt ein Array der PRIMÄRSMTPADRESSE eigenschaften aller Mitglieder, dann die wenn bedingung testet, ob sie mit dem regulären Ausdruck übereinstimmt (-Spiel angewendet auf ein Array gibt ein Array aller übereinstimmenden Elemente zurück, also ist es wahr, wenn mindestens ein Element übereinstimmt, falsch, wenn das Array leer ist).

Beachten Sie übrigens, dass die Zeichenfolge rechts vom -Spiel betreiber ist ein regex, keine Literalzeichenfolge.Deshalb habe ich den umgekehrten Schrägstrich hinzugefügt.In einem regulären Ausdruck, . passt auf jedes einzelne Zeichen, also -match 'contoso.com' würde Strings wie übereinstimmen contososcom und contoso?com.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top