Pregunta

Estoy tratando de enumerar todos los grupos que contienen una dirección SMTP específica en el grupo.A continuación se muestra el código que estoy usando, pero su salida de todo y no solo los grupos con la dirección SMTP especificada:

$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"
  }
}

¿Fue útil?

Solución

que no funciona porque su declaración si solo prueba si el código en la condición se ejecuta con éxito, y no hay razón por la que fallaría por ningún grupo. No hay nada en la lógica que hace que la condición sea falsa si el bloque foreach-objeto no encuentra ningún coincidente. Prueba esto:

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

(Get-DistributionGroupMember $group | %{$_.PrimarySmtpAddress}) crea una matriz de las propiedades primitptpaddress de todos los miembros, luego la condición si si coincide con la regex ( -match Aplicado a una matriz devuelve una matriz de todos los elementos que coinciden, por lo que es cierto si al menos un elemento coincide, falso si la matriz está vacía).

NOTA, BTW, que la cadena a la derecha del operador -match es un regex , no una cadena literal. Por eso agregué la barra invertida. En un regalo, . coincide con cualquier carácter individual, por lo que -match 'contoso.com' coincidiría con cadenas como contososcom y contoso?com.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top