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"
  }
}
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top