service:exchange
Различия
Показаны различия между двумя версиями страницы.
service:exchange [30.01.2023 14:24] – [Невозможно удалить сертификат из Exchange Admin Center] viacheslav | service:exchange [30.07.2024 19:21] (текущий) – внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Microsoft Exchange ====== | ||
+ | ===== Ящики ===== | ||
+ | <code powershell> | ||
+ | # Посмотреть, | ||
+ | Get-MailboxPermission username | ft user, | ||
+ | # Посмотреть доступ для учётки к ящикам | ||
+ | get-mailbox | Get-MailboxPermission -User Username -ResultSize Unlimited | ft Identity, | ||
+ | # Вывести список ящиков, | ||
+ | Get-Mailbox -ResultSize Unlimited | Get-MailboxPermission -User S-1-5-21-606747145-1343024091-1708537768-16143 | ft -wrap | ||
+ | # Удалить учетку с правами FullAccess изо всех ящиков | ||
+ | Get-Mailbox -ResultSize Unlimited | Remove-MailboxPermission -User S-1-5-21-606747145-1343024091-1708537768-16143 -AccessRights FullAccess -Confirm: | ||
+ | # Проверить ящик на ошибки (можно и базу), без исправления (-DetectOnly) | ||
+ | New-MailboxRepairRequest –Mailbox user7@domain28.lab –CorruptionType SearchFolder, | ||
+ | # Проверить статус проверки ящика | ||
+ | Get-MailboxRepairRequest –Mailbox user7@domain28.lab | ||
+ | </ | ||
+ | ==== Фильтр csv-отчёта и выгрузка ящиков ==== | ||
+ | <code powershell> | ||
+ | $t = get-date -Format yyyy-MM | ||
+ | dir " | ||
+ | $f = import-csv $f -Delimiter ";" | ||
+ | $fname = " | ||
+ | |||
+ | # примерный результат работы фильтра | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | echo ' | ||
+ | # Загрузить модуль Exchange | ||
+ | Import-Module " | ||
+ | Connect-ExchangeServer -auto' | ||
+ | |||
+ | $f | Out-File -Append $fname | ||
+ | |||
+ | echo ' | ||
+ | # Вывести список экспортируемых ящиков | ||
+ | Get-MailboxExportRequest | select Mailbox, | ||
+ | |||
+ | # Возобновить экспорт ящиков, | ||
+ | Get-MailboxExportRequest -Status Failed | Resume-MailboxExportRequest | ||
+ | |||
+ | # Очистить очередь на экспорт, | ||
+ | Get-MailboxExportRequest -Status Completed | %{$_| fl | out-file " | ||
+ | Out-File -Append $fname | ||
+ | |||
+ | Invoke-Item $fname | ||
+ | </ | ||
+ | |||
+ | ==== При сбое выгрузки ящика ==== | ||
+ | <code powershell> | ||
+ | # Отчёт по сбойному запросу выгрузки | ||
+ | Get-MailboxExportRequest -Status Failed |Get-MailboxExportRequestStatistics -IncludeReport |fl > c: | ||
+ | # Подкрутить параметры запроса | ||
+ | Get-MailboxExportRequest -Status Failed |Set-MailboxExportRequest -BadItemLimit 9999 -AcceptLargeDataLoss | ||
+ | # Продолжить запрос | ||
+ | Get-MailboxExportRequest -Status Failed |Resume-MailboxExportRequest | ||
+ | </ | ||
+ | https:// | ||
+ | ==== Запрет группы отправителей ==== | ||
+ | <code powershell> | ||
+ | # Сделать группу | ||
+ | New-DistributionGroup -Name senders.banned -OrganizationalUnit " | ||
+ | # Скрыть из адресной книги | ||
+ | Set-DistributionGroup senders.banned -HiddenFromAddressListsEnabled $True | ||
+ | # Внести в список запрещённых отправителей ящика | ||
+ | Set-Mailbox i.petrov -RejectMessagesFromDLMembers (Get-DistributionGroup senders.banned) | ||
+ | </ | ||
+ | Затем нужно добавить отправителей в группу. | ||
+ | |||
+ | В ящиках есть 3 параметра, | ||
+ | * RejectMessagesFrom - только единичные пользователи | ||
+ | * RejectMessagesFromDLMembers - группы | ||
+ | * RejectMessagesFromSendersOrMembers - сюда автоматически копируется всё из предыдущих параметров | ||
+ | <code powershell> | ||
+ | # Получить список всех запрещённых отправителей | ||
+ | (Get-Mailbox i.petrov).RejectMessagesFromSendersOrMembers |select name | ||
+ | </ | ||
+ | |||
+ | ==== Удаление адресов X400 ==== | ||
+ | <code powershell> | ||
+ | # Предварительный отчёт для ящиков | ||
+ | $allmailboxes = get-mailbox -ResultSize Unlimited | ||
+ | |||
+ | $report = @() | ||
+ | foreach ($mbx in $allmailboxes) { | ||
+ | $smtpaddr, | ||
+ | $str = [pscustomobject]@{ | ||
+ | Name = $mbx.name | ||
+ | Alias = $mbx.alias | ||
+ | SMTP = $smtpaddr -join " | ||
+ | X400 = ($x400addr -join " | ||
+ | } | ||
+ | $report += $str | ||
+ | } | ||
+ | |||
+ | $report |sort name |Export-Csv " | ||
+ | |||
+ | # Удалить адреса X400 из ящиков | ||
+ | foreach ($mbx in (get-mailbox -ResultSize Unlimited)) { | ||
+ | $smtpaddr = ($mbx.emailaddresses).where{$_ -notmatch " | ||
+ | set-mailbox $mbx.Identity -emailaddresses $smtpaddr | ||
+ | } | ||
+ | # Удалить адреса X400 из групп рассылки | ||
+ | foreach ($dg in (Get-DistributionGroup -ResultSize Unlimited)) { | ||
+ | $smtpaddr = ($dg.emailaddresses).where{$_ -notmatch " | ||
+ | set-DistributionGroup $dg.Identity -emailaddresses $smtpaddr | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Управление адресами ==== | ||
+ | <code powershell> | ||
+ | # Добавить адрес к ящику | ||
+ | set-mailbox ivanov -EmailAddresses @{add=" | ||
+ | # Удалить пользователя из прав на отправку в группе рассылки (пользователь не существует в AD) | ||
+ | Remove-ADPermission DG-marketing -User " | ||
+ | </ | ||
+ | |||
+ | ==== PST ==== | ||
+ | Подключить в Outlook | ||
+ | <code powershell> | ||
+ | Add-type -assembly " | ||
+ | $outlook = new-object -comobject outlook.application | ||
+ | $namespace = $outlook.GetNameSpace(" | ||
+ | dir " | ||
+ | </ | ||
+ | |||
+ | ===== Права ===== | ||
+ | <code powershell> | ||
+ | # Убрать права юзера на ящик | ||
+ | get-mailboxpermission -identity mailboxowner -user user | remove-mailboxpermission | ||
+ | # Выдать полные права на календарь (-AccessRights Reviewer - чтение) | ||
+ | Add-MailboxFolderPermission -Identity mailboxowner: | ||
+ | |||
+ | # Дать права Full Access группе на ящик | ||
+ | Add-MailboxPermission " | ||
+ | # дать права группе на отправку от имени ящика | ||
+ | get-mailbox " | ||
+ | </ | ||
+ | |||
+ | ===== Календари ===== | ||
+ | <code powershell> | ||
+ | # Посмотреть доступ для учётки Username к каким-либо календарям | ||
+ | ForEach ($mbx in Get-Mailbox -ResultSize Unlimited) {Get-MailboxFolderPermission ($mbx.Name + ": | ||
+ | # Посмотреть, | ||
+ | Get-MailboxFolderPermission Username: | ||
+ | # Выгрузить список пользователей, | ||
+ | # с нестандартным именем " | ||
+ | Get-MailboxFolderPermission " | ||
+ | </ | ||
+ | |||
+ | ===== Письма ===== | ||
+ | <code powershell> | ||
+ | # Удалить из всех ящиков письмо с определённой темой за определённый день, от определённого адреса и где нет вложений .xlsx | ||
+ | Get-Mailbox -ResultSize unlimited |Search-Mailbox -SearchQuery ` | ||
+ | ' | ||
+ | -DeleteContent -Force | ||
+ | # Найти письма в ящике и скопировать результаты в другой ящик | ||
+ | Search-Mailbox username -SearchQuery ' | ||
+ | # Удалить письмо из ящика пользователя | ||
+ | search-mailbox username -SearchQuery ' | ||
+ | |||
+ | # Поиск письма в транспортных журналах (RecipientStatus - причина отлупа) | ||
+ | Get-MessageTrackingLog -Sender " | ||
+ | |||
+ | $mbx = Get-Mailbox -ResultSize unlimited | ||
+ | # Найти, у кого есть письмо с определённой темой | ||
+ | $mbx | Search-Mailbox -SearchQuery ' | ||
+ | |||
+ | RunspaceId | ||
+ | Identity | ||
+ | TargetMailbox | ||
+ | Success | ||
+ | TargetFolder | ||
+ | ResultItemsCount : 1 | ||
+ | ResultItemsSize | ||
+ | |||
+ | RunspaceId | ||
+ | Identity | ||
+ | TargetMailbox | ||
+ | Success | ||
+ | TargetFolder | ||
+ | ResultItemsCount : 1 | ||
+ | ResultItemsSize | ||
+ | </ | ||
+ | A space between two keywords or two // | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | |||
+ | ===== Переадресация ===== | ||
+ | <code powershell> | ||
+ | # Установить переадресацию | ||
+ | Set-Mailbox " | ||
+ | # Переадресация с одновременным хранением в первоначальном ящике | ||
+ | Set-Mailbox " | ||
+ | |||
+ | # Заполнить обоснование в AD (В поле " | ||
+ | Set-ADUser (Get-ADUser -filter "name -eq ' | ||
+ | |||
+ | # Занести в переменную адреса ящика | ||
+ | $addr = (Get-ADUser -filter "name -eq ' | ||
+ | # Добавить эти адреса другому ящику (делать только после удаления исходного) | ||
+ | Set-Mailbox " | ||
+ | |||
+ | # Убрать ВСЕ переадресации с ящика и убрать обоснование в поле " | ||
+ | $user = " | ||
+ | Set-Mailbox $user -DeliverToMailboxAndForward $false -ForwardingSMTPAddress $null -ForwardingAddress $null | ||
+ | Set-ADUser (Get-ADUser -filter "name -eq `' | ||
+ | </ | ||
+ | |||
+ | Есть 2 типа переадресации: | ||
+ | - ForwardingAddress – Задаётся администратором, | ||
+ | - ForwardingSMTPAddress – Пользователь может задать эту переадресацию в Outlook web access (OWA) | ||
+ | <code powershell> | ||
+ | # Убрать все переадресации в ящике | ||
+ | Set-Mailbox paulie -ForwardingAddress $NULL -ForwardingSmtpAddress $NULL | ||
+ | </ | ||
+ | |||
+ | https:// | ||
+ | https:// | ||
+ | https:// | ||
+ | |||
+ | ===== Группы рассылки ===== | ||
+ | Динамическая группа рассылки, | ||
+ | <code powershell> | ||
+ | # Группа с правами на отправку | ||
+ | New-DistributionGroup -Name " | ||
+ | Set-DistributionGroup MailRights-DDG-allstaff-sendto -HiddenFromAddressListsEnabled $true | ||
+ | # Сама группа рассылки | ||
+ | New-DynamicDistributionGroup -Name " | ||
+ | -OrganizationalUnit " | ||
+ | # Оставшиеся параметры | ||
+ | Set-DynamicDistributionGroup -Identity " | ||
+ | </ | ||
+ | |||
+ | Фильтр получателей с исключением, | ||
+ | <code powershell> | ||
+ | Set-DistributionGroup DDG-allstaff -RecipientFilter { | ||
+ | (title -notlike " | ||
+ | (name -eq " | ||
+ | } | ||
+ | </ | ||
+ | ==== Список членов динамической группы рассылки ==== | ||
+ | <code powershell> | ||
+ | $ddg = Get-DynamicDistributionGroup -Identity " | ||
+ | Get-Recipient -RecipientPreviewFilter $ddg.RecipientFilter -OrganizationalUnit $ddg.RecipientContainer | ||
+ | |||
+ | # Тестирование работы фильтра | ||
+ | Get-Recipient -RecipientPreviewFilter {title -ne ' | ||
+ | </ | ||
+ | |||
+ | ==== Добавить пользователя в статическую группу рассылки ==== | ||
+ | <code powershell> | ||
+ | Add-DistributionGroupMember -Identity group -Member ivanovii -BypassSecurityGroupManagerCheck | ||
+ | </ | ||
+ | |||
+ | ==== Включить возможность слать извне на группу рассылки ==== | ||
+ | <code powershell> | ||
+ | Set-DistributionGroup -Identity group -RequireSenderAuthenticationEnabled $false | ||
+ | </ | ||
+ | |||
+ | ===== Настройка сервера ===== | ||
+ | <code powershell> | ||
+ | $server = " | ||
+ | # Информация о лицензии | ||
+ | Get-ExchangeServer $server | fl Name, | ||
+ | # Ввести ключ | ||
+ | Set-ExchangeServer $server -ProductKey 12345-12345-12345-12345-12345 | ||
+ | |||
+ | # Просмотр настройки фильтров на Edge (сама настройка - Set-) | ||
+ | Get-ContentFilterConfig | ||
+ | Get-RecipientFilterConfig | ||
+ | Get-SenderFilterConfig | ||
+ | # Content filter приходится выключать, | ||
+ | Get-ContentFilterConfig -SCLRejectEnabled $false -SCLDeleteEnabled $false -SCLQuarantineEnabled $false | ||
+ | # Либо настраивать какой-нибудь ящик как карантинный, | ||
+ | |||
+ | # Письма от user@sender.ru и user@sender2.ru - ошибка "451 4.3.2 System not accepting network messages - Content Filter Agent" | ||
+ | # На Edge: | ||
+ | Set-ContentFilterConfig –BypassedSenderDomains @{Add=" | ||
+ | |||
+ | # Если нужно убрать адреса из списка | ||
+ | Set-ContentFilterConfig –BypassedSenderDomains @{Remove=" | ||
+ | </ | ||
+ | |||
+ | ===== Коннекторы ===== | ||
+ | <code powershell> | ||
+ | # Посмотреть FQDN и ограничения на размер сообщений | ||
+ | Get-SendConnector |select identity, | ||
+ | Get-ReceiveConnector |select identity, | ||
+ | # Задать ограничение в 30 МБ для сообщений | ||
+ | Get-SendConnector |% {Set-SendConnector $_ -MaxMessageSize 30MB} | ||
+ | Get-ReceiveConnector |% {Set-ReceiveConnector $_ -MaxMessageSize 30MB} | ||
+ | </ | ||
+ | |||
+ | ===== Пересоздание подписки на Edge ===== | ||
+ | Проверка | ||
+ | <code powershell> | ||
+ | Test-EdgeSynchronization |select name, | ||
+ | |||
+ | Name | ||
+ | ---- | ||
+ | srv-edge2 Normal | ||
+ | </ | ||
+ | |||
+ | <code powershell> | ||
+ | # удалить подписку на Edge и на транспорте | ||
+ | get-edgesubscription | remove-edgesubscription | ||
+ | |||
+ | # сформировать файл на Edge | ||
+ | New-EdgeSubscription -FileName c: | ||
+ | |||
+ | # скопировать файл с Edge на Транспорт | ||
+ | |||
+ | # на транспорте создаем подписку | ||
+ | New-EdgeSubscription -FileData ([byte[]]$(Get-Content -Path " | ||
+ | |||
+ | # Установить максимальный размер отправляемых сообщений на 30Mb | ||
+ | Get-SendConnector |% {Set-SendConnector $_ -MaxMessageSize 30MB} | ||
+ | # Задать FQDN как edge.domain.ru | ||
+ | Get-SendConnector |? name -match ' | ||
+ | |||
+ | # Синхронизировать изменения | ||
+ | Start-EdgeSynchronization | ||
+ | # Тест | ||
+ | Test-EdgeSynchronization | ||
+ | </ | ||
+ | | ||
+ | ===== Замена SSL-сертификатов ===== | ||
+ | <code powershell> | ||
+ | # Import-Module " | ||
+ | # Connect-ExchangeServer -auto | ||
+ | |||
+ | $mailServers = (Get-ExchangeServer |? IsMailboxServer).name | ||
+ | $certFile = " | ||
+ | $certPass = Read-Host " | ||
+ | |||
+ | # Импорт | ||
+ | $mailServers |% { | ||
+ | Import-ExchangeCertificate -Server $_ -FileName $certFile -Password (ConvertTo-SecureString -String " | ||
+ | } | ||
+ | |||
+ | # Включить новый сертификат для служб | ||
+ | Get-ExchangeCertificate # выяснить Thumbprint нового и старого сертификата для следующих команд | ||
+ | $thumbprintNew = " | ||
+ | $thumbprintOld = " | ||
+ | |||
+ | $mailServers |% { | ||
+ | Enable-ExchangeCertificate -Thumbprint $thumbprintNew -Services IIS,SMTP -Server $_ -DoNotRequireSsl | ||
+ | } | ||
+ | |||
+ | # Удалить старый | ||
+ | $mailServers |% { | ||
+ | Remove-ExchangeCertificate -Thumbprint $thumbprintOld -Server $_ | ||
+ | } | ||
+ | |||
+ | ### На Edge - скопировать сертификат в c: | ||
+ | $certFile = " | ||
+ | $certPass = Read-Host " | ||
+ | Import-ExchangeCertificate -FileName $certFile -Password (ConvertTo-SecureString -String " | ||
+ | Get-ExchangeCertificate | ||
+ | $thumbprintNew = " | ||
+ | $thumbprintOld = " | ||
+ | Enable-ExchangeCertificate -Thumbprint $thumbprintNew -Services SMTP | ||
+ | Remove-ExchangeCertificate -Thumbprint $thumbprintOld | ||
+ | </ | ||
+ | https:// | ||
+ | https:// | ||
+ | |||
+ | ==== ASSERT: HMACprovider.GetCertificates: | ||
+ | После удаления сертификата, | ||
+ | |||
+ | <color # | ||
+ | |||
+ | Выдаётся ошибка при попытке вывести сертификат из конфигурации аутентификации приложений: | ||
+ | <code powershell> | ||
+ | (Get-AuthConfig).CurrentCertificateThumbprint | Get-ExchangeCertificate | Format-List | ||
+ | # A special Rpc error occurs on server WS-MS1: The certificate with thumbprint D7482B97190A5517B581A6A768AF356C13887918 w | ||
+ | # as not found. | ||
+ | # + CategoryInfo | ||
+ | # + FullyQualifiedErrorId : [Server=WS-MS1, | ||
+ | # 47] [FailureCategory=Cmdlet-InvalidOperationException] CFD7CD37, | ||
+ | # asks.GetExchangeCertificate | ||
+ | # + PSComputerName | ||
+ | </ | ||
+ | |||
+ | При попытке создать новый сертификат говорится, | ||
+ | <code powershell> | ||
+ | New-ExchangeCertificate -KeySize 2048 -PrivateKeyExportable $true ` | ||
+ | -SubjectName " | ||
+ | # Confirm | ||
+ | # Overwrite the existing default SMTP certificate? | ||
+ | |||
+ | # Current certificate: | ||
+ | # Replace it with certificate: | ||
+ | # [Y] Yes [A] Yes to All [N] No [L] No to All [?] Help (default is " | ||
+ | </ | ||
+ | |||
+ | Поэтому удаляем только что созданный сертификат и привязываем тот, который уже есть и публикуем его: | ||
+ | <code powershell> | ||
+ | # Удаление | ||
+ | Remove-ExchangeCertificate 11C2C4B244066744CA8CA65701D4A85D99693677 | ||
+ | |||
+ | # Привязка | ||
+ | Set-AuthConfig -NewCertificateThumbprint F7630C1126AC09F9BB9152CFA5623D06D7089E7C ` | ||
+ | -NewCertificateEffectiveDate (Get-Date) | ||
+ | # Confirm | ||
+ | # The new certificate effective date is not at least " | ||
+ | # servers. Do you wish to continue? | ||
+ | # [Y] Yes [A] Yes to All [N] No [L] No to All [?] Help (default is " | ||
+ | |||
+ | # Публикация | ||
+ | Set-AuthConfig -PublishCertificate | ||
+ | </ | ||
+ | |||
+ | Сертификат уже распространился на все почтовые сервера, | ||
+ | <code powershell> | ||
+ | Restart-WebAppPool MSExchangeOWAAppPool | ||
+ | Restart-WebAppPool MSExchangeECPAppPool | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | |||
+ | ===== Очередь ===== | ||
+ | <code powershell> | ||
+ | # Удалить письма от определённого адресата со всех серверов HubTransport (-withNDR - без отчёта о недоставке) | ||
+ | Get-ExchangeServer |? IsHubTransportServer |Get-Queue |get-message |? fromaddress -eq ' | ||
+ | # С Edge | ||
+ | Get-Queue |get-message |? fromaddress -eq ' | ||
+ | </ | ||
+ | |||
+ | ===== Информация ===== | ||
+ | В Exchange management shell | ||
+ | <code powershell> | ||
+ | # Версия Exchange (https:// | ||
+ | (Get-Command Exsetup.exe).FileVersionInfo | ||
+ | |||
+ | ProductVersion | ||
+ | -------------- | ||
+ | 15.00.1497.033 | ||
+ | </ | ||
+ | |||
+ | ===== Прочее ===== | ||
+ | ==== Чистка логов на серверах ==== | ||
+ | <code powershell> | ||
+ | $hosts = " | ||
+ | |||
+ | Invoke-Command -computername $hosts -command { | ||
+ | $t = get-date | ||
+ | # Чистка логов IIS - оставляем 7 дней | ||
+ | gci ' | ||
+ | # Чистка логов Exchange - оставляем 3 месяца | ||
+ | gci ' | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Срок хранения транспортных журналов ==== | ||
+ | <code powershell> | ||
+ | # Просмотр настроек | ||
+ | Get-TransportService |select *tracking* | ||
+ | # Изменение | ||
+ | Set-TransportService srv-edge2 -MessageTrackingLogMaxAge 100 -MessageTrackingLogMaxDirectorySize 5GB -MessageTrackingLogMaxFileSize 30MB | ||
+ | </ | ||
+ | |||
+ | ==== Запустить Exchange shell в Powershell ==== | ||
+ | Нужно, чтобы на компе админа были установлены компоненты управления. | ||
+ | <code powershell> | ||
+ | Import-Module " | ||
+ | Connect-ExchangeServer -auto | ||
+ | </ | ||
+ | |||
+ | Другой способ (для 2013): | ||
+ | <code powershell> | ||
+ | Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Support, | ||
+ | </ | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | ==== Connect to Exchange servers using remote PowerShell ==== | ||
+ | В данном случае в конторе три сервера - exch1, exch2, exch3, перебор до первого, | ||
+ | <code powershell> | ||
+ | $c = 1 | ||
+ | do {$pssession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http:// | ||
+ | until ($? -or $c -gt 3) | ||
+ | if (!$?) {write-host -fore red "Не удалось подключиться ни к одному серверу Exchange"; | ||
+ | Import-PSSession $pssession -DisableNameChecking -ErrorAction SilentlyContinue > $null | ||
+ | if (!$?) {write-host -fore red " | ||
+ | |||
+ | # do some work | ||
+ | |||
+ | Remove-PSSession $Session | ||
+ | </ | ||
+ | https:// | ||
+ | |||
+ | ==== Ссылка создания шаблонного письма ==== | ||
+ | < | ||
+ | mailto: | ||
+ | </ | ||
+ | |||
+ | ==== Предуведомление о спаме ==== | ||
+ | Идея - добавлять предуведомление в тело письма после пограничного антиспама, | ||
+ | |||
+ | Примерное содержание уведомления: | ||
+ | <code html> | ||
+ | <div style=" | ||
+ | < | ||
+ | < | ||
+ | почты как подозрительное.</ | ||
+ | < | ||
+ | сайты злоумышленников или заведомо ложную информацию.</ | ||
+ | < | ||
+ | <ul> | ||
+ | <li> Не открывайте ссылки и приложенные файлы. </li> | ||
+ | <li> Если письмо пришло от знакомого вам адресата, | ||
+ | (ссылки на документы или сайты, приложенные файлы), | ||
+ | действительно ли он отправлял вам это письмо. Помните, | ||
+ | почтой вашего собеседника или подделать обратный адрес. </li> | ||
+ | < | ||
+ | если по ссылкам из письма открываются сайты, которые их запрашивают, | ||
+ | даже если сайты выглядят похоже на привычные (корпоративная или личная веб-почта, | ||
+ | сайт предприятия, | ||
+ | < | ||
+ | что пароль истёк (и нужно его сообщить для замены), | ||
+ | (и вы должны заплатить выкуп), | ||
+ | с приложенной к письму претензией в формате PDF), и тому подобное. | ||
+ | Помните, | ||
+ | </ul> | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | https:// | ||
+ | |||
+ | ==== Поиск ящика, которому принадлежит адрес ==== | ||
+ | <code powershell> | ||
+ | Get-Recipient |? emailaddresses -match ' | ||
+ | </ | ||
+ | |||
+ | ===== Отчёты ===== | ||
+ | Кол-во отправленных и полученных писем за прошлый месяц на Exchange Edge | ||
+ | <code powershell> | ||
+ | Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 | ||
+ | $reportpath = " | ||
+ | |||
+ | #за весь прошлый месяц | ||
+ | $startdate = ((get-date -day 1).AddMonths(-1)).Date | ||
+ | $enddate = ((get-date -day 1).date).AddSeconds(-1) | ||
+ | |||
+ | $mailboxes = ((get-messagetrackinglog -Start $startdate -End $enddate -ResultSize unlimited | | ||
+ | ? EventId -match " | ||
+ | |||
+ | $report = @() | ||
+ | |||
+ | foreach ($mbx in $mailboxes) { | ||
+ | $mbxstat = '' | ||
+ | $mbxstat.' | ||
+ | $mbxstat.' | ||
+ | $mbxstat.' | ||
+ | $report += $mbxstat | ||
+ | } | ||
+ | |||
+ | $mark = (get-date).ToString(" | ||
+ | $report |Export-Csv -Path " | ||
+ | #$report |sort ' | ||
+ | |||
+ | sleep 30 | ||
+ | $attach = (gci " | ||
+ | |||
+ | $mailbody = "< | ||
+ | $mailbody += "< | ||
+ | $mailbody += "< | ||
+ | |||
+ | Send-MailMessage -SmtpServer mail.domain.ru -From " | ||
+ | </ | ||
+ | |||
+ | ===== Статьи ===== | ||
+ | [[http:// | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ===== Autodiscover ===== | ||
+ | Порядок поиска автонастройки клиентами, | ||
+ | |||
+ | - SCP (Service Connection Point), для доменных клиентов. Путь (MMC Sites and Services): // | ||
+ | # Получить список серверов | ||
+ | Get-ClientAccessServer | fl Name, | ||
+ | </ | ||
+ | - Внешние клиенты обращаются в DNS за стандартными URLs службы Autodiscover: | ||
+ | - Поиск в DNS [[http:// | ||
+ | - [[http:// | ||
+ | |||
+ | Варианты публикации Autodiscover | ||
+ | - 1 сертификат с полями SAN, когда Autodiscover сидит на отдельном от всех остальных служб адресе (https:// | ||
+ | - 1 сертификат без SAN - самый экономный вариант, | ||
+ | - 2 сертификата без поля SAN - публикация на отдельном адресе autodiscover.xml, | ||
+ | - Поиск Autodiscover через HTTP-редирект - то же, что и пред. пункт, но публикация по HTTP, который редиректит на https:// | ||
+ | |||
+ | Особенности подключения к CAS | ||
+ | |||
+ | Если настройки SCP никогда не менялись, | ||
+ | |||
+ | При переезде серверов Exchange в другой сайт надо учитывать, | ||
+ | |||
+ | Проксирование запросов | ||
+ | * CAS2013 перенаправляет запросы пользователя на MBX2013 | ||
+ | * CAS2017/ | ||
+ | * CAS2013 в обратном случае будет слать запросы на CAS2010, но на CAS2007 не будет - запросы будет обрабатывать MBX2013. | ||
+ | |||
+ | http:// | ||
+ | |||
+ | ===== Решение проблем ===== | ||
+ | ==== Get-MailboxExportRequest is not recognized as the name of a cmdlet ==== | ||
+ | EAC -> permissions -> admin roles -> Organization Management -> Edit -> Roles:Add -> click Mailbox Import Export -> Add -> OK -> Save. | ||
+ | |||
+ | ==== Не работает POP3 и IMAP ==== | ||
+ | На локальном сервере работает, | ||
+ | <code powershell> | ||
+ | Set-ServerComponentState -Identity srv.domain.ru -State Active -Requester HealthAPI -Component Imapproxy | ||
+ | Set-ServerComponentState -Identity srv.domain.ru -State Active -Requester HealthAPI -Component PopProxy | ||
+ | </ | ||
+ | |||
+ | ==== Учётка в AD блокируется с серверов Exchange ==== | ||
+ | |||
+ | ++++ Удобный скрипт поиска времени блокировки на контроллерах домена | | ||
+ | <code powershell> | ||
+ | <# | ||
+ | .SYNOPSIS | ||
+ | This function will locate the computer that processed a failed user logon attempt which caused the user account to become locked out. | ||
+ | .DESCRIPTION | ||
+ | This function will locate the computer that processed a failed user logon attempt which caused the user account to become locked out. | ||
+ | The locked out location is found by querying the PDC Emulator for locked out events (4740). | ||
+ | The function will display the BadPasswordTime attribute on all of the domain controllers to add in further troubleshooting. | ||
+ | .EXAMPLE | ||
+ | PS C: | ||
+ | This example will find the locked out location for Joe Davis. | ||
+ | .NOTE | ||
+ | This function is only compatible with an environment where the domain controller with the PDCe role to be running Windows Server 2008 SP2 and up. | ||
+ | The script is also dependent the ActiveDirectory PowerShell module, which requires the AD Web services to be running on at least one domain controller. | ||
+ | Author: Jason Walker | ||
+ | Last Modified: 3/20/2013 | ||
+ | #> | ||
+ | |||
+ | Function Get-LockedOutLocation { | ||
+ | |||
+ | [CmdletBinding()] | ||
+ | |||
+ | Param( | ||
+ | [Parameter(Mandatory=$True)] | ||
+ | [String]$Identity | ||
+ | ) | ||
+ | |||
+ | Begin { | ||
+ | |||
+ | $DCCounter = 0 | ||
+ | $LockedOutStats = @() | ||
+ | |||
+ | Try { Import-Module ActiveDirectory -ErrorAction Stop } | ||
+ | |||
+ | Catch { | ||
+ | |||
+ | | ||
+ | Break | ||
+ | } | ||
+ | } | ||
+ | |||
+ | Process { | ||
+ | |||
+ | #Get all domain controllers in domain | ||
+ | $DomainControllers = Get-ADDomainController -Filter * | ||
+ | $PDCEmulator = $DomainControllers | Where-Object { $_.OperationMasterRoles -contains " | ||
+ | |||
+ | Write-Verbose " | ||
+ | |||
+ | ForEach($DC in $DomainControllers) { | ||
+ | |||
+ | $DCCounter++ | ||
+ | Write-Progress -Activity " | ||
+ | Try { $UserInfo = Get-ADUser -Identity $Identity | ||
+ | |||
+ | Catch { | ||
+ | |||
+ | Write-Warning $_ | ||
+ | Continue | ||
+ | } | ||
+ | |||
+ | if ($UserInfo.LastBadPasswordAttempt) { | ||
+ | |||
+ | $LockedOutStats += New-Object -TypeName PSObject -Property @{ | ||
+ | Name = $UserInfo.SamAccountName | ||
+ | SID = $UserInfo.SID.Value | ||
+ | LockedOut | ||
+ | BadPwdCount | ||
+ | BadPasswordTime | ||
+ | DomainController | ||
+ | AccountLockoutTime | ||
+ | LastBadPasswordAttempt = ($UserInfo.LastBadPasswordAttempt).ToLocalTime() | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | $LockedOutStats | Format-Table -Property Name, | ||
+ | |||
+ | #Get User Info | ||
+ | Try { | ||
+ | |||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | Catch { | ||
+ | |||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | ForEach ($Event in $LockedOutEvents) { | ||
+ | |||
+ | if ($Event | Where {$_.Properties[2].value -match $UserInfo.SID.Value}) { | ||
+ | |||
+ | $Event | Select-Object -Property @( | ||
+ | @{Label = ' | ||
+ | @{Label = ' | ||
+ | @{Label = ' | ||
+ | @{Label = ' | ||
+ | @{Label = ' | ||
+ | @{Label = ' | ||
+ | ) | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | ++++ | ||
+ | https:// | ||
+ | |||
+ | Потом нужно смотреть в логи IIS на соответствующем сервере, | ||
+ | < | ||
+ | C: | ||
+ | </ | ||
+ | Учитывать, | ||
+ | |||
+ | ==== Outlook - ошибка сертификата безопасности прокси-сервера ==== | ||
+ | Ошибка возникла после замены сертификата wildcard на прокси-сервере, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Оказалось, | ||
+ | |||
+ | <code powershell> | ||
+ | PS> | ||
+ | |||
+ | Name Server CertPrincipalName | ||
+ | ---- ------ ----------------- | ||
+ | exch 1 | ||
+ | expr msstd: | ||
+ | WEB 1 | ||
+ | |||
+ | </ | ||
+ | |||
+ | В интернете есть [[https:// | ||
+ | |||
+ | <code powershell> | ||
+ | PS> | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ==== После смены внутреннего сертификата невозможно зайти на OWA и EAC ==== | ||
+ | После ввода логина и пароля выбрасывает опять на страницу входа.\\ | ||
+ | Решение - поставить тот же сертификат на сайт " | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Затем нужно перезапустить IIS. | ||
+ | |||
+ | https:// | ||
+ | |||
+ | ==== Autodiscover - разрешить этому веб-сайту выполнить настройку параметров сервера? | ||
+ | После переключения имени autodiscover.example.com на реверс-прокси с серверов напрямую (DNS round robin), начало выдаваться сообщение: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Если выбрать " | ||
+ | |||
+ | Собственно, | ||
+ | <code powershell> | ||
+ | function Set-AutodiscoverKey { | ||
+ | param($key, | ||
+ | if ((gci Registry:: | ||
+ | Write-Host -fore red "No record $addr, adding it to $($key.name)" | ||
+ | $null = New-ItemProperty ` | ||
+ | -Path Registry:: | ||
+ | -Name $addr ` | ||
+ | -type None ` | ||
+ | -Value ([byte[]]@()) ` | ||
+ | -Force | ||
+ | } | ||
+ | else { | ||
+ | Write-Host -fore green "The record $addr exists in $($key.name)" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | $addresses = " | ||
+ | $reg = (gci Registry:: | ||
+ | if (!$reg) {exit} | ||
+ | |||
+ | foreach ($key in $reg) { | ||
+ | $addresses |% { | ||
+ | Set-AutodiscoverKey $key $_ | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | [[https:// | ||
+ | |||
+ | ==== Невозможно удалить сертификат из Exchange Admin Center ==== | ||
+ | При попытке удалить сертификат появляется ошибка: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Дело в том, что сертификат на подмену уже есть и привязан к службам. Решить проблему можно обходным путём, <color # | ||
+ | |||
+ | < | ||
+ | Look under Console root -> Certificates -> Personal -> Certificates.</ | ||
+ | |||
+ | Сначала нужно привязать новый сертификат с службе, | ||
+ | <code powershell> | ||
+ | Enable-ExchangeCertificate -Thumbprint < | ||
+ | </ | ||
+ | Иначе письма будут застревать в очереди внутренних серверов. | ||
+ | |||
+ | https:// | ||
+ | ==== Exchange Edge блокирует легитимные вложения ==== | ||
+ | Не приходит вложение filename.xlsx.zip, | ||
+ | |||
+ | ++++ Список расширений в Attachment filter| | ||
+ | <code powershell> | ||
+ | (Get-AttachmentFilterEntry).name |sort | ||
+ | |||
+ | *.ade | ||
+ | *.adp | ||
+ | *.app | ||
+ | *.asx | ||
+ | *.bas | ||
+ | *.bat | ||
+ | *.chm | ||
+ | *.cmd | ||
+ | *.com | ||
+ | *.cpl | ||
+ | *.crt | ||
+ | *.csh | ||
+ | *.exe | ||
+ | *.fxp | ||
+ | *.hlp | ||
+ | *.hta | ||
+ | *.inf | ||
+ | *.ins | ||
+ | *.isp | ||
+ | *.js | ||
+ | *.jse | ||
+ | *.ksh | ||
+ | *.lnk | ||
+ | *.mda | ||
+ | *.mdb | ||
+ | *.mde | ||
+ | *.mdt | ||
+ | *.mdw | ||
+ | *.mdz | ||
+ | *.msc | ||
+ | *.msi | ||
+ | *.msp | ||
+ | *.mst | ||
+ | *.ops | ||
+ | *.pcd | ||
+ | *.pif | ||
+ | *.prf | ||
+ | *.prg | ||
+ | *.ps1 | ||
+ | *.ps11 | ||
+ | *.ps11xml | ||
+ | *.ps1xml | ||
+ | *.ps2 | ||
+ | *.ps2xml | ||
+ | *.psc1 | ||
+ | *.psc2 | ||
+ | *.reg | ||
+ | *.scf | ||
+ | *.scr | ||
+ | *.sct | ||
+ | *.shb | ||
+ | *.shs | ||
+ | *.url | ||
+ | *.vb | ||
+ | *.vbe | ||
+ | *.vbs | ||
+ | *.wsc | ||
+ | *.wsf | ||
+ | *.wsh | ||
+ | *.xnk | ||
+ | application/ | ||
+ | application/ | ||
+ | application/ | ||
+ | application/ | ||
+ | application/ | ||
+ | application/ | ||
+ | message/ | ||
+ | text/ | ||
+ | text/ | ||
+ | x-internet-signup | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | Решение: | ||
+ | <code powershell> | ||
+ | Disable-TransportAgent " | ||
+ | </ | ||
+ | |||
+ | и перенести все расширения в Каспер. | ||
+ | |||
+ | {{: |