Liste des groupes de distribution uniquement si l'adresse SMTP existe
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"
}
}
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
.