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


English
polski