Skip to main content

Skrypt dodający aliasy SMTP użytkownikom w parametrach AD

Skrypt wykonujemy z poziomu PowerShell ISE po zmianie odpowiednich parametrów. Skrypt musi być uruchomiony na serwerze z zainstalowanym funkcją RSAT, z dostępem do domeny w której chcemy go uruchomić

# Importowanie modułu Active Directory  
Import-Module ActiveDirectory  

# Definicja zmiennych dla domen  
$oldDomain = "staradomena.pl"  
$newDomain = "nowadomena.pl"  

# Określenie wyróżnionej nazwy (DN) docelowej jednostki organizacyjnej (OU)  
$ou = "OU=Użytkownicy_Firma,OU=Kontakty,OU=Organizacja,DC=domena,DC=local"  

# Pobranie wszystkich użytkowników (aktywnych i nieaktywnych) w określonym OU wraz z ich UserPrincipalName i ProxyAddresses  
$users = Get-ADUser -Filter * -SearchBase $ou -Properties UserPrincipalName, ProxyAddresses, SamAccountName  

# Iteracja przez każdego użytkownika (zarówno aktywnego, jak i nieaktywnego) i dodanie aliasu  
foreach ($user in $users) {  

    # Upewnienie się, że użytkownik ma ustawiony UserPrincipalName  
    if ($user.UserPrincipalName -match "@$oldDomain$") {  

        # Wyodrębnienie nazwy użytkownika poprzez usunięcie starej domeny z UserPrincipalName  
        $username = $user.UserPrincipalName -replace "@$oldDomain", ""  

        # Utworzenie aliasu w formacie username@newDomain  
        $alias = "smtp:$username@$newDomain"  

        # Pobranie aktualnych ProxyAddresses (aliasów e-mail)  
        $proxyAddresses = $user.ProxyAddresses  

        # Upewnienie się, że ProxyAddresses jest zainicjalizowane  
        if (-not $proxyAddresses) {  
            $proxyAddresses = @()  
        }  

        # Sprawdzenie, czy alias już istnieje  
        if ($proxyAddresses -notcontains $alias) {  
            try {  
                # Dodanie nowego aliasu  
                Set-ADUser -Identity $user -Add @{ProxyAddresses=$alias}  
                Write-Host "Dodano alias $alias dla użytkownika $username"  
            } catch {  
                Write-Host "Błąd podczas dodawania aliasu $alias dla użytkownika $username: $_" -ForegroundColor Red  
            }  
        } else {  
            Write-Host "Alias $alias już istnieje dla użytkownika $username"  
        }  
    } else {  
        Write-Host "Pomijanie użytkownika $($user.SamAccountName), ponieważ nie ma poprawnego UserPrincipalName kończącego się na @$oldDomain" -ForegroundColor Yellow  
    }  
}