Sprawdzenie członków grupy dynamicznej

Grupa dynamicznej dystrybucji to taka grupa która zawiera członków spełniających określone kryteria. Nie posiada ona na sztywno zdefiniowanych członków tylko skład tej grupy jest rozwiązywany w trakcie potrzeby wykorzystania takiej grupy np. przy wysyłce wiadomości email na taką grupę. Aby utworzyć taką grupę logujemy się na ECP i przechodzimy do menu adresaci -> grupy i wybieramy plusa (dodaj) oraz następnie „Grupa dynamicznej dystrybucji”.

W nowo wyświetlonym oknie określany nazwę tej grupy, adres email jaki będzie posiadała (alias), umiejscowienie obiektu w strukturze AD (docelowe OU), właściciela grupy oraz wybieramy typ adresatów. Kolejnym krokiem jest ustalenie reguły lub reguł na podstawie której będzie określane członkostwo w grupie. Aby to zrobić klikamy na przycisk „dodaj regułę” i w kolejnym oknie określany reguły:

W powyższym przykładzie do grupy dynamicznej zostaną włączeni użytkownicy którzy w polu Firma mają wartość „Nazwa firmy” oraz są w OU domena.local\users.

Z poziomu ExchangeManagementShell właściwości grupy możemy wyświetlić wydając polecenie:

Get-DynamicDistributionGroup nazwagrupy |fl

Za ustawiony filtr odpowiada pole RecipientFilter oraz RecipientContainer. W polu tym znajduje się jednak znacznie inna wartość niż ta którą skonfigurowaliśmy z poziomu powershell-a. W powyższym przypadku wynik będzie wyglądał następująco:

RecipientContainer : domena.local/Users
RecipientFilter : ((((Company -eq 'Nazwa firmy') -and (Alias -ne $null))) -and (-not(Name -like 'SystemMailbox{')) -and (-not(Name -like 'CAS_{')) -and (-not(RecipientTypeDetailsValue -eq 'MailboxPlan')) -and (-not(RecipientTypeDetailsValue -eq 'DiscoveryMailbox')) -and (-not(RecipientTypeDetailsValue -eq 'PublicFolderMailbox')) -and (-not(RecipientTypeDetailsValue -eq 'ArbitrationMailbox')) -and (-not(RecipientTypeDetailsValue -eq 'AuditLogMailbox')) -and (-not(RecipientTypeDetailsValue -eq 'AuxAuditLogMailbox')) -and (-not(RecipientTypeDetailsValue -eq 'SupervisoryReviewPolicyMailbox')))

Exchange automatycznie dodaje dodatkowe filtry.
Z poziomu ECP nie zawsze mamy dostępne wszystkie pola według których chcielibyśmy odfiltrować członków grupy. Nic nie stoi na przeszkodzie aby taki filtr założyć z poziomu powershella:

Set-DynamicDistributionGroup nazwagrupy -RecipientFilter {Company -eq 'Nazwa firmy2'}

Po wydaniu powyższego polecenia filtr z poziomu powershell-a będzie wyglądał nastepująco:

RecipientFilter : ((Company -eq 'Nazwa firmy2') -and (-not(Name -like 'SystemMailbox{')) -and (-not(Name -like 'CAS_{')) -and (-not(RecipientTypeDetailsValue -eq 'MailboxPlan')) -and (-not(RecipientTypeDetailsValue -eq 'DiscoveryMailbox')) -and (-not(RecipientTypeDetailsValue -eq 'PublicFolderMailbox')) -and (-not(RecipientTypeDetailsValue -eq 'ArbitrationMailbox')) -and (-not(RecipientTypeDetails Value -eq 'AuditLogMailbox')) -and (-not(RecipientTypeDetailsValue -eq 'AuxAuditLogMailbox')) -and (-not(RecipientTypeDetailsValue -eq 'SupervisoryReviewPolicyMailbox')))

Jak widać na exchange dodał automatycznie dodatkowe pola do filtru. Jednocześnie po skonfigurowaniu filtra z poziomu powershell-a utraciliśmy możliwość edycji z poziomu ECP

Aby wyświetlić wszystkich członków grupy dynamicznej należy wydać polecenie:

$wszyscypracownicy = Get-DynamicDistributionGroup nazwagrupy
Get-Recipient -RecipientPreviewFilter ($wszyscypracownicy.recipientfilter) -OrganizationalUnit ($wszyscypracownicy.recipientcontainer)

lub bezpośrednio bez użycia zmiennej:

Get-Recipient -RecipientPreviewFilter (get-dynamicdistributiongroup nazwagrupy).RecipientFilter -OrganizationalUnit $group.RecipientContainer

Wynik możemy wyeksportować do pliku:

$wszyscypracownicy = Get-DynamicDistributionGroup nazwagrupy
Get-Recipient -RecipientPreviewFilter ($wszyscypracownicy.recipientfilter) -OrganizationalUnit ($wszyscypracownicy.recipientcontainer)|Sort-Object name| Out-File c:\temp\grupa.txt

lub bez użycia zmiennej

Get-Recipient -RecipientPreviewFilter (get-dynamicdistributiongroup <name of group>).RecipientFilter -OrganizationalUnit $group.RecipientContainer | Select Displayname | Export-Csv "c:\temp\grupa.csv"

Możemy także wyświetlić członków wszystkich grup dynamicznej dystrybucji. Należy zrobić to w sposób taki aby wyświetlić ich w uporządkowany sposób zamiast wszystkie razem. Dobrym sposobem na osiągnięcie tego jest użycie formowanej tabeli dla każdej grupy o nazwie grupy jako nagłówka. Aby to wykonać należy wydać polecenie:

foreach ($group in (Get-DynamicDistributionGroup)) {Get-Recipient -RecipientPreviewFilter $group.RecipientFilter -OrganizationalUnit $group.RecipientContainer | ft @{Expression={$_.displayname};Label=($group).name}}

Wynik można wyeksportować do pliku ale wynik jest sformatowany nie może to być plik CSV

foreach ($group in (Get-DynamicDistributionGroup)) {Get-Recipient -RecipientPreviewFilter $group.RecipientFilter -OrganizationalUnit $group.RecipientContainer | ft @{Expression={$_.displayname};Label=($group).name} | Out-File "c:\temp\skladgrupdynamicznych.txt" -Append}

Innym sposobem jest wyświetlenie członków dynamicznych grup oraz nazwy grupy w odrębnych kolumnach

foreach ($group in (Get-DynamicDistributionGroup)) {Get-Recipient -RecipientPreviewFilter $group.RecipientFilter -OrganizationalUnit $group.RecipientContainer | Select DisplayName,@{n="Group";e={$group.name}}}

Ten wynik możemy już wyeksportować do pliku CSV. W poniższym poleceniu dla każdej grupy zostanie założony odrębny plik.

foreach ($group in (Get-DynamicDistributionGroup)) {Get-Recipient -RecipientPreviewFilter $group.RecipientFilter -OrganizationalUnit $group.RecipientContainer | Select DisplayName | Export-Csv "c:\temp\$group.members.csv" -Encoding UTF8}