Fédération Exchange et contacts croisés

Nous avons plusieurs fois expérimenté la problématique de croiser les informations de contacts entre plusieurs organisations Exchange.

Si l’on n’utilise pas Microsoft Identity Manager (ILM, FIM,MIM) pour avoir une fédération riche, alors la fédération n’apporte pas la capacité d’avoir dans chacune des GAL les utilisateurs fédérés.

Pour cela, nous avons souvent recours à un script qui extrait les utilisateurs et les listes de distribution d’une organisation pour les injecter dans l’autre.

Prérequis :

  • Relation d’approbation entre les domaines AD
  • Organisation Exchange 2007 à minima pour avoir le PowerShell Exchange

 

Script :

<###################################################################################################
# Date:       Dec 2015
#  Auteur:     Genseric AUGAGAGNEUR
#  Compagnie:  Projetlys
#
#  Client: xxxx
#  Projet: Fédération Exchange
#  Version du script:1.0
#
#  Commentaire: Script de mise à jour des contacts croisés
###################################################################################################>
Import-Module ActiveDirectory
# Domaine AD local: ip ou nom dc ou nom domaine
$DomLoc = “dom1.local”
# OU d’import des contact de fédération
$OU= “dom1.local/fede_Contacts”
# Domaine AD Distant: ip ou nom dc ou nom domaine
$DomDist = “192.168.x.x”
# Domaine de messagerie utilisé pour la fédération Exchange
$DomMsgtech = “dom.com”
# Variable pour identification des contacts fédé dans l’AD
If ($DomMsgtech -eq “dom.com”) { $Ind = “FEDEAUV”}
Else { $Ind = “FEDERHA”}
# Dossier de travail script
$TARGETDIR = “c:\federation”
$strDomainslocal = “@” + $DomMsgtech
if(!(Test-Path -Path $TARGETDIR )){
New-Item -ItemType directory -Path $TARGETDIR
}
# Initialisation des fichiers csv
$firstline = “””Name””,””givenName””,””SamAccountName””,””mail””,””sn””,””telephoneNumber”””
$firstline > $TARGETDIR\CctFede.csv
# récupération des Contacts distants
Get-ADUser -server $DomDist -Filter {ObjectClass -eq “user”} -Properties Name,givenName,SamAccountName,sn,mail,proxyaddresses,telephoneNumber | where {$_.mail -ne $null} |
select Name,givenName,SamAccountName,mail,sn,proxyaddresses,telephoneNumber| ForEach-Object {
If (($_.name -ne $null) -and ($_.name -notlike “SystemMailbox*”)){
$strUserPrimarySMTPAddress = $_.Mail
$strUserIdentity = $_.SamAccountName
$strUserAllProxyAddresses = $_.proxyaddresses
Foreach ($Domain in $strDomainslocal){
Foreach ($Proxy in $strUserAllProxyAddresses){
If (($Proxy -like “*$Domain”)
-and ($Proxy -like “SMTP*”)){
     $Proxy.Replace(“SMTP:”,””).Replace(“smtp:”,””)
     $Extmail=$Proxy.Replace(“SMTP:”,””).Replace(“smtp:”,””)
                 }
     }
}
$contact= “”””+$_.name+ “””,””” + $_.givenName +”””,””” + $_.SamAccountName
+”””,””” + $Extmail +”””,””” + $_.sn +”””,””” + $_.telephoneNumber +””””
write-host “———Traitement du contact ———–” -ForegroundColor blue
write-host $contact
Add-Content $TARGETDIR\CctFede.csv $contact  -encoding unicode
}
     }
# Import des contacts dans Exchange local                        “givenName”,”sn”,”telephoneNumber”
Write-host “Création des Contacts” -ForegroundColor green
Import-Csv $TARGETDIR\CctFede.csv | ForEach-Object {
$ident = $_.SamAccountName + $Ind
New-MailContact -Name $ident -LastName $_.”sn” -ExternalEmailAddress
$_.”mail” -FirstName $_.”givenName” -DisplayName $_.name -OrganizationalUnit $OU
Set-Contact -identity $ident -homephone $_.telephoneNumber
}
# Export des  Listes de distribution distante
Write-host “Récupération des Listes de distributions” -ForegroundColor green
Get-ADGroup  -Server $DomDist -Filter {GroupCategory -eq “Distribution”} -Properties name,mail,GroupCategory | select name,mail,GroupCategory | Export-Csv $TARGETDIR
\DLFede.csv -NoTypeInformation -encoding unicode
# Import des  Listes de distribution dans AD local
Write-host “Création des Listes de distributions” -ForegroundColor green
If ($DomMsgtech -eq “cr-auvergne.fr”) { $Ind = “DO2″
$reg = ” Dom2″
}
Else { $Ind = “DO1″
$reg = ” Dom1″
}
Import-Csv $TARGETDIR\DLFede.csv | ForEach-Object {
$Fname = $_.”Name”.Replace(” “,””) + $Ind
$Disp = $_.”Name” + $reg
New-MailContact -Name $Fname -LastName $_.”Name” -ExternalEmailAddress
$_.”mail” -FirstName $_.”Name” -OrganizationalUnit  $OU
Set-Contact -identity $Fname -Notes “Liste de Distribution” –
DisplayName $Disp
}

Ce script récupère les comptes utilisateurs ayant une boîte e-mail, exporte les informations nécessaires à la création d’un contact dans la GAL distante puis injecte ces contacts dans une OU précise de l’AD.

 

Leave a Reply