PowerShell/Exchange
Exemples de commandes PowerShell pour le serveur de messagerie Exchange.
Récupération d'informations
Récupération des alias d'adresse de messagerie par boite de messagerie ; à exécuter depuis le serveur de messagerie et la console PowerShell spécifique à Exchange "Exchange Management Shell" :
Get-Mailbox | Select -Expand emailaddresses alias | Export-csv -Path "c:\support\php-boite-20191226-1200.csv" -Delimiter ';'
Il est possible d'utiliser les commandes PowerShell du module Exchange en activant celles-ci dans la console standard de PowerShell, tout en étant sur le serveur de messagerie ! Cette commande est a activer à chaque nouvelle fenêtre de console PowerShell.
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn;
Boite de messagerie, accès total et envoyer en tant que
Commande PowerShell pour l'ajout d'un utilisateur pour les délégation d'"accès total" :
Add-MailboxPermission -Identity compteutilisateur -User comptedelégué -AccessRights FullAccess -InheritanceType All
Commande PowerShell pour l'ajout d'un utilisateur pour les délégation d'"envoi en tant que" :
Add-ADPermission -Identity compteutilisateur -User comptedelégué -ExtendedRights "Send As"
Liste des utilisateurs pour la boite :
Get-ADPermission -Identity compteutilisateur -user comptedelégué
Boite de messagerie et autorisation d'accès total
Pour autoriser l'accès à la boite de l'utilisateur compteutilisateur
par l'utilisateur comptedelégué
:
Add-MailboxPermission -Identity compteutilisateur -User comptedelégué -AccessRights FullAccess -InheritanceType All
Pour supprimer l'accès à la boite de l'utilisateur compteutilisateur
par l'utilisateur comptedelégué
:
Remove-MailboxPermission -Identity compteutilisateur -User comptedelégué -AccessRights FullAccess -InheritanceType All
Masquer l'adresse dans les listes Exchange
Pour masquer un utilisateur de la liste du carnet d'adresse :
Set-Mailbox -HiddenFromAddressListsEnabled $true -Identity compteutilisateur
Pour masquer tous les utilisateurs dont le compte est désactivé :
$BoiteListe = Get-User | Where {$_.UserAccountControl -like '*AccountDisabled*' -and $_.RecipientType -eq 'UserMailbox' } | Get-Mailbox | Where {$_.HiddenFromAddressListsEnabled -eq $false} Foreach ($Boite in $BoiteListe) { Set-Mailbox -HiddenFromAddressListsEnabled $true -Identity $Boite }
Réponse automatique
Ajout d'un message de réponse automatique ; source : https://docs.microsoft.com/en-us/powershell/module/exchange/set-mailboxautoreplyconfiguration?view=exchange-ps
Etat de l'option de réponse automatique :
$CompteAD = "dupondp" Get-MailboxAutoReplyConfiguration -Identity $CompteAD
Désactivation de l'état de l'option de réponse automatique :
$CompteAD = "dupondp" Set-MailboxAutoReplyConfiguration -Identity $CompteAD -AutoReplyState Disabled
Paramétrage de la réponse automatique, fin de mission ; même message pour les correspondants internes ou externes :
$CompteAD = "compteAD" $Message = "<html><body> <p>Bonjour.</p> <p>J'ai terminé ma mission au sein de MaSociété. Désormais, merci de vous adresser à :</p> <ul> <li>Laurent Wagon, tél. +33 6 54 32 10 98, laurent.wagon@masociete.com</li> </ul> <p>Salutations.</p> <p>Christophe Leconquérant</p> </body></html>" Set-MailboxAutoReplyConfiguration -Identity $CompteAD -AutoReplyState Enabled -InternalMessage $Message -ExternalMessage $Message
Paramétrage de la réponse automatique ; même message pour les correspondants internes ou externes :
$CompteAD = "dupondp" $Message = "<html><body> <p>Bonjour.</p> <p>Je suis actuellement absent. Merci de transmettre vos mails aux adresses suivantes :</p> <ul> <li>Pierre Durant : p.durant@masociete.fr</li> <li>Jean Bon : j.bon@masociete.fr</li> </ul> <p>Salutation</p> <p>M. Dupond</p> </body></html>" Set-MailboxAutoReplyConfiguration -Identity $CompteAD -AutoReplyState Enabled -InternalMessage $Message -ExternalMessage $Message
Message différent en interne et en externe :
$CompteAD = "dupondp" $MessageInterne = "<html><body> <p>Bonjour.</p> <p>Je suis actuellement absent pour plusieurs semaines.<br />Merci de créer un ticket GLPI pour toutes les demandes et incidents.</p> <p>Salutations.</p> <p>Dupond P.</p> </body></html>" $MessageExterne = "<html><body> <p>Bonjour.</p> <p>Je suis actuellement absent pour plusieurs semaines.<br />Merci de contacter M. Martin au 02 34 56 78 90.</p> <p>Salutations.</p> <p>Dupond P.</p> </body></html>" Set-MailboxAutoReplyConfiguration -Identity $CompteAD -AutoReplyState Enabled -InternalMessage $MessageInterne Set-MailboxAutoReplyConfiguration -Identity $CompteAD -AutoReplyState Enabled -ExternalMessage $MessageExterne
Export PST
New-MailboxExportRequest -Mailbox lecompte -IncludeFolders "#notes#" -ExcludeDumpster -FilePath "\\phpexchange\c$\Temp\lecompte-20240502-1812.pst"
New-MailboxExportRequest -Mailbox lecompte -IncludeFolders "#Tasks#" -ExcludeDumpster -FilePath "\\phpexchange\c$\Temp\lecompte-20240502-1811.pst"
Création d'une signature pour tous les comptes
Création d'une signature au format HTML pour tous les comptes récupérés de l'AD.
Etape 1
# Import the active directory module which is needed for Get-ADUser Import-Module activedirectory # Set folder location for files, the folder must already exist $save_location = 'c:\file_location\' # $users = Get-ADUser -Filter * -Searchbase "OU=Test,OU=Direction,OU=Test Users,DC=mondomaine,DC=com" -Properties * -Credential mondomaine\admin -Server mondomaine.com $users = Get-ADUser -Filter * -Searchbase "OU=Test,OU=Direction,OU=Test Users,DC=mondomaine,DC=com" -Properties * foreach ($user in $users) { $full_name = "$($user.GivenName) $($User.Surname)" $account_name = "$($User.sAMAccountName)" $job_title = "$($User.title)" $location = "$($User.office)" $dept = "$($User.department)" $comp = "$($User.company)" $email = "$($User.emailaddress)" $phone = "$($User.telephoneNumber)" $logo = "$($User.wWWHomePage)" # We need to construct and write the html signature file $output_file = $save_location + $account_name + ".htm" Write-Host "Now attempting to create signature html file for " $full_name "<span style=`"font-family: calibri,sans-serif;`"><strong>" + $full_name + "</strong><br />", $job_title + " - " + $location + "<br />", $dept + "<br />", $comp + "<br />", $phone + "<br />", "</span><br />", "<img alt=`"corporate logo`" border=`"0`" height=`"90`" src=`"" + $logo + "`" width=`"385`" />" | Out-File $output_file }
Etape 2
# Set folder location for files, the folder must allready exist $save_location = 'file_location' $email_domain = '@mondomaine.com' # connect to O365 tenant $Cred = Get-Credential $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $Cred -Authentication Basic –AllowRedirection Import-PSSession $Session # Get a list of all the filenames in the target folder $sig_files = Get-ChildItem -Path $save_location # Now push the html to the users signature foreach ($item in $sig_files) { $user_name = $($item.Basename) + $email_domain $filename = $save_location + $($item.Basename) + ".htm" Write-Host "Now attempting to set signature for " $user_name set-mailboxmessageconfiguration -identity $user_name -signaturehtml (get-content $filename) -autoaddsignature $true } # disconnect O365 connection Get-PSSession | Remove-PSSession
Etape 3
set-mailboxmessageconfiguration -identity $user_name -signaturehtml (get-content $filename) -autoaddsignature $true
Liste de certaines propriétés d'un compte Exchange
Liste de certaintes propriétés d'un compte Exchange :
get-MailboxMessageConfiguration -Identity dupondj
Le résultat est :
RunspaceId : 16e07c9c-a804-12ba-83d1-93f297gb4413 AfterMoveOrDeleteBehavior : OpenNextItem NewItemNotification : All EmptyDeletedItemsOnLogoff : False AutoAddSignature : False AutoAddSignatureOnReply : False SignatureText : SignatureHtml : AutoAddSignatureOnMobile : True SignatureTextOnMobile : UseDefaultSignatureOnMobile : True DefaultFontName : Calibri DefaultFontSize : 3 DefaultFontColor : #000000 DefaultFontFlags : Normal AlwaysShowBcc : False AlwaysShowFrom : False DefaultFormat : Html ReadReceiptResponse : DoNotAutomaticallySend PreviewMarkAsReadBehavior : OnSelectionChange PreviewMarkAsReadDelaytime : 5 ConversationSortOrder : ChronologicalNewestOnTop ShowConversationAsTree : False HideDeletedItems : False SendAddressDefault : EmailComposeMode : Inline CheckForForgottenAttachments : True AreFlaggedItemsPinned : False IsReplyAllTheDefaultResponse : True KeyboardShortcutsMode : Owa LinkPreviewEnabled : True ShowPreviewTextInListView : True ShowUpNext : True GlobalReadingPanePosition : Right IsFavoritesFolderTreeCollapsed : False IsMailRootFolderTreeCollapsed : False MailFolderPaneExpanded : True IsHashtagTreeCollapsed : False IsGroupsTreeCollapsed : False GroupSuggestionDismissalCount : 0 GroupSuggestionDismissalDate : ShowSenderOnTopInListView : True ShowReadingPaneOnFirstLoad : False NavigationPaneViewOption : Default AllOwaConfiguration : PreferAccessibleContent : False MailboxOwnerId : php.local/CAP/Dupond Jean Identity : php.local/CAP/Dupond Jean IsValid : True ObjectState : Unchanged
Quelques commandes utiles
Liste propriétés d'une boite de messagerie :
Get-Mailbox -Identity "dupondj" | fl
Liste des boites qui ne sont pas affichées dans l'annuaire, avec tri sur la colonne "Alias" :
Get-Mailbox -ResultSize Unlimited -Filter {HiddenFromAddressListsEnabled -eq $True} | Sort-Object alias
Masquer une boite dans l'annuaire général d'Exchange :
Set-Mailbox -Identity "dupondj" -HiddenFromAddressListsEnabled $True