Listagem de grupos de distribuição somente se o endereço smtp existe
Pergunta
Eu estou tentando lista de todos os grupos que contêm um determinado endereço SMTP do grupo.Abaixo está o código que eu estou usando, mas a sua saída de tudo e não apenas os grupos com o endereço SMTP especificado:
$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"
}
}
Solução
Que não funciona, porque o seu se instrução apenas testa se o código na condição de executado com êxito, e não há razão para que não para qualquer grupo.Não há nada na lógica que faz com que a condição false se o Foreach-Object bloco não encontrar correspondências.Tente isso:
foreach ($group in $temp) {
if ((Get-DistributionGroupMember $group | %{$_.PrimarySmtpAddress}) -match 'contoso\.com') {
[...]
(Get-DistributionGroupMember $group | %{$_.PrimarySmtpAddress})
cria uma matriz de PrimarySmtpAddress propriedades de todos os membros, então o se condição de testes para verificar se ele corresponde a regex (-correspondência aplicado a uma matriz devolve uma matriz de todos os elementos que correspondem, portanto, é verdadeiro se pelo menos um elemento de jogos, false se a matriz estiver vazia).
Observe, a propósito, que a cadeia à direita da -correspondência o operador é um regex, não uma seqüência de caracteres literal.Que tem por que eu adicionei a barra invertida.Em uma regex, .
corresponde a qualquer caractere único, para -match 'contoso.com'
gostaria de correspondência de cadeias de caracteres como contososcom
e contoso?com
.