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