Gestion des alias
Ce script PowerShell aide à la gestion des adresses mail ou alias des utilisateurs d'un domaine Active Directory.
| # Chargement des modules nécessaires
Import-Module ActiveDirectory
# Fonction pour vérifier si une adresse email est déjà attribuée (adresse principale ou alias)
function Get-ADObjectByEmail {
param (
[string]$email
)
$emailFilter = "(proxyAddresses -eq 'SMTP:$email')"
$user = Get-ADUser -Filter "EmailAddress -eq '$email' -or $emailFilter" -Properties EmailAddress, proxyAddresses
if ($user -eq $null) {
$group = Get-ADGroup -Filter $emailFilter -Properties proxyAddresses
return $group
}
return $user
}
# Fonction pour rechercher des comptes similaires
function Search-SimilarAccounts {
param (
[string]$name
)
$nameParts = $name -split ' '
$filter = "*$($nameParts[0])*"
if ($nameParts.Length -gt 1) {
$filter += "*$($nameParts[1])*"
}
$accounts = @()
$accounts += Get-ADUser -Filter "SamAccountName -like '$filter' -and Enabled -eq 'True'" -Properties SamAccountName, DisplayName
$accounts += Get-ADGroup -Filter "SamAccountName -like '$filter'" -Properties SamAccountName, DisplayName
return $accounts
}
# Fonction pour ajouter un alias à un utilisateur ou un groupe
function Add-EmailAlias {
param (
[string]$targetUser,
[string]$alias
)
$adObject = Get-ADObject -Filter {SamAccountName -eq $targetUser} -Properties objectClass, proxyAddresses
if ($adObject -eq $null) {
Write-Host "Le compte $targetUser n'existe pas."
Log-Action "Le compte $targetUser n'existe pas."
return
}
if ($adObject.proxyAddresses -contains "smtp:$alias") {
Write-Host "Le compte $targetUser possède déjà l'alias $alias."
Log-Action "Le compte $targetUser possède déjà l'alias $alias."
return
}
if ($adObject.objectClass -eq 'group') {
Write-Host "Le compte $targetUser est un groupe. Ajout de l'alias en cours..."
Set-ADGroup -Identity $targetUser -Add @{proxyAddresses="smtp:$alias"}
Write-Host "Alias ajouté avec succès au groupe $targetUser."
Log-Action "Alias ajouté avec succès au groupe $targetUser."
} elseif ($adObject.objectClass -eq 'user') {
Write-Host "Le compte $targetUser est un utilisateur AD. Ajout de l'alias en cours..."
Set-ADUser -Identity $targetUser -Add @{proxyAddresses="smtp:$alias"}
Write-Host "Alias ajouté avec succès à l'utilisateur $targetUser."
Log-Action "Alias ajouté avec succès à l'utilisateur $targetUser."
} else {
Write-Host "Le compte $targetUser n'est ni un utilisateur AD ni un groupe."
Log-Action "Le compte $targetUser n'est ni un utilisateur AD ni un groupe."
}
}
# Fonction pour journaliser les actions
function Log-Action {
param (
[string]$message
)
$timestamp = Get-Date -Format "yyyyMMddHHmmss"
$logEntry = "$timestamp - $message"
$logFile = "$PSScriptRoot\add_alias_proxyadresses.log"
if (-not (Test-Path $logFile)) {
New-Item -Path $logFile -ItemType File -Force
}
Add-Content -Path $logFile -Value $logEntry
}
# Fonction pour demander une confirmation
function Confirm-Action {
param (
[string]$message
)
$response = Read-Host "$message (O/N)"
return $response -eq 'O'
}
# Fonction pour demander la sélection d'un compte
function Select-Account {
param (
[array]$accounts
)
if ($accounts.Length -eq 0) {
Write-Host "Aucun compte correspondant trouvé."
return $null
}
Write-Host "Comptes trouvés :"
for ($i = 0; $i -lt $accounts.Length; $i++) {
Write-Host "$($i + 1). $($accounts[$i].SamAccountName) - $($accounts[$i].DisplayName)"
}
Write-Host "0. Autre (nouvelle saisie)"
$selection = Read-Host "Veuillez entrer le numéro du compte à sélectionner"
if ($selection -eq '0') {
return $null
} elseif ($selection -match '^\d+$' -and $selection -gt 0 -and $selection -le $accounts.Length) {
return $accounts[$selection - 1]
} else {
Write-Host "Sélection invalide."
exit
}
}
# Fonction pour demander et vérifier une adresse email
function Get-EmailInput {
do {
$email = Read-Host "Veuillez entrer l'adresse email à traiter"
if ($email -match '^[\w\.-]+@[\w\.-]+\.\w+$') {
return $email
} else {
Write-Host "Adresse email invalide. Veuillez réessayer."
}
} while ($true)
}
# Fonction pour demander et vérifier le nom d'utilisateur ou de groupe
function Get-TargetUserInput {
do {
$targetUser = Read-Host "Veuillez entrer le compte auquel ajouter l'alias"
if ($targetUser -match '^[\w\.-]+$') {
return $targetUser
} else {
Write-Host "Nom de compte invalide. Veuillez réessayer."
}
} while ($true)
}
# Fonction pour générer un rapport d'exécution
function Generate-Report {
param (
[string]$logFile
)
$reportFile = "$PSScriptRoot\Add_Alias_ProxyAdresses_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
Copy-Item -Path $logFile -Destination $reportFile -Force
Write-Host "Rapport d'exécution généré : $reportFile"
}
# Demande de l'adresse email à traiter
$email = Get-EmailInput
# Vérification de l'adresse email
$adObject = Get-ADObjectByEmail -email $email
if ($adObject -ne $null) {
Write-Host "Impossible d'ajouter cette adresse en tant qu'alias car elle est déjà attribuée à $($adObject.SamAccountName)."
Log-Action "Adresse $email déjà attribuée à $($adObject.SamAccountName)."
if (Confirm-Action "Voulez-vous supprimer cette attribution ?") {
if (Confirm-Action "Êtes-vous sûr de vouloir supprimer l'adresse $email de $($adObject.SamAccountName) ?") {
try {
if ($adObject.objectClass -eq 'user') {
Set-ADUser -Identity $adObject -Remove @{proxyAddresses="smtp:$email"}
Write-Host "Adresse $email supprimée de l'utilisateur $($adObject.SamAccountName)."
Log-Action "Adresse $email supprimée de l'utilisateur $($adObject.SamAccountName)."
} elseif ($adObject.objectClass -eq 'group') {
Set-ADGroup -Identity $adObject -Remove @{proxyAddresses="smtp:$email"}
Write-Host "Adresse $email supprimée du groupe $($adObject.SamAccountName)."
Log-Action "Adresse $email supprimée du groupe $($adObject.SamAccountName)."
}
} catch {
Write-Host "Une erreur s'est produite lors de la suppression de l'adresse $email."
Log-Action "Erreur lors de la suppression de l'adresse $email de $($adObject.SamAccountName) : $_"
exit
}
# Après suppression, proposer d'ajouter l'alias à un autre compte
do {
$targetUser = Get-TargetUserInput
$similarAccounts = Search-SimilarAccounts -name $targetUser
$selectedAccount = Select-Account -accounts $similarAccounts
} while ($selectedAccount -eq $null)
if (Confirm-Action "Voulez-vous ajouter l'alias $email à l'utilisateur (ou groupe) $($selectedAccount.SamAccountName) ?") {
Add-EmailAlias -targetUser $selectedAccount.SamAccountName -alias $email
} else {
Write-Host "Ajout de l'alias annulé."
Log-Action "Ajout de l'alias $email à $($selectedAccount.SamAccountName) annulé."
}
} else {
Write-Host "Suppression annulée."
Log-Action "Suppression de l'adresse $email annulée."
exit
}
} else {
Write-Host "Aucune modification effectuée."
Log-Action "Aucune modification effectuée pour l'adresse $email."
exit
}
} else {
Write-Host "L'adresse email $email n'est pas attribuée à un compte existant."
Log-Action "L'adresse email $email n'est pas attribuée à un compte existant."
# Demande du compte auquel ajouter l'alias
do {
$targetUser = Get-TargetUserInput
$similarAccounts = Search-SimilarAccounts -name $targetUser
$selectedAccount = Select-Account -accounts $similarAccounts
} while ($selectedAccount -eq $null)
if (Confirm-Action "Voulez-vous ajouter l'alias $email à l'utilisateur (ou groupe) $($selectedAccount.SamAccountName) ?") {
Add-EmailAlias -targetUser $selectedAccount.SamAccountName -alias $email
} else {
Write-Host "Ajout de l'alias annulé."
Log-Action "Ajout de l'alias $email à $($selectedAccount.SamAccountName) annulé."
}
}
# Génération du rapport d'exécution
Generate-Report -logFile "$PSScriptRoot\add_alias_proxyadresses.log"
|