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 nazwagrupyGet-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 UTF
8}