- Warning
-
- JFolder::files : le chemin n'est pas un répertoire. Chemin : images/Badges
« Je ne pense jamais au futur. Il vient bien assez tôt. »
Certaines de mes connaissances m'ont demandé de réfléchir sur la possibilité de mutualisé un serveur de messagerie. L'objectif étant de n'avoir qu'un seul serveur de messagerie hébergeant des boîtes aux lettres de différentes sociétés. Les boîtes aux lettres de chacune des sociétés devront posséder:
Télécharger le script Powershell "Mutualisation d'Exchange"
De nature à travailler une fois pour toute, j'ai cherché à optimiser le processus de création des boîtes aux lettres.
Je me suis tout naturellement tourné vers Powershell en définissant les différentes étapes nécessaires pour atteindre mon objectif.
La première étape était de définir les attributs des objets à créer dans mon Active Directory. J'ai donc utilisé Excel pour créer la structure du fichier ainsi que la liste de mes utilisateurs à créer. En voici le départ:
displayname;sn;givenname;name;samaccountname;mail;password;domaine;netbiosdomaine
Prenom Nom;Nom;Prenom;Prenom.Nom;Prenom.Nom;Prenom.Nom@test.fr;motdepasse;test.fr;test
Pour rappel, la première ligne défini les différents attributs dont je vais avoir besoin, chaque ligne suivante constitue un futur utilisateur de messagerie
Mon souhait étant de pouvoir importer les données d'un fichier que l'on m'aurait préalablement remis, je voulais être en mesure de pouvoir le sélectionner indépendamment de son nom et de son emplacement. La fonction suivante permet de sélectionner un fichier de type CSV.
function Select-fichier(){
$initialDirectory = $home + "\Desktop"
$seachExt = "fichier csv (*.csv)| *.csv"
[void] [Reflection.Assembly]::LoadWithPartialName( 'System.Windows.Forms' )
$fileDialogBox = New-Object Windows.Forms.OpenFileDialog
$fileDialogBox.ShowHelp = $true
$fileDialogBox.initialDirectory = $initialDirectory
$fileDialogBox.filter = $seachExt
$fileDialogBox.ShowDialog( )
$fileDialogBox.filename
}
# Note : La valeur filename est la deuxième renvoyé par la fonction d'où le $logFileName[1]
$fichiercsv = Select-fichier
$fichiercsv = $fichiercsv[1]
Powershell-ise ne lisant pas par défaut les comdlets d'Exchange, Il faut y faire appel...
Changez le nom du serveur, !
# importation du module Exchange
$s = New-PSSession -ConfigurationName Microsoft.Exchange `
-ConnectionUri http://srv-exc.domaine.local/PowerShell/ `
-Authentication KerberosImport-PSSession $s
Vous allez définir ici les variables à partir du fichier csv que vous aurez préalablement importé.
Changez l'emplacement par defaut des banques et des logs!!!!
# Importation du fichier .CSV
$utilisateurs = Import-Csv -path $fichiercsv -delimiter ";"#définition des variables
$domaine = $utilisateurs.netbiosdomaine
$domaineFQDN = $utilisateurs.domaine
$servexch = "srv-exc.domaine.local"
$pathedborg = "D:\Bases\"
$pathlogorg = "D:\Logs\"
$pathlog = $pathlogorg +"\" +$domaine +"\"
$banque = $pathedborg +"\"+ $domaine +"\"+ $domaine + ".edb"
$chemfich = $HOME + "\Desktop"
$fileusers = $chemfich + "\" + $domaine + ".csv"
$offlinebook = $domaine +"OAB"
$virtualoabfront = $servexch + "\oab (Default Web Site)"
$virtualoabback = $servexch + "\oab (Exchange Back End)"
$bookpolicy = $domaine + "ABP"
$addlist = "\" + $domaine
$gal = $domaine + "GAL"
$roomlist = $domaine + "Rooms"
$AddressTemplates = "SMTP:%s%2g@" + $domaineFQDN
Je ferais appel à toutes ces variables au fur et à mesure du déroulé du script.
Mon domaine s'appelant rumilly.local, il s'agira de le renommer. J'ai également préalablement créé une unité d'organisation nommé "clients" dans laquelle je créerais toutes les unitées d'organisation correespondantes à mes sociétés
Changez le chemin de l'ou!
$ou = "ou=" +$domaine + ",ou=clients,dc=domaine,dc=local"
New-ADOrganizationalUnit -Name $domaine -Path "ou=clients,dc=rumilly,dc=local"# Création de l’utilisateur
cls
foreach($utilisateur in $utilisateurs)
{
$pass = $utilisateur.password
$nom = $utilisateur.sn
$prenom = $utilisateur.givenname
$displayname = $utilisateur.displayname
$name = $utilisateur.name
$login = $utilisateur.samaccountname
$mail = $utilisateur.mail
$password = $utilisateur.passwordNew-ADUser –name $name –givenname $givenname –surname $sn –displayname $displayname –samaccountname $login –emailaddress $mail –enabled 1 -UserPrincipalName $mail –accountpassword (convertto-securestring $password –asplaintext –force) -Path $ou
echo « Utilisateur $displayname créé »
}
Je vais ici créer l'arborescence de mes dossiers dans lesquels vont être générer d'une part la banque de la société et d'autre par les logs
# Création de l'arborescence
New-Item -Path $pathedb\$domaine -ItemType directory
New-Item -Path $pathlog -ItemType directory
Je créerais ensuite ma banque dont le nom correspond à la société
#Création de la banque
New-MailboxDatabase -name $domaine -server $servexch -EdbFilePath $banque -LogFolderPath $pathlog
Invoke-Command -ComputerName $servexch -ScriptBlock {Restart-Service MSExchangeIS}
Mount-Database -Identity $domaine
Création du domaine accepté
New-AcceptedDomain -Name $domaineFQDN -DomainName $domaineFQDN -DomainType Authoritative
New-EmailAddressPolicy -Name $domaineFQDN -IncludedRecipients MailboxUsers -RecipientContainer $ou -EnabledEmailAddressTemplates $AddressTemplates -Priority 1
Update-EmailAddressPolicy -Identity $domaineFQDN
Activation des boîtes aux lettres se trouvant dont les comptes des utilisateurs se trouvent dans l'unité d'oraganisation de la société concernée.
Création également du groupe de distribution dynamique de la société.
#Activation des bals pour l'ou
Get-User -OrganizationalUnit $domaine | Enable-Mailbox -Database $domaine
Get-Group -OrganizationalUnit $domaine | Enable-DistributionGroup $domaineNew-DynamicDistributionGroup -Name $domaine -Alias $domaine -IncludedRecipients MailboxUsers -OrganizationalUnit $ou -RecipientContainer $ou
# Stratégies et Listes d'adresses pour $domaine
# Carnet d'adresses pour $domaine
New-GlobalAddressList -Name $gal -RecipientContainer $domaine
Update-GlobalAddressList -Identity $gal
New-AddressList -name $roomlist -RecipientContainer $domaine -IncludedRecipients resources
New-AddressList -name $domaine -RecipientContainer $domaine -IncludedRecipients mailboxUsers
New-OfflineAddressBook -Name $offlinebook -AddressLists $domaine
Update-AddressList $domaine
Update-AddressList $roomlist
Set-OfflineAddressBook -Identity $offlinebook -VirtualDirectories $virtualoab, $virtualoabback
Update-OfflineAddressBook -id $offlinebook
New-AddressBookPolicy -name $bookpolicy -AddressLists $addlist -OfflineAddressBook $offlinebook -GlobalAddressList $gal -RoomList $roomlist
Get-Mailbox -OrganizationalUnit $domaine | Set-Mailbox -AddressBookPolicy $bookpolicy
Voila c'est fini!
Prenez le temps de vous imprégner des variabgles citées au début de cet articles et adaptez les en fonctions de vos besons, et...lancez votre script!
Ce dernier vous demandera juste de sélectionner votre fichier contenant les utilisateurs.
Télécharger le script Powershell "Mutualisation d'Exchange"