This post is also available in: angielski
W celu utrzymania porządku w grupach dystrybucyjnych, dobrze jest od czasu do czasu usunąć z tych grup użytkowników którzy mają wyłączone konta.
Poniżej prezentujemy skrypt który przeszukuje wszystkie grupy dystrybucyjne, następnie usuwa z nich wszystkich użytkowników którzy są wyłączeni (RecipientTypeDetails – DisabledUser), oraz dodatkowo możemy określić z jakich OU mają to być użytkownicy.
Dodatkowo skrypt tworzy plik wynikowy .csv w którym zapisane są poniższe informacje:
- nazwa grupy dystrybucyjnej
- DisplayName użytkownika
- SamAccountName
- scieżka AD w której znajduje się użytkownik
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 Set-AdServerSettings -ViewEntireForest $True #sciezka oraz plik wynikowy $OutFile = 'D:\Scripts\Logs\' $OutFile_LOG = $OutFile+'DL_removeusers_'+$(get-date).ToString('yyyyMMdd')+'.csv' $totalObj = @() # pobranie wszystkich grup dystrybucyjnych $temp = Get-DistributionGroup -ResultSize Unlimited | ForEach-Object { # pobranie uzytkownikow tylko wylaczonych i znajdujacych sie w okreslonych OU [array]$mem = Get-DistributionGroupMember -id $_ -ResultSize Unlimited | where-object {($_.identity -like "domain/company/Corporate1/Users/*" -or $_.identity -like "domain/company/Corporate2/Users*") -and $_.RecipientTypeDetails -eq "Disableduser"} for ($i = 0; $i -lt $mem.Count; $i++) { $member = $mem[$i].name #usuniecie uzytkownika z grupy Remove-DistributionGroupMember -Identity $_ -Member $mem[$i].DistinguishedName -BypassSecurityGroupManagerCheck -confirm:$false $obj = New-Object System.Object $obj | Add-Member -MemberType NoteProperty -Value $_.Name -Name 'Distribution Group' -Force $obj | Add-Member -MemberType NoteProperty -Value $member -Name 'Members' -Force $obj | Add-Member -MemberType NoteProperty -Value $mem[$i].SamAccountName -Name 'SamAccountName' -Force $obj | Add-Member -MemberType NoteProperty -Value $mem[$i].identity -Name 'OU' -Force -PassThru $totalObj += $obj } } #utworzenie pliku wynikowego $totalObj | Export-Csv -Encoding 'Unicode' $OutFile_LOG
Jeżeli chcemy uzyskać tylko listę użytkowników spełniających warunki, ale ich nie usuwać, wówczas musimy zakomentować linijkę jak poniżej:
# Remove-DistributionGroupMember -Identity $_ -Member $mem[$i].DistinguishedName -BypassSecurityGroupManagerCheck -confirm:$false