Question

J'essaie de répertorier tous les groupes contenant une adresse SMTP spécifique dans le groupe.Vous trouverez ci-dessous le code que j'utilise, mais il affiche tout et pas seulement les groupes avec l'adresse SMTP spécifiée :

$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"
  }
}
Était-ce utile?

La solution

Cela ne fonctionne pas parce que votre si L'instruction teste simplement si le code de la condition s'exécute avec succès, et il n'y a aucune raison pour qu'il échoue pour un groupe.Il n'y a rien dans la logique qui rende la condition fausse si le Objet Foreach le bloc ne trouve aucune correspondance.Essaye ça:

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

(Get-DistributionGroupMember $group | %{$_.PrimarySmtpAddress}) crée un tableau de AdresseSmtpPrimaire propriétés de tous les membres, alors le si la condition teste si elle correspond à l'expression régulière (-correspondre appliqué à un tableau renvoie un tableau de tous les éléments qui correspondent, donc c'est vrai si au moins un élément correspond, faux si le tableau est vide).

Notez, BTW, que la chaîne à droite du -correspondre l'opérateur est un expression régulière, pas une chaîne littérale.C'est pourquoi j'ai ajouté la barre oblique inverse.Dans une regex, . correspond à n'importe quel caractère, donc -match 'contoso.com' correspondrait à des chaînes comme contososcom et contoso?com.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top