Elenco dei gruppi di distribuzione solo se esiste un indirizzo SMTP
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"
}
}
. 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
.