Domanda

Sto cercando di elencare tutti i gruppi che contengono un indirizzo SMTP specifico nel gruppo.Di seguito è riportato il codice che sto usando ma standottendendo tutto e non solo i gruppi con l'indirizzo SMTP specificato:

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

È stato utile?

Soluzione

che non funziona perché la tua istruzione se verifica solo se il codice nella condizione viene eseguito correttamente, e non c'è motivo per cui fallisce per nessun gruppo. Non c'è nulla nella logica che rende la condizione falsa se il blocco Foreach-Object non trova corrispondenze. Prova questo:

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

(Get-DistributionGroupMember $group | %{$_.PrimarySmtpAddress}) crea una serie di proprietà PrimarySmtpaddress di tutti i membri, quindi le condizioni Se Test di condizione se corrisponde al Regex ( -Match Applicato a un array restituisce una serie di tutti gli elementi che corrispondono, quindi è vero se almeno un elemento corrisponde, false se l'array è vuoto).

Nota, BTW, che la stringa a destra dell'operatore -Match è a regex , non una stringa letterale. Ecco perché ho aggiunto il backslash. In un regex, . corrisponde a qualsiasi carattere singolo, quindi -match 'contoso.com' corrisponde alle stringhe come contososcom e contoso?com.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top