Exchange Online.

 Подключение:

$Cred = get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange "https://outlook.office365.com/powershell-liveid/" -Credential $Cred -Authentication "Basic" -AllowRedirection
Import-PSSession $Session

 Назначение полных прав пользователю на другой почтовый ящик без автоподключения в Outlook (при ручном подключении в Outlook исходящая почта будет в папке "отправленые" другого почтового ящика):

Add-MailboxPermission -Identity user1 -User user2 -AccessRights FullAccess -InheritanceType All -AutoMapping $false 

 Поиск писем:
 в определённом почтовом ящике с определённой темой и датой:

Get-Mailbox user@domain | Search-Mailbox -SearchQuery ' (subject:subject) AND (Sent:"16/05/2016")' -TargetMailbox searchbox -TargetFolder searchfolder

 по всем почтовым ящикам (включая общие почтовые ящики) по вложениям

foreach ($Mailbox in Get-Mailbox -ResultSize Unlimited) {Search-Mailbox -Identity $Mailbox.DistinguishedName -SearchQuery "attachment:attachment*" -TargetMailbox searchbox -TargetFolder searchfolder}

 удаление в определённом почтовом ящике по определённому отправителю и только в удалённых элементах

Get-Mailbox user@domain | Search-Mailbox -SearchQuery "from:user@domain" -DeleteContent -Force -SearchDumpsterOnly

 Поиск пользовательских правил:

foreach ($Mailbox in Get-Mailbox -ResultSize Unlimited) {Get-InboxRule -Mailbox $Mailbox.PrimarySmtpAddress | fl -Property MailboxOwnerId,Name,Enabled,Description}

 Вывод списка групп и их членов:

foreach ($group in Get-DistributionGroup) { get-distributiongroupmember $group.DisplayName | ft @{expression={$_.displayname};Label="$group"}}

 Поиск входящих\исходящих писем по дате и теме:

Get-MessageTrace -SenderAddress \ RecipientAddress user@domain.ru -StartDate "MM/DD/YYYY 00:00:00" -EndDate "MM/DD/YYYY 00:00:00" | Where {$_.Subject -like "Your*"}

 Статистика по топ-отправителям и по темам (за день):

Get-MessageTrace -RecipientAddress user@domain.com -StartDate "01/14/2020 00:00:00" -EndDate "01/20/2020 23:59:59" | Group-Object {$s = $_.Subject -replace "\d","X"; if($s.Length -gt 33) {$s.Substring(0,32)} else {$s}} | Select Count,@{n="SenderAddress";e={$_.Group[0].SenderAddress}},@{n="Subject";e={$_.Name}}

 Вывод персональной информации пользователей:

get-mailbox | Get-Recipient | ft -Property DisplayName,PrimarySmtpAddress,Office,Company,Department,Title,Phone

 Пользователи определённого домена:

Get-Recipient -ResultSize Unlimited | where {$_.PrimarySmtpAddress -Like "*exonix.ru"} | ft PrimarySmtpAddress -AutoSize

 Вывод всех пользователей и их почтовые адреса, включая алиасы; снятие лимита на длинну выводимой информации:

$FormatEnumerationLimit=-1
Get-Recipient -Filter *| ft -Property displayname,emailaddresses

 Статистика по перенаправлении почты (правила, пользовательские настройки), по правам на почтовые ящики:

get-Mailbox -Identity user@domain.com | fl -Property DisplayName,PrimarySmtpAddress, ForwardingAddress
Get-TransportRule | fl -Property Name, Description
Get-DistributionGroupMember -Identity team@domain.com | Get-Mailbox | Get-MailboxPermission -ResultSize Unlimited

 Права на отправку от имени Псевдонима:

add-RecipientPermission alias@domain.com -AccessRights SendAs -Trustee "user@domain.com"

 Размер папок в почтовом ящике:

Get-MailboxFolderStatistics -Identity user@domain.com -FolderScope all | ft -Property Name,FolderSize

 Вывод прав на все папки почтового ящика:

ForEach($f in (Get-MailboxFolderStatistics user1 | Where { $_.FolderPath.Contains("/") -eq $True } ) )
{
$fname = "user1:" + $f.FolderPath.Replace("/","\"); get-MailboxFolderPermission $fname
Write-Host $fname
Start-Sleep -Milliseconds 1000
}

 Назначение прав на Calendar. В зависимости от языка, папка может быть "Календарь", "Kalender" и т.д.:

Add-MailboxFolderPermission -Identity test.room@exonix.ru:\calendar -user aleks@exonix.ru -AccessRights Editor 

 Назначение и удаление прав на список пользователей:

$users = 'user1','user2','user3'
ForEach ($user in $users) {Add-MailboxFolderPermission -Identity room1@exonix.ru:\calendar -User "$user" -AccessRights Reviewer}
ForEach ($user in $users) {remove-MailboxFolderPermission -Identity room1@exonix.ru:\calendar -User "$user" -Confirm:$false}

 Удаление прав со всех папок почтового ящика:

ForEach($f in (Get-MailboxFolderStatistics user1 | Where { $_.FolderPath.Contains("/") -eq $True } ) )
{
$fname = "user1:" + $f.FolderPath.Replace("/","\"); remove-MailboxFolderPermission $fname -User user2 -confirm:$false
Write-Host $fname
Start-Sleep -Milliseconds 1000
}

 Назначение прав на все папки почтового ящика:

ForEach($f in (Get-MailboxFolderStatistics user1 | Where { $_.FolderPath.Contains("/") -eq $True } ) )
{
$fname = "user1:" + $f.FolderPath.Replace("/","\"); Add-MailboxFolderPermission $fname -User user2 -AccessRights Reviewer
Write-Host $fname
Start-Sleep -Milliseconds 1000
}

 Office 365.

 Подключение:

 Connect-MsolService

 Члены ролей Office 365:

$Line = "-------------------------------"
$MembersText = "Members:"
foreach ($MsolRole in Get-MsolRole) {
$Members = Get-MsolRoleMember -RoleObjectId $MsolRole.ObjectId
$Line
$MsolRole.Name
$MembersText
$Members.DisplayName
}

 Удаление пользователя из корзины:

Get-MsolUser -ReturnDeletedUsers
Remove-MSOLUser -UserPrincipalName user@domain.com -RemoveFromRecycleBin

 Замена UPN, иногда нужна для "жёсткой" синхронизации пользователя в облаке:

 Set-MsolUserPrincipalName -UserPrincipalName user@exonix.ru.onmicrosoft.com -NewUserPrincipalName user@exonix.ru -ImmutableId c49696b2-4461-4cbe-aa47-7b90d24b424d

 Exchange 20XX.

 Добавление  полных прав группе "Администраторы домена" на базу ADMINS (не даёт прав на OWA):

Get-MailboxDatabase -identity "ADMINS" | Add-ADPermission -User "domain\Domain admins" -AccessRights GenericAll

 Поиск входящих\исходящих писем по дате и теме (в EMC только входящие):

Get-MessageTrackinglog  -recipient \ -sender "user@domain.ru" -StartDate "MM/DD/YYYY 00:00:00" -EndDate "MM/DD/YYYY 00:00:00" | Where {$_.Subject -like "Your*"}

 Создание политики, отключающей для учётной записи лимит на одновременное подключение других почтовых ящиков (по умолчанию 5). Необходимо для резервного копирования.

New-ThrottlingPolicy PolicyNAME -RCAMaxConcurrency $null -RCAPercentTimeInAD $null -RCAPercentTimeInCAS $null -RCAPercentTimeInMailboxRPC $null -EWSMaxConcurrency $null -EWSPercentTimeInAD $null -EWSPercentTimeInCAS $null -EWSPercentTimeInMailboxRPC $null -EWSMaxSubscriptions $null -EWSFastSearchTimeoutInSeconds $null -EWSFindCountLimit $null
Set-Mailbox "userNAME" -ThrottlingPolicy PolicyNAME

 Как то во время работы Echange 2013 были проблемы с MSExchangeMailSubmission. Почта просто останавливалась. Временно решалось перезагрузкой служб Transport и MailSubmission. Решил измением параметров:

set-ReceiveConnector -Identity INTERNET -MaxInboundConnection Unlimited 
set-ReceiveConnector -Identity INTERNET -MaxInboundConnectionPerSource Unlimited
set-ReceiveConnector -Identity INTERNET -MaxInboundConnectionPercentagePerSource Unlimited

 Отправка тестового сообщения:

Test-Mailflow -TargetEmailAddress your.name@yourdomain.tld

"is not installed on this machine", "is not recognized as the name of a cmdlet":

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn

 Назначение лимита на объём почтового ящика (на весь сервер и на отдельный почтовый ящик):

Set-TransportConfig –MaxSendSize 50MB –MaxReceiveSize 50MB
Set-MailboxDatabase "Mailbox Database01" -ProhibitSendQuota 50GB -ProhibitSendReceiveQuota 50GB -IssueWarningQuota 49GB -DeletedItemRetention 24855

 Разрешение "аминистратору" на импорт и экспорт почтового язика. Экпорт в PST файл:

New-ManagementRoleAssignment -Role "Mailbox Import Export" -User administrator
New-MailboxImportRequest -Mailbox User2 -FilePath \\SRV1\PST\user1.pst -AcceptLargeDataLoss -BadItemLimit unlimited -LargeItemLimit unlimited
New-ManagementRoleAssignment -Name “Import Export PST” -SecurityGroup “Organization Management” -Role “Mailbox Import Export”
New-MailboxImportRequest -Mailbox test -FilePath \\cas-1.corp.exonix.ru\PST\test.pst
Search-Mailbox -Identity "test" -SearchQuery "Subject:Info" -TargetMailbox "aleks" -TargetFolder "Searching" -LogLevel Full

 Офлайн адресная книга:

New-AddressList -name TEST -RecipientContainer 'exonix.ru/TEST' -IncludedRecipients 'AllRecipients'
Update-AddressList -Identity TEST
new-globalAddressList -Name 'TEST_GAL' -RecipientContainer 'exonix.ru/TEST' -IncludedRecipients 'AllRecipients'
Update-GlobalAddressList -Identity TEST_GAL
New-AddressBookPolicy -Name "TEST_ABP" -AddressLists "TEST" -GlobalAddressList "TEST_GAL" -OfflineAddressBook "Default Offline Address Book" -RoomList "All Rooms"
Set-Mailbox -Identity Test_User1 -AddressBookPolicy TEST_ABP
Get-Mailbox user1 | Search-Mailbox -SearchQuery "subject:subject" -DeleteContent -Confirm