Entries by tag: exchange

Статистика почтового ящика больше МБ
get-mailbox | Get-MailboxStatistics | where {$_.TotalItemSize -ge 600MB}
Tags: ,

Проверка почтовой квоты
'checkmailboxquotas.vbs /f:c:\docs\Quotas.txt
' NAME: CheckMailboxQuotas.vbs
' AUTHOR: Bharat Suneja , Exchangepedia
' DATE  : 12/15/2006
'Checks users' mailbox quotas if set individually, else checks quotas on Mailbox Store
'and on any Mailbox Store policies (System Policies) that apply mailbox limits to a
'Store. Output to file using /f: switch with filename/path - e.g.
'checkmailboxquotas.vbs /f:c:\docs\Quotas.txt
'Suppress console output using /s switch - combine with output to file.
'Help with /help switch.
'Pickup Named Arguments
Set colNamedArguments = WScript.Arguments.Named
strOutputFile = colNamedArguments.Item("f")
strNoConOutput = colNamedArguments.Item("s")
strHelp = colNamedArguments.Item("help")

'Detect help and write help text to console

Const Textmode = 1

'Get AD Path
Set objRootDSE = GetObject("LDAP://rootDSE")
strDomainContext = objRootDSE.Get("defaultNamingContext")
'WScript.Echo "strDomainContext: " & strDomainContext  '#debug remove
strADsPath = "LDAP://" & objRootDSE.Get("defaultNamingContext")
Set objDomain = GetObject(strADsPath)
Wscript.Echo strADsPath

'Setup ADODB connection
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection    

'Get Mailbox Stores - msExchPrivateMDB
'Execute search command to look for Organization
    objCommand.CommandText = _
      "<LDAP://CN=Microsoft Exchange,CN=Services,CN=Configuration," & strDomainContext & ">" & ";(&(objectClass=msExchPrivateMDB)(!objectClass=msExchPrivateMDBPolicy))" & ";distinguishedName,name,msExchPolicyList,mDBStorageQuota,mDBOverQuotaLimit,mDBOverHardQuotaLimit" & _
      'Execute search to get Recordset
       Set objStoresRS = objCommand.Execute
        '# If no mailboxe Stores found
     '   WScript.Echo "AD Search for mailbox stores completed" '#debug remove
       If objStoresRS.RecordCount = 0 Then
          strOutput = strOutput & VbCrLf & "No Mailbox Stores found!"
          WScript.Echo strOutput  
        '  WScript.Quit
          strOutput = strOutput & VbCrLf & "Mailbox Stores found: " & objStoresRS.RecordCount
        '  WScript.Echo strOutput '#debug remove
          'Create Dictionary object here
          Set objStoresDictionary = CreateObject("Scripting.Dictionary")
          objStoresDictionary.CompareMode = Textmode
         ' WScript.Echo "Dictionary Created"   '#debug remove

          'Enumerate Stores
          While Not objStoresRS.EOF
          Set objStore = GetObject("LDAP://" & objStoresRS.Fields("distinguishedName") & "")
          WScript.Echo "Bound to Store: " & objStore.cn
          strStoreNameDictEntry = objStore.cn    'Get Store CN for Dictionary
              'Check Store for Policy
              If IsArray(objStoresRS.Fields("msExchPolicyList")) Then
              WScript.Echo "Store has Policy!" '#debug remove
                  For Each strPolicyDN In objStoresRS.Fields("msExchPolicyList").value
                     Set objPolicy = GetObject ("LDAP://" & strPolicyDN & "")
                     WScript.Echo "Policy Name: " & objPolicy.cn
                     'Check Policy for Quota limits
                         If IsEmpty(objPolicy.mDBStorageQuota) Then  'mDBOverQuotaLimit  mDBOverHardQuotaLimit
                            WScript.Echo "Policy does not have Mailbox Quota"
                              strStoreDictEntry = strStoreDictEntry & "#null"
                            WScript.Echo "Policy Mailbox Quota: " & objPolicy.mDBStorageQuota
                            strStoreDictEntry = strStoreDictEntry & "#" & objPolicy.mDBStorageQuota
                            End If
                          If IsEmpty(objPolicy.mDBOverQuotaLimit) Then  '  mDBOverHardQuotaLimit
                               WScript.Echo "Policy does not have Mailbox Over Quota Limit"
                                 strStoreDictEntry = strStoreDictEntry & "#null"
                            WScript.Echo "Policy Mailbox Over Quota Limit: " & objPolicy.mDBOverQuotaLimit
                              strStoreDictEntry = strStoreDictEntry & "#" & objPolicy.mDBOverQuotaLimit
                            End If
                          If IsEmpty(objPolicy.mDBOverHardQuotaLimit) Then  '
                               WScript.Echo "Policy does not have Mailbox Over Hard Quota Limit"
                                 strStoreDictEntry = strStoreDictEntry & "#null"
                            WScript.Echo "Policy Mailbox Over Hard Quota Limit: " & objPolicy.mDBOverHardQuotaLimit
                              strStoreDictEntry = strStoreDictEntry & "#" & objPolicy.mDBOverHardQuotaLimit
                            End If
                             'End Policy Quota Check
                                    strStoreDictEntry = strStoreDictEntry & "#Policy" & "#" & objPolicy.cn
                                    objStoresDictionary.Add strStoreNameDictEntry, strStoreDictEntry
                                   ' WScript.Echo "Dict count: " & objStoresDictionary.Count
                     Next  'Move to Next Policy
              WScript.Echo "#No Policy" '#debug remove
              'Check Store Quotas Here
                      If IsEmpty(objStore.mDBStorageQuota) Then  'mDBOverQuotaLimit  mDBOverHardQuotaLimit
                            WScript.Echo "Store does not have Mailbox Quota"
                              strStoreDictEntry = strStoreDictEntry & "#null"
                            WScript.Echo "Store Mailbox Quota: " & objStore.mDBStorageQuota
                              strStoreDictEntry = strStoreDictEntry & "#" & objStore.mDBStorageQuota
                            End If
                          If IsEmpty(objStore.mDBOverQuotaLimit) Then  '  mDBOverHardQuotaLimit
                               WScript.Echo "Store does not have Mailbox Over Quota Limit"
                                 strStoreDictEntry = strStoreDictEntry & "#null"
                            WScript.Echo "Store Mailbox Over Quota Limit: " & objStore.mDBOverQuotaLimit
                              strStoreDictEntry = strStoreDictEntry & "#" & objStore.mDBOverQuotaLimit
                            End If
                          If IsEmpty(objStore.mDBOverHardQuotaLimit) Then  '
                               WScript.Echo "Store does not have Mailbox Over Hard Quota Limit"
                                 strStoreDictEntry = strStoreDictEntry & "#null"
                            WScript.Echo "Store Mailbox Over Hard Quota Limit: " & objStore.mDBOverHardQuotaLimit
                              strStoreDictEntry = strStoreDictEntry & "#" & objStore.mDBOverHardQuotaLimit
                            End If
                             'End Store Quota Check
                            strStoreDictEntry = strStoreDictEntry & "#Store#"
                            WScript.Echo "dictStoreNameDictEntry: Key:" & strStoreNameDictEntry & " - strStoreDictEntry: " & strStoreDictEntry
                               objStoresDictionary.Add strStoreNameDictEntry, strStoreDictEntry

              End If  'End Check for Policy
             ' WScript.Echo "DictionaryEntry: " & strStoreDictEntry  '#debug remove
              WScript.Echo "Stores in Dictionary: " & objStoresDictionary.Count
              strStoreNameDictEntry = Null
              strStoreDictEntry = Null
          WScript.Echo "----------------------"
          End If    
          'Part 2 of script - checks users
          'Execute search command to look for Organization
    objCommand.CommandText = _
      "<" & strADsPath & ">" & ";(&(objectClass=user)(homeMDB=*)(!CN=SystemMailbox{*}))" & ";distinguishedName,name,mDBStorageQuota,mDBOverQuotaLimit,mDBOverHardQuotaLimit" & _
      'Execute search to get Recordset
       Set objUsersRS = objCommand.Execute
       strOutput = strOutput & VbCrLf & strTitle & VbCrLf &  "===================================="
       '# If no mailboxes found
       If objUsersRS.RecordCount = 0 Then
          WScript.Echo "No mailboxes found!"
         ' WriteFile
                strOutput = strOutput & VbCrLf & "Mailboxes found: " & objUsersRS.RecordCount
                strOutput = strOutput & VbCrLf &  "--------------------------" & VbCrLf
                strOutput = strOutput & "All limits are in Kilobytes (KB)" & VbCrLf
                strOutput = strOutput & "User#Store#Limit#Stop Send (mDBOverQuota)#Stop Receive (mDBOverHardQuotaLimit)#Set On#Policy Name" & VbCrLf
                  While Not objUsersRS.EOF
                     '# Check if mailbox bypasses Store/Policy limits
                      Set objUser = GetObject("LDAP://" & objUsersRS.Fields("distinguishedName") & "")
                      'Get users' homeMDB
                      strHomeMDB = objUser.homeMDB
                      Set objHomeMDB = GetObject("LDAP://" & strHomeMDB & "")
                      strHomeMDBCn = objHomeMDB.cn
                          '# Check if User does not have default limits (does not bypass Store/Policy)
                             If objUser.mDBUseDefaults Then
                                strUserStatus = strUserLimit & objUser.displayName & "#"
                                    'Check Dictionary for Store
                                    If objStoresDictionary.Exists(strHomeMDBCn) Then
                                       ' WScript.Echo "Exists"
                                        strToAdd =strHomeMDBCn &  objStoresDictionary.Item(strHomeMDBCn)
                                       ' WScript.Echo "strToAdd: " & strToAdd
                                       strUserStatus = strUserStatus & strToAdd
                                        WScript.Echo "Store does not exist in Dictionary"
                                        End If
                               strUserStatus = strUserLimit & objUser.displayName & "#" & strHomeMDBCn & "#"
                              'Check users for individual limits
                               If IsEmpty(objUser.mDBStorageQuota) Then  '  mDBOverHardQuotaLimit
                               strUserLimit = strUserLimit & "null#"
                             strUserLimit = strUserLimit &  objUser.mDBStorageQuota & "#"
                            End If
                            If IsEmpty(objUser.mDBOverQuotaLimit) Then  '  mDBOverHardQuotaLimit
                              strUserLimit = strUserLimit & "null#"
                             strUserLimit = strUserLimit &  objUser.mDBOverQuotaLimit & "#"
                            End If
                          If IsEmpty(objUser.mDBOverHardQuotaLimit) Then  '
                                strUserLimit = strUserLimit & "null#"
                             strUserLimit = strUserLimit & objUser.mDBOverHardQuotaLimit & "#"
                            End If
                            strUserLimit = strUserLimit & "User#"
                              End If 'Ends Bypass Check  
                              strOutput = strOutput & strUserStatus  &  strUserLimit & VbCrLf
                       'Empty variables here
                       strUserLimit = Null
                       strToAdd = Null
                       strHomeMDBCn = Null
                       objUsersRS.MoveNext  'Move to next user
                 Wend   'End While EOF for UsersRS
          End If                                      
              '  FUNCTIONS
              Sub WriteFile
              'Open new text file, write info, close file
                If IsEmpty(strOutputFile) Then
                   WScript.Echo "No file output"
                     Set objFSO = CreateObject("Scripting.FileSystemObject")
                     Set objFile = objFSO.CreateTextFile(strOutputFile)
                     'Write Stuff
                    objFile.WriteLine strOutput
                    'Close text file
                    End If
                  End Sub
      'SUB Write Console
       Sub WriteCon
          If Not colNamedArguments.Exists("s") Then
          WScript.echo strOutput
          WScript.Echo "No console output"
          End If
       End Sub
                 SUB WriteHelp
       If colNamedArguments.Exists("help") Then
          strHelpText = "USAGE: showMailboxQuotas.vbs" & VbCrLf & "OPTIONAL Arguments: /s:y   - no console output" & VbCrLf & _
          "/f:Output_File_Name.txt - writes output to txt file in the argument" & VbCrLf & "/help - help text" & VbCrLf & _
          "showMailboxQuotas.vbs /f:c:\MailboxLimits.txt /s:y - produces " & VbCrLf & "file MailboxLimits.txt " & " and no console output"
       WScript.Echo strHelpText
       End If
       End Sub  
Tags: ,

Exchange 2010 права на календарь
Exchange 2010 allows us to use power shell for assigning calendar permissions. You can add Reviewer, Editor and all other permission types remotely without moving from your chair.

To assign Calendar Editor permission use the following command:

Set-MailboxFolderPermission -Identity Granter_Username:Calendar -User ‘Granted_username’ -AccessRights Editor

You can review calendar permissions with following PS command

Get-MailboxFolderPermission -Identity Granter_Username:calendar

You can use the same PS command to provide all available access rights.
Just replace the attribute after -AccessRights


Удаление отдельных сообщений с сервера Exchange

Удаление отдельных сообщений с сервера Exchange

Время от времени администратор Exchange сталкивается с ситуацией, когда сообщения соответствующие определенным критериям должны быть удалены из большого числа почтовых ящиков или транспортных очередей сервера Exchange. Такая необходимость может возникнуть из-за какой-либо массовой рассылки, когда сообщение отправлено случайно в большую группу рассылки или большому числу отдельных получателей или когда нужно предпринять усилия по очистке от последствий распространения вируса массовой почтовой рассылки (хотя они встречаются все реже и являются предметом заботы антивирусных сканеров серверов Exchange).

Соответствующие шаги описаны в различных местах документации Exchange, но может быть достаточно трудно, чтобы обратиться к нескольким источникам, если вы имеете смешанную среду содержащую несколько версий Exchange сервера. Мы хотели бы собрать в одном месте в некоторой степени обобщенные инструкции о том, как выполнить эти задачи во всех ныне поддерживаемых версиях Exchange Server - Exchange 2010, Exchange 2007 и Exchange 2003.

Удаление сообщений из почтовых ящиков

Удаление сообщений из командной строки в Exchange 2010 RTM и Exchange 2007

В Exchange 2010 RTM и в Exchange 2007 вы можете использовать командлет Export-Mailbox для того, чтобы экспортировать или удалять сообщения. В Exchange 2010 SP1 действия по экспорту почтового ящика выполняются командлетом New-MailboxExportRequest и рассматриваются в отдельной статье. Действия по поиску и удалению сообщений выполняются командлетом Search-Mailbox.


В Exchange 2010 учетной записи должна быть назначена роль экспорта и импорта почтового ящика для того, чтобы выполнять операцию, используя Export-Mailbox в  Exchange 2010 RTM или Search-Mailbox в Exchange 2010 SP1. Если эта роль не назначена, то вы не сможете выполнять или «видеть» этот командлет.

Многофункциональный командлет Export-Mailbox может экспортировать содержимое почтового ящика на основе имен папок, диапазонов даты и времени, имен вложенных файлов и многих других фильтров. Сужение поиска предотвращает случайное удаление полезной почты. Для дополнительной информации, описания синтаксиса и параметров, смотрите следующие ссылки:

• Export-Mailbox
• How to Export Mailbox Data
• Exchange Server 2007 Export Mailbox task

Учетная запись, используемая для экспорта информации, должна быть учетной записью Exchange Server Administrator, членом локальной группы Administrators целевого сервера и иметь полные права (Full Access) на исходный и целевой почтовые ящики. Целевой почтовый ящик должен быть заранее создан, как и целевая папка, которую вы указываете, тоже должна быть создана до выполнения команды.

Добавление и удаление необходимых разрешений

Следующий пример показывает, как извлечь все почтовые ящики организации Exchange и назначить полные права учетной записи MyAdmin. Вы должны выполнить эту операцию перед экспортом или удалением сообщений из почтовых ящиков пользователей. Отметим, что если вам необходимо экспортировать или удалить сообщения только из нескольких почтовых ящиков, то вы можете использовать командлет Get-Mailbox с соответствующими фильтрами или перечислить все исходные почтовые ящики.

Get-Mailbox -ResultSize unlimited | Add-MailboxPermission -User MyAdmin -AccessRights FullAccess -InheritanceType all

После экспорта или удаления сообщений из почтовых ящиков вы можете удалить полные права, как показано в следующем примере:

Get-Mailbox -ResultSize unlimited | Remove-MailboxPermission -User MyAdmin -AccessRights FullAccess -InheritanceType all

Удаление сообщений

Вот несколько примеров удаления сообщений.

В следующем примере удаляются все сообщения из папки Inbox почтовых ящиков на сервере Server1, которые содержат ключевые слова «Friday Party» и получены между 7-м и 9-м сентября. Эти сообщения будут удаляться из почтовых ящиков и копироваться в папку DeleteMsgs почтового ящика  MyBackupMailbox. После этого администратор может просмотреть сообщения в почтовом ящике MyBackupMailbox и удалить их. Формат параметров StartDate и EndDate должен соответствовать формату даты установленной на сервере: это или mm-dd-yyyy или dd-mm-yyyy.

Get-Mailbox -Server Server1 -ResultSize Unlimited | Export-Mailbox -SubjectKeywords "Friday Party" -IncludeFolders "\Inbox" -StartDate "09/07/2010" -EndDate "09/09/2010" -DeleteContent -TargetMailbox MyBackupMailbox -TargetFolder DeleteMsgs -Confirm:$false

В этом примере из всех почтовых ящиков удаляются все сообщения содержащие ключевые слова «Friday Party» в теле или заголовке.

В зависимости от размеров вашей среды лучше выполнять извлечение/удаление в пакетном режиме, либо используя командлет Get-Mailbox с параметрами Server или Database (Get-Mailbox -Server servername -ResultSize Unlimited или Get-Mailbox -Database DB_Name -ResultSize Unlimited), либо указывая фильтр в параметре Filter. Вы можете также использовать командлет Get-DistributionGroupMember, чтобы выполнить эту операцию над членами группы рассылки.

Get-Mailbox -ResultSize Unlimited | Export-Mailbox -ContentKeywords "Friday Party" -TargetMailbox MyBackupMailbox -TargetFolder 'Friday Party' -DeleteContent

Рекомендуется всегда использовать целевой почтовый ящик (указывая параметры TargetMailbox и TargetFolder), чтобы иметь копию удаляемых сообщений. Вы можете просмотреть сообщения перед окончательным их удалением, так что любые нормальные сообщения, попавшие под действие фильтра, могут быть импортированы обратно в исходный почтовый ящик владельца. Однако можно просто удалить все сообщения без вспомогательного копирования их в другой почтовый ящик.

В этом примере из всех почтовых ящиков удаляются все сообщения, содержащие ключевые слова «Friday Party» в теле или заголовке, без копирования их в целевой почтовый ящик:

Get-Mailbox | Export-Mailbox -ContentKeywords "Friday Party" -DeleteContent

Удаление сообщений на серверах Exchange 2003 and Exchange 2000 с помощью  ExMerge

Утилита ExMerge может использоваться на Exchange серверах старых версий для экспорта почтовых сообщений. Шаги для удаления нежелательных сообщений их почтовых ящиков пользователей описаны в статье KB 328202 Удаление зараженных вирусом сообщения из почтовых ящиков с помощью средства ExMerge.exe.

Удаление сообщений из общих папок

Вы можете использовать Outlook Object Model для того, чтобы удалять сообщения из общих папок. Это работает на любой версии сервера Exchange. Обратная сторона этого варианта в том, что он медленный и может затыкаться, когда он обрабатывает очень большие папки в десятки тысяч записей. В Exchange 2010/2007 вы можете использовать Exchange Web Services для удаления сообщений из общих папок. EWS не имет проблем с большими папками.

Для дополнительной информации смотрите следующие статьи:

• Cleaning Viruses In Public Folders Using OOM
• Cleaning Viruses In Public Folders Using EWS

Удаление сообщений из почтовых очередей

Может случиться так, что вам необходимо удалить сообщения из почтовых очередей сервера Exchange, чтобы предотвратить получение нежелательного письма. Для получения дополнительной информации смотрите Общие сведения об очередях транспорта.

Удаление сообщений из почтовых очередей Exchange 2010 RTM и Exchange 2007

Удаление сообщения из очереди это процесс из двух шагов.  Первая вещь, которую надо сделать это приостановить (suspend) само сообщение. Как только сообщение приостановлено, вы можете продолжить и удалить его из очереди. Следующие команды приостанавливают  и удаляют сообщение на основе его заголовка.

Exchange 2007 SP1 и SP2

Следующая команда приостанавливает сообщения со строкой «Friday Party» в транспортных очередях на всех транспортных серверах организации:

Get-TransportServer | Get-Queue | Get-Message -ResultSize unlimited | where{$_.Subject -eq "Friday Party" -and $_.Queue -notlike "*\Submission*"} | Suspend-Message

На серверах Exchange 2007 RTM, SP1 и SP2 вы не можете приостановить и удалить сообщения в очереди Submission. Так что эта команда не будет воздействовать на сообщения в этой очереди.

Следующая команда удаляет все приостановленные сообщения, исключая очередь Submission:

Get-TransportServer | Get-Queue | Get-Message -ResultSize unlimited | where{$_.status -eq "suspended" -and $_.Queue -notlike "*\Submission*"} | Remove-Message -WithNDR $False

Exchange 2010 и Exchange 2007 SP3

Следующая команда приостанавливает сообщения со строкой «Friday Party» в заголовке во всех  транспортных очередях на всех транспортных серверах организации:

Get-TransportServer | Get-Queue | Get-Message -ResultSize unlimited | where {$_.Subject -eq "Friday Party"} | Suspend-Message

Следующая команда удаляет все приостановленные предыдущей командой сообщения:

Get-TransportServer | Get-Queue | Get-Message -ResultSize unlimited | Where {$_.Subject -eq "Friday Party"} | Remove-Message -WithNDR $False

Отметим, что вы можете выполнять эти команды на конкретном транспортном сервере, указав его имя после Get-TransportServer.

Приостановка и удаление сообщений в заданной транспортной очереди

Вы можете приостановить и удалить сообщения из конкретной очереди. Чтобы получить список очередей на транспортном сервере, используйте командлет Get-Queue.

Следующая команда приостанавливает сообщения со строкой «Friday Party» в заголовке из заданной очереди:

Get-Message -Queue "server\queue" -ResultSize unlimited | where{$_.Subject -eq "Friday Party"} | Suspend-Message

Следующая команда удаляет все приостановленные предыдущей командой сообщения из заданной очереди:

Get-Message -Queue "server\queue" -ResultSize unlimited | where{$_.Subject -eq "Friday Party" } | Remove-Message -WithNDR $False

Очистка очередей в Exchange Server 2000 в Exchange Server 2003 с помощью MFCMAPI

В Exchange 2003/2000 вы можете использовать MFCMapi для отчистки очередей сообщений. Для дополнительной информации смотрите статью KB 906557  «Как использовать утилиту Mfcmapi.exe для просмотра и работы с сообщениями в SMTP TempTables в Exchange 2000 Server и Exchange Server 2003».

Если в очередях находится большое количество сообщений, то вы, скорее всего, захотите ограничить число сообщений отображаемое за один раз. В панели инструментов этой утилиты выберете Other > Options и в поле Throttle Level измените значение на более предпочтительное (например, 1000).

Предотвращение доставки сообщений с помощью транспортных правил

В Exchange 2010 и Exchange 2007 вы можете использовать транспортные правила для того, чтобы проверять сообщения в транспортном потоке и выполнять необходимые действия, подобные удалению сообщений, на основе заданных критериях. Для дополнительной информации смотрите Общие сведения о правилах транспорта.

В Exchange 2010 и Exchange 2007 вы можете использовать визард создания нового транспортного правила (New Transport Rule) в оснастке EMC, чтобы легко создавать транспортные правила. Следующие примеры иллюстрируют, как добиться того же самого через командную строку. Отметим различия синтаксиса между версиями. (В Exchange 2010 командлеты транспортных правил упрощены, позволяя вам создавать и модифицировать транспортные правила в одну строку).

Создание транспортного правила для удаления сообщения в Exchange 2010

В следующем примере создается транспортное правило для удаления сообщения со строкой «Friday Party» в заголовке:

New-TransportRule -Name "purge Friday Party messages" -Priority '0' -Enabled $true -SubjectContainsWords 'Friday Party' -DeleteMessage $true

Создание транспортного правила для удаления сообщения в Exchange 2007

В следующем примере создается транспортное правило для удаления сообщения со строкой «Friday Party» в заголовке:

$condition = Get-TransportRulePredicate SubjectContains
$condition.Words = @("Friday Party")
$action = Get-TransportRuleAction DeleteMessage
New-TransportRule -name "purge Friday Party messages" -Conditions @($condition) -Actions @($action) -Priority 0

Примечание: если в вашей организации Exchange работают совместно обе версии Exchange 2007 и Exchange 2010, то вы должны создать отдельное транспортное правило для каждой версии.

Скрипт показывающий число подключенных пользователей Exchange 2010

Set-ExecutionPolicy -ExecutionPolicy Bypass

function Get-CASActiveUsers {
    [Parameter(Position=0, ParameterSetName="Value", Mandatory=$true)]
    [Parameter(Position=0, ParameterSetName="Pipeline", ValueFromPipelineByPropertyName=$true, Mandatory=$true)]

  process {
    switch($PsCmdlet.ParameterSetName) {
      "Value" {$servers = $ComputerName}
      "Pipeline" {$servers = $Name}
    $servers | %{
      $RPC = Get-Counter "\MSExchange RpcClientAccess\User Count" -ComputerName $_
      $OWA = Get-Counter "\MSExchange OWA\Current Unique Users" -ComputerName $_
      New-Object PSObject -Property @{
        Server = $_
        "RPC Client Access" = $RPC.CounterSamples[0].CookedValue
        "Outlook Web App" = $OWA.CounterSamples[0].CookedValue

New-Item -ItemType File -Path $profile -Force

Get-CASActiveUsers -ComputerName cashub01,cashub02,cashub03


Ipv6 windows server 2008 Exchange
Если в логах Tracking center  имя серверов отображается в формате
Или пинг ::1 и не использется Ipv6
То можно отключить его
Windows Registry Editor Version 5.00


A sender's e-mail address appears to a recipient as two distinct addresses if the sender's display n
  1. Click Start, click Run, type regedit in the Open box, and then press ENTER.
  2. Locate and then right-click the following registry subkey:
  3. Point to New, and then click DWORD value.
  4. Type RFC2047Compliant to name the new value, and then press ENTER.
  5. Right-click RFC2047Compliant, and then click Modify.
  6. In the Value data box, type 0, and then click OK.
  7. Exit Registry Editor.

How to set IMAP Exchange Settings to use Unicode (UTF-8) fonts

How to set IMAP Exchange Settings to use Unicode (UTF-8) fonts

Some users encounter issues when using SugarCRM with an IMAP Exchange Server. These issues may include:

  • Deleting an email in an IMAP folder fails
  • Dragging an email from one IMAP folder to another fails
  • Creating new IMAP folders fail

The User’s IMAP settings within Exchange need to use the Unicode (UTF-8) character set.

To set the User’s IMAP Exchange Settings to use Unicode (UTF-8) font:

  1. Log into the Exchange Server.
  2. Go to Active Directory Users and Computers > Domain.
  3. Right click on a User and select Properties.
  4. Click on the Exchange Features Tab.
  5. Click on IMAP or IMAP4 and select Properties to open a separate Exchange Features window with the IMAP(4) tab.
  6. Uncheck the “Use protocol defaults” box.
  7. Under Mime encoding, either select ‘Provide message body as HTML’ or ‘Both.’
  8. In the Default character set drop-down menu, select “Unicode (UTF-8).
  9. Uncheck the “Use Microsoft Exchange rich-text format” box.
  10. Check the “Enable fast message retrieval” box.
  11. Uncheck the “Include all public folders when a folder list is requested” box.
  12. Select the “OK” button to close the Exchange Features window.
  13. Select the “OK” button to close the User Properties window.

Заголовок Subject в случае наличия не ASCII символов(русских букв) кодируется при отправке в utf-8.
Тема писем обрубается на 255 симовлов.
Или ещё меньше, если спецсимволы или русские буквы

  1. cd in bin directory of exchange installation path
  2. open file EdgeTransport.exe.config with notepad
    <gcServer enabled="true" />
    <add key="AgentLogEnabled" value="true" />
    <add key="ResolverRetryInterval" value="30" />
    . . . . . .
  3. Add this lines between "<configuration>" and "<runtime>"(don't change the "version" field value):
    <section name="CTS" type="Microsoft.Exchange.Data.Internal.CtsConfigurationSection, Microsoft.Exchange.Data.Common, PublicKeyToken=31bf3856ad364e35, version=8.0.681.0, culture=neutral"/>
    <MaximumEncodedWordLength Value="4096"/>
  4. Restart Exchange Transport Service

BTW, this is not redmine's defect, this is feature of exchange. Be careful when submitting bugs.

The same in russian:

Redmine отсылает разные уведомления по почте.
Заголовок Subject в случае наличия не ASCII символов(русских букв) кодируется при отправке в utf-8.
Почтовые клиенты понимают это и отображают по-русски.

Тема обрезается до 255 символов, почтовый клиент не видит "?=" в конце строки и не декодирует ее.


Настройка списков нежелательных адресатов в организации

Deploy Junk E-mail Lists Throughout Your Organization

As we know, we can set Outlook's "Safe Senders list", "Block Senders list" and "Safe Recipients list" to help people protect Spam. However, allowing all users to modify their lists is time-consuming and inconvenient. Now, we can use the following steps to deploy such lists throughout your organization (we will use "Safe Sender list" as example).

1. Create a share folder on server, say Junk E-mail, and give everyone read permission. Create a text file name SafeSender.txt. Input email addresses into file (one address one line).

2. Install "Microsoft Office 2003 Resource Kit" on the Domain Controller.

3. Start Active Directory Users and Computers (ADUC), Right Click on the OU in which users account is present, Go To "Properties", Click on "Group Policy" tab.

4. Select the Policy in effect, click on "Edit". It will open "Group Policy Object Editor". Right click on "Administrative Templates" under "User Configuration" -> All Tasks -> "Add/Remove Templates" -> Click on "Add" -> Select "Outlk11.ADM" and click "Open" -> Click "Close".

5. Expand "Microsoft Office Outlook 2003" under "Administrative Templates" -> Expand "Tools | Options" -> Expand "Preferences" -> Click on "Junk E-mail".

6. In the right pane double click on "Specify path to Safe Senders list".

7. Click on "Enabled" and under "Specify full path and filename to Safe Senders list" type UNC path of SafeSender.txt file (e.g.\\Server\JunkE-mail\SafeSenders.txt).

8. Double Click "Overwrite/Append Junk Email Import List" to configure if you want to keep user's own list.

9. Click on OK. Close "Group Policy Object Editor". Click OK again. Close Active Directory Users and Computers.

10. Log on to client machine and edit the following registry entry:


DWORD = JunkMailImportLists

Value = 1

Note: This registry key should be deployed to the client machines for successfully deploying the Safe Senders List. We can use Group policy again to deploy this key. The value of this registry key will turn back to zero after Outlook applies the safe sender list from group policy. So if you need to modify the list, please change the value to 1 again.

11. Log off from the client machine and log on again.

12. Launch Outlook. Now you can see the email addresses in the Safe Sender list.

NOTE: The same procedure described above can be used to specify "Safe Recipients" and "Blocked Senders" list.

We also can use the Custom Installation Wizard or the Custom Maintenance Wizard to deploy such lists. Please refer to the following article for more information.

How to use the Custom Installation Wizard or the Custom Maintenance Wizard to customize user profiles to load default junk e-mail filter lists in Outlook 2003


This article also applies to Outlook 2007. We can replace Outlk11.ADM with Outlk12.ADM file from "Microsoft Office 2007 Resource Kit".

Common white sender’s list in Junk e-mail filter

Функция Junk фильтра в Outlook очень привлекательна и на мой взгляд полезна. Эдакая локальная защита от спама. Работает более – менее приемлемо. Главная проблема заключается в том, что пользователи не хотят признавать этого. Для них его просто не существует и даже показав, как с ним работать, они через время обращаются к HelpDesk с проблемой потерявшихся писем. Еще одной бедой являются закрытые программные комплексы, которые рассылают уведомления по SMTP анонимно, т.е. пароль и имя пользователя не укажешь. С точки зрения Junk фильтра эти сообщения могут быть спамом, более того, иногда он их блокирует по неизвестной причине. Microsoft использует технологию SmartScreen, которая является «черным ящиком», что вполне объяснимо.

Так вот, что же делать в ситуации, если пользователю послали письмо уведомление о том, чтобы он сделал определенные действия, а письмо блокируется Junk фильтром?

Решений несколько:

  1. Переделать отправку сообщений по MAPI или SMTP с аутентификацией, тогда Junk фильтр будет считать сообщение внутренним.
  2. Поместить домен отправителя в белый список Junk фильтр.
  3. Отключить Junk фильтр.

Варианты 1 и 3 не подходят. Переделывать отправку производители не хотят или не могут, а отключать Junk фильтр не очень хорошо, потому что некоторым пользователям он нравится.

Остается решение – поместить в белый список. Если пользователь не может отслеживать папку Junk e-mail, то куда уж ему добавлять домены в белый список. По-хорошему бы сделать один корпоративный белый список. Как?

Я давно искал информацию на эту тему и нашел только то, что это можно сделать с помощью Custom Installation Wizard или the Custom Maintenance Wizard. Идея заключается в том, чтобы устанавливать офис с определенного места, затем делать изменения в конфигурации и распространять через MST файлы. В моем случае это неприемлемо.

Оказывается, что это полная ерунда. Сделать общий белый список можно с помощью политик, Outlook умеет его обновлять сам из txt файла.

Подробнее об этом написано здесь:

Deploy Junk E-mail Lists Throughout Your Organization
How to use the Custom Installation Wizard or the Custom Maintenance Wizard to customize user profiles to load default junk e-mail filter lists in Outlook 2003

Office 2003 Policy Template Files and Deployment Planning Tools
Microsoft Exchange Intelligent Message Filter and Group Policies


Exchange скрипт лимиты на размеры
$boxes = get-mailbox -resultsize unlimited | Get-MailboxStatistics

Foreach ($box in $boxes)


        $name = $box.DisplayName

        $currentSize = $box.TotalItemSize.ToString().Split("(")[1].Split(" ")[0].Replace(",", "")

        $WarningQuota = ([int]$currentSize + 262144000)

        $SendQuota = ([int]$currentSize + 367001600)

        Set-Mailbox -Identity $name -IssueWarningQuota $WarningQuota -ProhibitSendQuota $SendQuota


Exchange увеличить лимиты отправляемых принимаемых писем с 2 до 5 Мб скрипт
Get-Mailbox -ResultSize 'Unlimited' | where { $_.'MaxReceiveSize'  -match  '2 MB' } | set-mailbox -maxreceivesize 5MB -maxsendsize 5MB

Get-Mailbox * | fl MaxSendSize,MaxReceiveSize,alias

Exchange 2010 почта идёт сразу в удалённые
Get-Mailbox | Set-CalendarProcessing -AutomateProcessing AutoUpdate

База Exchange не дефрагментируется (Exchange 2003)
Echo RUN %time% >>c:\scripts\run.log
net stop MSExchangeIS
net stop MSExchangeMGMT
net stop MSExchangeMTA
net stop RESvc
net stop MSExchangeSRS
net stop MSExchangeSA
net stop MSSEARCH
net stop KSCM4E

cd "D:\Program Files\Exchsrvr\bin"

rem "D:\Program Files\Exchsrvr\bin\eseutil.exe" /P "D:\Program Files\Exchsrvr\mdbdata\priv1.edb"  
rem "D:\Program Files\Exchsrvr\bin\eseutil.exe" /P "D:\Program Files\Exchsrvr\mdbdata\pub1.edb"
rem "D:\Program Files\Exchsrvr\bin\eseutil.exe" /P "F:\Main Store\Mail Store.edb" /t f:\temp.edb
rem "D:\Program Files\Exchsrvr\bin\eseutil.exe" /D "D:\Program Files\Exchsrvr\mdbdata\priv1.edb"  /t D:\temp.edb
rem "D:\Program Files\Exchsrvr\bin\eseutil.exe" /D "D:\Program Files\Exchsrvr\mdbdata\pub1.edb" /t D:\temp.edb
"D:\Program Files\Exchsrvr\bin\eseutil.exe"/D "F:\Main Store\Mail Store.edb" /t f:\temp.edb
rem pause
rem "D:\Program Files\Exchsrvr\bin\eseutil.exe"/G "F:\Main Store\Mail Store.edb" /t f:\temp.edb
rem "D:\Program Files\Exchsrvr\bin\eseutil.exe"/P "F:\Main Store\Mail Store.edb" /t f:\temp.edb
rem "D:\Program Files\Exchsrvr\bin\eseutil.exe"/D "F:\Main Store\Mail Store.edb" /t f:\temp.edb
rem "D:\Program Files\Exchsrvr\bin\eseutil.exe"/mh "F:\Main Store\Mail Store.edb"
rem удаляем STM, если в базе нет важных данных и пересоздаём его
rem "D:\Program Files\Exchsrvr\bin\eseutil.exe"/p /createstm "F:\Main Store\Mail Store.edb"
net start MSExchangeIS
net start MSExchangeMGMT
net start MSExchangeMTA
net start RESvc
net start MSExchangeSRS
net start MSExchangeSA
net start MSSEARCH
net stART KSCM4E
rem "D:\Program Files\Exchsrvr\bin\isinteg.exe" -s SRV20 -fix -test alltests
Echo END %time% >>c:\scripts\run.log

Exchange 2010 ExpansionServer
Get-DistributionGroup -ResultSize Unlimited | Format-Table Name,ExpansionServer

Exchange 2010 права на редактирование групп рассылок
рочитайте следующую статью:



Загрузите скрипт:


Manage-GroupManagmentRole script


Выполните следующую команду описанную в статье на  Exchange сервере:

Manage-Groupmanagmeentrole.ps1 –creategroup


Восстановление сервера Exchange 2007 с помощью параметра RecoverServer

Восстановление сервера Exchange 2007 с помощью параметра RecoverServer

Текущий рейтинг: 3.18 (проголосовало 11)
vkontakte twitter facebook livejournal mail google yandex delicious memori bobrdobr moemesto misterwong friendfeed addthis
Шрифт: - +

Что может быть хуже серьезно поврежденных баз данных почтовых ящиков сервера Exchange 2007? Да, вы правы: только абсолютно «мертвый» сервер Exchange 2007. В этой статье я пролью свет на то, что необходимо для восстановления сервера Exchange 2007, вышедшего из строя из-за поломки аппаратного обеспечения, вызвавшего полную потерю данных. Как и при работе с серверами Exchange 2000 и 2003, вы можете восстановить сервер Exchange 2007 достаточно простым способом. Как многие из вас, вероятно, знают, для восстановления серверов Exchange 2000 и 2003 на новом аппаратном обеспечении можно воспользоваться параметром DisasterRecovery. Но в сервере Exchange 2007 этого параметра нет. Вместо него используется RecoverServer, который похож на DisasterRecovery. Что интересно, данный параметр используется для восстановления всех ролей сервера Exchange 2007, кроме роли Граничный транспорт (Edge Transport), который для хранения настроек использует ADAM, а не Active Directory.

При запуске программы установки с параметром RecoverServer на новом сервере Windows 2003 с именем сломанного или по каким-либо причинам отключенного старого, информация о нужном Exchange-сервере будет считана из Active Directory. Помимо применения ролей и настроек, хранящихся в Active Directory, программа установки, как и в случае ее запуска без параметра RecoverServer, установит файлы Exchange-сервера и необходимые службы ролей сервера Exchange. Это означает, что локальные настройки, сделанные на сервере (например, базы данных почтовых ящиков, коннекторы-получатели, настройки OWA и SSL-сертификатов и т.п.) должны быть в дальнейшем заново созданы или восстановлены вручную.

В данной статье мы рассмотрим все, что необходимо предпринять для восстановления сервера Exchange 2007 с установленными на нем ролями Центральный транспорт (Hub Transport), Почтовый ящик (Mailbox) и Клиентский доступ (Client Access).

Хотя параметр RecoverServer изначально создан для восстановления сломанного сервера, его можно использовать и для переноса сервера Exchange 2007 на новое аппаратное обеспечение.

Восстановление и настройка операционной системы

При получении нового сервера или новых компонентов сервера взамен вышедших из строя важно настроить разделы дисков таким образом, чтобы они были идентичны тому, что было на старом сервере. После настройки аппаратного обеспечения нового сервера в соответствии с документацией старого сервера (которая у вас, конечно же, есть, да?), мы можем начать установку 64-битной системы Windows 2003 Server. После этого нужно установить все компоненты Windows, необходимые ролям сервера Exchange 2007, а также все обновления и пакеты обновлений, которые были установлены на старом сервере. Детальное описание необходимых для каждой роли сервера компонентов Windows можно найти в документации по серверу Exchange 2007.

Помимо всего сказанного выше, необходимо убедиться, что имя нового сервера совпадает с именем старого сервера, при этом важно, чтобы старый серверы был выключен. Добавьте сервер в соответствующий домен Active Directory, перед этим сбросив учетную запись компьютера соответствующего сервера Exchange 2007. Для этого зарегистрируйтесь на контроллере домена или на любом другом сервере, где установлен пакет для администрирования, откройте оснастку Active Directory Users and Computers (ADUC) (Пользователи и компьютеры Active Directory). В оснастке ADUC откройте соответствующую учетной записи компьютера организационную единицу (по умолчанию Computers (Компьютеры)), затем щелкните правой кнопкой по учетной записи компьютера и выберите Reset Account (Сбросить учетную запись) (Рисунок 1).

Рисунок 1: Сброс учетной записи компьютера в оснастке ADUC

Рисунок 1: Сброс учетной записи компьютера в оснастке ADUC

В появившемся диалоговом окне нажмите Yes (Да), а затем OK. Теперь мы можем присоединить новый сервер к домену без лишних проблем. Перегрузите сервер.

Установка сервера Exchange 2007 с параметром RecoverServer

Теперь, после установки Windows 2003, запустим установку сервера Exchange 2007 с параметром RecoverServer. Нажмите Start (Пуск) | Run (Выполнить), наберите в командной строке cmd.exe и нажмите Enter. Перейдите в каталог с файлами установки Exchange 2007 и наберите Setup.com /M:RecoverServer.

Как видно из Рисунка 2, вначале идет подготовка установки, затем происходят обязательные предварительные проверки, и уже затем копируются файлы Exchange-сервера. После этого происходит настройки каждой роли сервера путем считывания информации из Active Directory.

Если вы восстанавливаете сервер Exchange 2007 с ролью Центральный транспорт, и это единственная роль сервера, рекомендуется запустить Setup.com /M:RecoverServer с параметром /DoNotStartTransport, поскольку несколько завершающих операций должны производиться до того, как роль будет активирована.

Рисунок 2: Восстановление сервера Exchange 2007 с параметром RecoverServer

Рисунок 2: Восстановление сервера Exchange 2007 с параметром RecoverServer

После успешного окончания установки Exchange-сервера мы почти закончили. Осталось завершить лишь несколько операций, зависящих от ролей сервера. Понятно, что на сервере Почтовый ящик должны быть восстановлены из резервной копии или скопированы с дисков старого сервера (если возможно) базы данных почтовых ящиков и общих папок. Если общие папки реплицируются с другими серверами Exchange 2000/2003 или 2007 организации Exchange, вам не нужно их восстанавливаться, поскольку пустые общие папки будут автоматически заполнены с других серверов.

Если вам необходимо восстановить одну или более базу данных почтовых ящиков/общих папок с помощью средства резервного копирования Windows 2003, обратите внимание, что у вас должен быть доступ к соответствующему каталогу с файлом .BKF. Выберите вкладку Restore and Manage media (Восстановление/управление данными), а затем выберите в меню Tools (Средства) | Catalog a backup file (Выбрать путь для резервной копии).

Если на восстановленном сервере установлена роль Центральный транспорт, возможно, вам понадобится восстановить сохраненные базы данных очередей сообщений (которые в сервере Exchange 2007 хранятся в базе данных ESE, а не в файловой системе NTFS, как это было в серверах Exchange 2000 и 2003) и поместить их в нужную папку (делать это следует при остановленной службе Microsoft Exchange Transport; вот почему при установке роли Центральный транспорт необходимо использовать параметр /DoNotStartTransport), а также настроить все коннекторы-получатели, хранящиеся локально на Центральном транспорте, а не в Active Directory, как коннекторы-отправители.

Помимо этого, вам понадобится восстановить настройки сервера с ролью Клиентский доступ (пользовательские файлы OWA и/или виртуальные каталоги). Пользовательские виртуальные каталоги можно восстановить с помощью сценариев, упомянутых в документации по серверу Exchange 2007.

Хотя использование параметра RecoverServer самый эффективный и самый быстрый способ восстановления сервера, следует также отметить, что полностью поддерживается и восстановление сервера Exchange 2007 с помощью Состояния системы и установочных файлов Exchange-сервера. Но помните, что этот метод применим к восстановлению сервера только на том же самом оборудовании.


Новый параметр RecoverServer сервера Exchange 2007, заменивший параметр DisasterRecover сервера Exchange 2003 значительно упрощает восстановление сервера с одной или несколькими ролями. Но важно учесть, что, в зависимости от установленных ролей, после восстановления следует выполнить еще ряд операций. И в конце хочу еще раз напомнить, что параметр RecoverServer не используется для восстановления роли Граничный транспорт.


Удаление вирусного\случайно посланного сообщения из многих ящиков
Remove one email from Exchange 2007

I just thought of sharing a cmdlet which every exchange pro should have handy.

User Arnold sends an email to a set of people with the subject line “I am back”. Now, Stallone being the IT manager wants you to delete that email from the server side.

All you gotta do is to run this cmdlet:

Get-Mailbox -Server EXCH | Export-Mailbox -TargetMailbox TempMailbox -TargetFolder ” To Delete” -SenderKeywords arnold@terminator.com -SubjectKeywords ” I am back ” –StartDate “12/30/10″ –EndDate “12/31/10″ -ExcludeFolders “\Calendar”, “\Contacts”, “\Deleted Items” –DeleteContent –MaxThreads 10


    Server name is EXCH
    Data will be extracted from user mailboxes to the folder “To Delete” in a mailbox called TempMailbox
    Start date and End Date switch let you choose a date range
    Set the ExcludeFolders switch if you don’t want to search specific folders
    DeleteContent is the switch which deletes the email
    MaxThreads is to specify 10 mailboxes will be processed at a time

Now remember that Export-Mailbox first copies content to the destination mailbox before performing the search and the target mailbox can get quite large and create heavy IO. This is different from creating a transport rule to filter incoming messages.

Users can still use the “Recall” option in outlook.

Get-Mailbox -Server “ESS-Exch702" | Add-MailboxPermission -User Test -AccessRights FullAccess

Export-Mailbox -Identity "First.LastName" -SubjectKeywords "This is my test message" -DeleteContent

Get-Mailbox -Database DB1 | Export-Mailbox -SubjectKeywords "Virus message" -DeleteContent

Get-Mailbox -resultsize unlimited | Export-Mailbox -SubjectKeywords "junk" -Deletecontent -confirm:$false

get-mailbox | Export-Mailbox –ContentKeywords "Virus message" –TargetMailbox Administrator –TargetFolder 'MyData' –DeleteContent

Get-Mailbox -Database DB1 | Export-Mailbox -TargetMailbox ExportMailbox -TargetFolder VirusData -SubjectKeywords "Virus message" -DeleteContent

get-mailbox | export-mailbox -SubjectKeywords "Virus Subject" -TargetMailbox myself -TargetFolder 'Virus' -StartDate "01/19/10" -EndDate "01/20/10" -DeleteContent

Get-Mailbox -Database DB1 | Export-Mailbox -TargetMailbox BOB  ExportMailbox -TargetFolder VirusData -SubjectKeywords "Virus message" -DeleteContent

Get-Mailbox -Resultsize Unlimited -DomainController “MYDC“| Export-Mailbox -GlobalCatalog “MYGC“ -SubjectKeywords “You have received A Hallmark E-Card!“ -DeleteContent

Exchange 2010 Группы рассылки

Howto: Upgrade all distribution groups in Exchange 2010

After you have upgraded your Exchange installation to Exchange 2010 and you might want to use the new distribution group features, you will see this “error”:

“You don’t have sufficient permissions. This operation can only be performed by a manager of the group”

You might also notice that it’s quite difficult to add a manager to the group from the Exchange management console.

The reason for this is that the group needs to be upgraded to Exchange 2010.
You can do that with the below command, which will upgrade all the distribution groups you have.

Get-DistributionGroup | Set-DistributionGroup

If you want to set the Manager for all group to the same use – you can use this command

Get-DistributionGroup |Set-DistributionGroup -ManagedBy “Manager Username” –BypassSecurityGroupManagerCheck


Get-DistributionGroup –resultsize unlimited | Set-DistributionGroup –ForceUpgrade


Списки рассылки после перехода на Exchange 2010
При редактировании модератора списка рассылки получил сообщение о необходимости провести обновление группы до Exchange 2010

Чтобы не выполнять на каждой данную операцию, выполнил
get-distributiongroup | set-distributiongroup

Проблема при перемещении ящика с Exchange 2007 на сервер Exchange 2010
При попытке переместить некоторые ящики с Exchange 2007 на сервер Exchange 2010 выдаётся ошибка прав доступа, хотя у меня полные права в организации Exchange

Active Directory operation failed on server.domain.com. This error is not retriable. Additional information:
Insufficient access rights to perform the operation.
Active directory response: 00002098: SecErr: DSID-03150A45, problem 4003 (INSUFF_ACCESS_RIGHTS), data 0
+ CategoryInfo : NotSpecified: (0:Int32) [New-MoveRequest], ADOperationException
+ FullyQualifiedErrorId : 6C39B6E8,Microsoft.Exchange.Management.RecipientTasks.NewMoveRequest

1. Открыть Active Directory Users and Computers
2. Выбрать Вид - Дополнительные возможности

Cannot move mailboxes From Exchange 2003 to Exchange 2007/2010 Due to Insufficient Rights?

3. Найти проблемную учетную запись, которая не перемещается
4. Безопасность
5. Дополнительно
6. Проверить\установитьInclude Inheritable permissions from object’s parent

Cannot move mailboxes From Exchange 2003 to Exchange 2007/2010 Due to Insufficient Rights?

7. Можно перемещать


Exchange 2007\2010 удаление дополнительного e-mail адреса
Понадобилось удалить дополнительный почтовый адрес у всех пользователей в системе

Get-Mailbox foreach {
# .emailaddresses returns array
# loop each email address
for ($i=0;$i -lt $_.EmailAddresses.Count; $i++)
$address = $_.EmailAddresses[$i]
# removes all addresses with test.com domain
if ($address.SmtpAddress -like "*@olddomain.ru" )
Write-host("Remove smtp adress: " + $address.AddressString.ToString() )
# remove address in the array
# save changes
$_ set-mailbox

Exchange 2010
$mailbox = Get-Mailbox
$mailbox | foreach {
for ($i=$_.EmailAddresses.Count;$i -ge 0; $i--)
$address = $_.EmailAddresses[$i]
if ($address.SmtpAddress -like "*@olddomain.ru" )
Write-host("Remove smtp adress: " + $address.AddressString.ToString() )
$_|set-mailbox -EmailAddresses $_.EmailAddresses

This CA root Certificate is not trusted. To Enable trust, install this certificate in the Trusted CA

Для включения функции SAN,на ROOT CA

certutil -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2
Перезапустить службу  ЦС:
net stop certsvc  && net start certsvc

Use the EMC to export an Exchange certificate

You need to be assigned permissions before you can perform this procedure. To see what permissions you need, see the "Client Access server security settings" entry in the Client Access Permissions topic.

  1. In the console tree, click Server Configuration.
  2. Select the server that contains the certificate, and then select the certificate you want to export.
  3. In the action pane, click Export Exchange Certificate.
  4. On the Export Exchange Certificate page, select the certificate you want to export. The services that are checked are currently assigned to the certificate.
  5. When you click Export, the Progress Page will confirm your selections and try to export the certificate.
  6. The Completion page will display the status of the request together with the syntax of the Shell cmdlet needed to export the certificate.
Use the Shell to export an Exchange certificate

You need to be assigned permissions before you can perform this procedure. To see what permissions you need, see the "Client Access server security settings" entry in the Client Access Permissions topic.

This example exports the Exchange certificate.

Export-ExchangeCertificate -Thumbprint 5113ae0233a72fccb75b1d0198628675333d010e -BinaryEncoded:$true -Path c:\certificates\export.pfx -Password:(Get-Credential).password
Get-ExchangeCertificate | FL

  Config the GPO like the following :
1) Computer Configuration -> Windows Settings -> Security Settings -> Public
Key Policies -> Trusted Root Certification Authorities
2) Inport the ABC Company Trust Root Certification in Trusted Root
Certification Authorities
3) Computer Configuration -> Windows Settings -> Security Settings -> Public
Key Policies
4) Inside Autoenrollment Settings -> Enable the Renew expired
certificates..... & Update certificates that use certificate templates
5) Link this GPO to the Computer OU

Reply With Quote


Как добавить поддержку дополнительных типов файлов PDF в поиск и правила Exchange 2007\2010
Configuring Adobe PDF iFilter 9 for 64-bit platforms for Exchange Server 2007
1. Install Adobe PDF iFilter 9 for 64-bit platforms.
2. Set the PATH environment variable to ‘bin’ folder of ‘Ifilter’ installation. For e.g in the PATH
variable, add the path ‘C:\Program Files\Adobe\Adobe PDF iFilter 9 64-bit\bin\’ and then
restart the machine.
3. Locate the following registry subkey:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Exchange\MSSearch\CLSID\. For this subkey,
add the following String values:
a. Name: {E8978DA6-047F-4E3D-9C78-CDBE46041603} Value: PDFFilter.dll
b. ThreadingModel"="Both"
c. Add the following DWORD value "Flags"=dword:00000001
4. Locate the following registry subkey:
5. For this subkey, add the following string value.
a. Name: .pdf
b. Value: {E8978DA6-047F-4E3D-9C78-CDBE46041603}
6. Stop and then restart the Exchange Search service. To do this, follow these steps:
a. Click Start, click Run, type cmd in the Open box, and then click OK. Command prompt will open
b. At the command prompt, type net stop msftesql-exchange, and then press ENTER
c. At the command prompt, type net start msexchangesearch, and then press ENTER
d. Type exit, and then press ENTER to exit the command prompt
7. Start ‘services.msc’
8. Restart MSExchange Information Store service.
9. Recreate the index by executing following command on Exchange Management shell
ResetSearchIndex.ps1 -force –all
10. Wait for the indexing to finish before initiating search. The index will be created at the same location where Mailbox database is present.
The steps mentioned above are as per specified by Microsoft. Please refer to following KB articles:

Скрипт, сохраняющий все почтовые адреса из Active Directory + Exchange
Скрипт, вытаскивающий на диск c: все email адреса из Active Directory+Exchange

Позже список можно будет скормить антиспаму, или для создания сторонних адресных книг

' VBScript Source File
' VERSION: 0.9
' AUTHOR: Bharat Suneja , Bharat Suneja
' CREATE DATE  : 5/06/2004
' LAST MODIFIED : 9/23/2005

'Set up constant for deleting values from multivalued attribute memberOf

Const ADS_PROPERTY_NOT_FOUND  = &h8000500D
Const ADS_UF_ACCOUNTDISABLE = 2                       'For UserAccountControl
Const strX400Search = "X400"

'Set RootDSE
Set objRootDSE = GetObject("LDAP://rootDSE")
strDomain = objRootDSE.Get("defaultNamingContext")
strADPath = "LDAP://" & strDomain
'wscript.Echo strADPath
Set objDomain = GetObject(strADPath)
'wscript.echo "objDomain: " & objDomain.distinguishedName

'Setup ADODB connection
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection

'Execute search command to look for Contacts & Groups
    objCommand.CommandText = _
      "<" & strADPath & ">" & ";(&(|(objectClass=contact)(objectClass=group))(mail=*))" & ";distinguishedName,displayName,mail,proxyAddresses;subtree"

    'Execute search to get Recordset
    Set objRecordSet = objCommand.Execute
        'Start procedure
    strResult = strResult & VbCrLf & "Domain: " & strDomain

    strResult = strResult & VbCrlf &  "#Total Records Found (other accounts): " & objRecordSet.RecordCount & VbCrlf
    AddressCount = 0

       While Not objRecordSet.EOF 'Iterate through the search results
            strUserDN = objRecordSet.Fields("distinguishedName")     'Get User's distinguished name from Recordset into a string
            set objUser= GetObject("LDAP://"& strUserDN & "")         'Use string to bind to user object

                       strResult = strResult & VbCrlf &  "cn: " & objUser.cn
                       strResult = strResult & VbCrlf &  "mail: " & objUser.mail
                       arrProxyAddresses = objRecordSet.Fields("proxyAddresses")
                       If IsArray(objRecordSet.Fields("proxyAddresses")) Then
                       strResult = strResult & VbCrLf & "Proxy Addresses"
                          For Each ProxyAddress in arrProxyAddresses
                            'Sub: Check X400
                             If InStr(ProxyAddress, strX400Search) <> 0 Then
                                'Wscript.Echo "#This was an x400"
                                     strResult = strResult & VbCrlf &  proxyAddress
                              End If   'Ends loop for X400 address

                strResult = strResult & VbCrlf &  "#Object does not have proxy addresses"
            End If
                strResult = strResult &  VbCrLf


'Begin second query for users
varDisabledCounter = 0                 

'Execute search command to look for user
    objCommand.CommandText = _
      "<" & strADPath & ">" & ";(&(objectClass=user)(mail=*))" & ";distinguishedName,displayName,mail,proxyAddresses;subtree"

    'Execute search to get Recordset
    Set objRecordSet = objCommand.Execute
    strResult = strResult & vbCrlf &  "#Users"
    strResult = strResult & VbCrlf &  "#Total Records Found (users): " & objRecordSet.RecordCount & VbCrlf

       While Not objRecordSet.EOF 'Iterate through the search results
            strUserDN = objRecordSet.Fields("distinguishedName")     'Get User's distinguished name from Recordset into a string
            set objUser= GetObject("LDAP://"& strUserDN & "")         'Use string to bind to user object
            If objUser.AccountDisabled = TRUE Then                    'If User account disabled, then skip proxy address enum
               varDisabledCounter = varDisabledCounter + 1
               strResult2 = strResult2 & VbCrLf & varDisabledCounter & " " & objUser.displayName & VbCrLf
               strResult2 = strResult2 & "cn: " & objUser.cn
                       strResult2 = strResult2 & VbCrlf &  "mail: " & objUser.mail
                       arrProxyAddresses = objRecordSet.Fields("proxyAddresses")
                       If IsArray(objRecordSet.Fields("proxyAddresses")) Then
                       strResult2 = strResult2 & VbCrLf & "Proxy Addresses"
                          For Each ProxyAddress in arrProxyAddresses
                            'Sub: Check X400
                             If InStr(ProxyAddress, strX400Search) <> 0 Then
                                'Wscript.Echo "#This was an x400"
                                 strResult2 = strResult2 & VbCrlf &  proxyAddress
                                 AddressCount = AddressCount + 1
                              End If   'Ends loop for X400 address
                                  strResult2 = strResult2 & VbCrLf &  "#Object does not have proxy addresses"
                          End If
                              strResult2 = strResult2 &  VbCrLf

                       strResult = strResult & VbCrlf &  "cn: " & objUser.cn
                       strResult = strResult & VbCrlf &  "mail: " & objUser.mail
                       arrProxyAddresses = objRecordSet.Fields("proxyAddresses")
                       If IsArray(objRecordSet.Fields("proxyAddresses")) Then
                       strResult = strResult & VbCrLf & "Proxy Addresses"
                          For Each ProxyAddress in arrProxyAddresses
                            'Sub: Check X400
                             If InStr(ProxyAddress, strX400Search) <> 0 Then
                                'Wscript.Echo "#This was an x400"
                                 strResult = strResult & VbCrlf &  proxyAddress
                                 AddressCount = AddressCount + 1
                              End If   'Ends loop for X400 address
                                  strResult = strResult & VbCrLf &  "#Object does not have proxy addresses"
                          End If
                              strResult = strResult &  VbCrLf
          End If   'End check for disabled user
Wend  'End second query for users

strResult = "Users, Groups & Contacts" & VbCrLf & "-------------------------" & VbCrLf & strResult
strResult = strResult & VbCrLf & "Disabled Users" & VbCrLf & "-------------------------" & VbCrLf & strResult2
WScript.Echo strResult

'Output to a text file
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
Set objOutputFile = objFileSystem.CreateTextFile("C:\proxyaddresses.txt")
objOutputFile.Write strResult

Exchange 2010 451 5.7.3 Cannot achieve Exchange Server authentication


exchange 2010





Click on messages tab. Highlight a message and check last error. Observe this message

451 4.4.0 Primary target IP address responded with: "451 5.7.3 Cannot achieve Exchange Server authentication."


Make sure that Exchange Authentication is enabled, and that in the receive connector, you configure the connector to identify itself in response to HELO or EHLO using either the internal FQDN or NetBIOS name.

  1. Server Configuration
  2. Hub Transport
  3. Receive Connectors
  4. Ensure that Exchange Server authentication is enabled.
  5. Rinse and repeat if necessary.

Exchange sertificate

Публикация Exchange 2010 – “сертификация”


SummaryДоступ к сервисам почтового сервера в локальной сети – это одно, а вот доступ из сети Интернет должен быть хорошо защищен, так что без HTTPS тут никуда! Если речь заходит о безопасном подключении через HTTPS, то на ум сразу приходит вопрос обеспечения этого соединения сертификатом безопасности, а соответственно и задача этот сертификат где-то получить.

У Exchange 2010 уже есть свой собственный (самоподписанный) сертификат, который по умолчанию используется для предоставления локального доступа к Outlook 2010, OWA и т.п.. В нашем случае такой сертификат не подойдет и мы озадачимся выдачей сертификата безопасности серверу Exchange 2010 из локального центра сертификации (вопросы приобретения и установки коммерческих сертификатов рассматривать не будем). Для того чтобы выдать сертификат серверу, нам необходимо в локальной сети иметь как минимум одни Центр сертификации (ЦС). Для этого на любом сервере под управлением Windows Server 2008 R2 нужно установить роль Службы сертификации Active Directory и добавить компоненты Центр сертификации и Служба регистрации в центре сертификации через Интернет (для получения сертификатов через веб-браузер).
Рис.1: Установка служб сертификации Active Directory.

В данном сценарии, доступ к сервисам Exchange будет происходить как из локальной сети предприятия, так и из сети Интернет, соответственно клиенты будут использовать как минимум 2 FQDN имени для подключения. Дело в том, что сертификаты по умолчанию могут быть привязаны только к одному FQDN-имени. Для включения в сертификат нескольких имен узлов необходимо в центре сертификации активировать функцию SAN. Subject Alternative Name – это специальное поле в сертификате, которое содержит набор имен узлов. Exchange 2010, при генерации запроса на сертификат, сам добавляет в него несколько имен узлов, но без включенной функции SAN, центр сертификации попросту проигнорирует все лишние имена и оставит только одно.

Для включения функции SAN, на сервере с корневым центром сертификации необходимо выполнить команду:

certutil -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2
и перезапустить сам ЦС:
net stop certsvc
net start certsvc

В результате в сертификатах этого ЦС появится ещё одно поле (см.рис.):

Закончив настройки ЦС можно перемещаться на сервер Exchange, здесь в разделе Конфигурация серверов давайте выберем наш сервер клиентского доступа (CAS), и создадим запрос на получения нового сертификата при помощи действия New Exchange Certificate… (это можно сделать и через EMS при помощи командлета New-ExchangeCertifate). Введем понятное имя сертификата и на странице и на странице Exchange Configuration внимательно заполним FQDN имена узлов для необходимых нам сервисов.
Рис.2: Конфигурирование доменных имен для сертификата.

В результате мастер предложит вам список доменных имен, которые будут включены в сертификат. Если бы мы не включили функцию SAN в нашем центре сертификации, то в этом случае сертификат был бы привязан только к доменному имени указанному как Set as common name.
Рис.3: Конфигурирование списка доменных имен.

На следующем шаге мастера необходимо заполнить информацию о вашей организации и сохранить запрос в файл с расширением *.req.

После формирования запроса его нужно будет подтвердить в ЦС. Для этого откроем веб-страничку нашего ЦС по адресу http://YourCA/certsrv и нажмем кнопку Запрос сертификатаРасширенный запросВыдать запрос используя Base-64 шифрованный файл….
Рис.4: Расширенный запрос сертификата.

Затем нужно открыть фал с сохраненным запросом (*.req) например Блокнотом, скопировать его содержание в поле Сохраненный запрос, выбрать шаблон сертификата – Веб-сервер и нажать кнопку Выдать.
Рис.5: Генерация сертификата для Exchange.

Теперь возвращаемся в консоль управления Exchange, выбираем новый сертификат и подтверждаем его действием Complete Pending Request
Рис.6: Подтверждение сертификата.

Если все сделано правильно, то в значок сертификата будет помечен белой галочкой на голубом фоне, и мы сможем приступить к следующему шагу.

Примечание: Если сертификат принят не был, то стоит проверить есть ли у сервера доверие к выдавшему его центру сертификации, для этого нужно открыть MMC, добавить оснастку Сертификаты – Локальный компьютер и посмотреть в раздел Trusted Root Certification Authorities, там должен быть сертификат корневого ЦС, если его там нет, то его нужно запросить со странички http://YourCA/certsrv - запрос сертификата ЦС и импортировать.

После успешного подтверждения сертификата, необходимо ему назначить нужные сервисы, для этого нажмем на нем правой кнопкой мыши – Assign Services to Certificate… и выберем необходимые сервисы, включая IIS.
Рис.7: Присвоение сертификату необходимых служб.

В результате в службе IIS у сайта по умолчанию (Default Web Site) должен измениться SLL сертификат для https, проверить это можно выбрав действие Привязки (Bindings).
Рис.8: SSL сертификат для https.

Теперь нужно установить сертификат вашего ЦС на всех клиентов в Trusted Root Certification Authorities и можно пользоваться безопасным HTTPS соединением.

Импорт/экспорт сертификатов

Для того, чтобы клиенты и серверы (например, ISA/TMG) могли принимать сертификат Exchange`a и пользоваться им, нужно выполнить 2 условия:

  1. Обеспечить клиентов доверием к этому сертификату;
  2. Обеспечить серверы самим сертификатом.

Что касается клиентов, то в случае рабочих станций, находящихся в домене, сервер ЦС сам позаботится о том, чтобы доменные пользователи ему доверяли, и установит свой сертификат к ним в Trusted Root Certification Authorities. Если же у вас есть не доменные пользователи или вам необходимо обеспечить клиентов другим сертификатом, то для этого нужно выполнить операцию экспорта/импорта.
Если вам нужен сертификат самого ЦС, то проще всего его запросить через веб-браузер по адресу http://YourCA/certsrv - Загрузка сертификатов ЦС, цепочки сертификатов или CRL.
Рис.9: Запрос сертификата ЦС.

Скачав сертификат на локальный компьютер его можно импортировать на клиентов при помощи групповой политики (для доменных пользователей) - Computer Configuration\Policies\Windows Settings\Security Settings\Public Key Policies\Trusted Root Certificate Authorities
Рис.10: Назначение корневых сертификатов при помощи GPO.

Или вручную при помощи оснастки MMC – Certificates. Запускаем MMC от имени администратора – File – Add/Remove Snap-is – Certificates – Computer AccountLocal Computer – выбираем нужный раздел и нажимаем Импорт.
Рис.11: Импорт сертификата через MMC.

Также сертификат можно установить нажав на файле правой кнопкой мыши – Установить сертификат (Install Certificate) и поместить его в необходимый контейнер:
Рис.12: Установка сертификата в выбранный контейнер.

Что касается экспорта, то Личные (Personal) сертификаты выгружаются с приватным ключом
Рис.13: Выгрузка сертификата с приватным ключом.

И при выгрузке надо указать, что экспорт необходимо осуществить со всеми дополнительными параметрами:
Рис.14: Выгрузка с дополнительными параметрами.

Далее необходимо указать пароль на файл и сохранить файл с расширением *.pfx на локальный компьютер.
Корневые сертификаты выгружаются проще, здесь нужно указать формат DER encoded binary X.509 (.CER) и сохранить сертификат в файл с расширением *.cer.
Рис.15: Выгрузка корневых сертификатов в файл *.cer

Затем скопировать полученные файлы на нужный сервер/компьютер и импортировать их.
Что касается клиентских ПК, то им необходим только сертификат корневого ЦС, для того, чтобы доверять всем другим сертификатам, выданным этим ЦС. Для серверов (TMG/ISA) плюсом к корневому сертификату нужно импортировать сертификат Exchange`a, для того, чтобы он мог использоваться на прослушивателе (Listener`e).


На этом тему выдачи сертификата мы закончим. В следующей статье поговорим про публикацию самих сервисов Exchange 2010 в сеть Интернет.

Данная статья является частью цикла “Публикация сервисов Exchange 2010 через TMG”, скачать все целиком вы можете в виде PDF файла – здесь, или посмотреть веб-каст на эту тему на портале TechDays по адресу - http://www.techdays.ru/videos/2814.html


Managing Standby Continuous Replication
Managing Standby Continuous Replication

Disable-StorageGroupCopy -Identity <NameofStorageGroup> -StandbyMachine <NameofSCRTargetMachine>

Exchange 2007 дать права на все ящики
Get-Mailbox -ResultSize Unlimited | Add-MailboxPermission -User firma\user -AccessRights FullAccess

Средство уменьшения размера файлов PST и OST,

Средство уменьшения размера файлов PST и OST, превышающего допустимое значение


Чтобы восстановить данные, выполните следующие действия.
  1. Загрузите средство восстановления из центра загрузки Майкрософт:
    http://www.microsoft.com/downloads/release.asp?ReleaseID=44353&area=search&ordinal=1 (http://www.microsoft.com/downloads/release.asp?ReleaseID=44353&area=search&ordinal=1)
  2. Запустите программу 2gb152.exe и извлеките файлы в пустую папку. В результате должны быть представлены следующие пять файлов:
    • Msstdfmt.dll
    • Msvbvm60.dll
    • Pst2gb.exe
    • Readme.rtf
    • Readme.txt
  3. Запустите программу Pst2gb.exe.
  4. Чтобы выбрать файл PST, размер которого превышает допустимое значение, нажмите Обзор, а затем нажмите Открыть.
  5. Нажмите кнопку Создать, выберите имя и расположение для сокращенного файла, который требуется создать, а затем нажмите Сохранить.
  6. Введите значение для объема данных, который необходимо удалить из файла PST. Не существует единственного правильного значения. Наилучшие результаты могут быть получены со значениями от 20 до 25 МБ, но может возникнуть необходимость удалить больший или меньший объем данных. Например, если процесс правильно работает при уменьшении размера файла на 25 МБ, повторите процесс и уменьшите размер исходного файла PST только на 15 МБ. При успешном исходе попробуйте уменьшить размер исходного файла на 5 МБ. А в случае, если уменьшение размера файла на 25 МБ не привело к успешному результату, повторите процесс и уменьшите исходный файл PST на 35 МБ. При неуспешном исходе увеличивайте объем удаляемых данных до успешного завершения процесса.
  7. Запустите средство восстановления папки «Входящие» (Scanpst.exe) для сокращенного файла PST.
  8. Откройте восстановленный файл PST с помощью Outlook.
  9. После открытия файла щелкните правой кнопкой мыши корневую папку PST файла, нажмите кнопку Свойства, и чтобы выполнить сжатие, нажмите кнопку Сжать. (Этот шаг рекомендуется для выполнения, но не является обязательным.) Для сжатия файла такого размера потребуется около 4-8 часов.
  10. Если файл не удалось открыть, удалите сокращенный файл PST и повторите процесс для исходного файла PST. На этот раз удалите больше данных, чем при первой попытке, и снова повторите процесс.

Кэш набранных адресов в Outlook
хранится здесь:
%system_drive%\Documents and Settings\%user name%\Application Data\Microsoft\Outlook\%user name%.nk2

убрать/поставит эту настройку можно здесь:
outlook: tools -> options -> preferences -> e-mail options -> advanced e-mail options -> Suggest names while completing To, Cc, and Bcc fields

Для просмотра и редактирования кеша есть утилита nk2view

Exchange 2007 ошибка при попытке перенести ящик
Сегодня захотел перенести ящик в другую базу и получил ошибку:
Назначен неверный сервер службы обновления получателей
Служба сервера списка адресов Exchange не отвечает. Это может быть вызвано ошибкой в списке адресов или настройке политики адресов электронной почты.

Причина 1

Объект CN=Public Folders отсутствует в разделе CN=All Address Lists службы каталогов Active Directory.

До этого, для красоты, переименовал
All Contacts
All Groups
Public Folders
в русские аналоги.

решение - вновь оставить эти списки на английском языке и перезагрузить сервер.

Список членов группы рассыла
Get-DistributionGroupMember –identity “group name” | ft name, primarysmtpaddress | Export-CSV c:\members.csv


Exchange server 2007 общие папки
Сегодня, при создании общей папки столкнулся с 2 проблемками:
1. Для включения почтовой поддержки, нужно щелкать в консоли управления орбщими папками свойства не самой папки, а ее корень выше
2. При отправки на адрес общей папки получил сообщение
Решилось установкой прав

Get-PublicFolderClientPermission "\Общая папка 1" -User Anonymous | format-list

Add-PublicFolderClientPermission "\
Общая папка 1" -AccessRights CreateItems -User Anonymous

Remove-PublicFolderClientPermission "\
Общая папка 1"-AccessRights ReadItems -User Anonymous


Генерация нового сертификата Exchange
Event Type:    Warning
Event Source:    MSExchangeTransport
Event Category:    TransportService
Event ID:    12018
Date:        06.07.2010
Time:        23:49:54
User:        N/A
Computer:    exchange
The STARTTLS certificate will expire soon: subject: exchange.MSK.XXX.CORP, hours remaining: E8EB805CBF402C2AC0F8C1E7CD0DCFC8345FFB93. Run the New-ExchangeCertificate cmdlet to create a new certificate.

Просмотр существующих:
Get-ExchangeCertificate | FL ThumbPrint, isSelfSigned, NotBefore, NotAfter, Services

Генерация нового

Get-ExchangeCertificate -Thumbprint E8EB805CBF402C2AC0F8C1W7CD0DCFC8345FF993| New-ExchangeCertificate


Уровень диагностики при сбоях Exchange Server 2007
При возникновении ошибок, аля
OALGen skipped some entries in the offline address list '\Global Address List'. To see which entries are affected, event logging for the OAL Generator must be set to at least medium. 

Нужно повысить уровень диагностики командой
Set-EventLogLevel -Identity "MSExchangeSA\OAL Generator" -Level medium

Обновить OAB
Update-OfflineAddressBook –Identity “Default Offline Address List”

Вывести из эвентлога все события по заданному условию
Get-EventLog Application | Where {$_.Category -eq "OAL Generator"} > c:\oabevents.txt
Get-EventLog Application | Where {$_.Category -eq "OAL Generator"} | ft -Wrap > c:\oabevents.txt 

Исправление репликации Exchange Server 2007
Недавно на сервере Exchange сломалась репликация:

В логах:

Event Source:   MSExchangeRepl

Event Category:               Service

Event ID:             2095

Log file .log in could not be replayed. Re-seeding the passive node is now required. Use the Update-StorageGroupCopy cmdlet in the Exchange Management Shell to perform a re-seed operation.


Event Source:   ESE

Event ID:             412

Event category:               Logging/Recovery

Microsoft.Exchange.Cluster.ReplayService (2852) Recovery : Unable to read the header of logfile .log. Error -546.


Посмотреть состояние:
get-storagegroupcopystatus -identity "bgfmskvwex2\*" -StandbyMachine bgfmskvwex1
get-storagegroupcopystatus -identity "bgfmskvwex2\SGrp4" -StandbyMachine bgfmskvwex1

Suspend-storageGroupCopy -identity bgfmskvwex2\SGrp4 -standbymachine bgfmskvwex1
Если будет ошибка о неконсистенции, не обращать внимания, все равно репликация будет пересоздана

Проверить, уснул ли:
get-storagegroupcopystatus -identity "bgfmskvwex2\SGrp4" -StandbyMachine bgfmskvwex1

Удалить копию зла
Update-StorageGroupCopy -identity "bgfmskvwex2\SGrp4" -standbymachine bgfmskvwex1 -deleteexistingfiles
Разбудить репликацию
Resume-StorageGroupCopy -identity "bgfmskvwex2\SGrp4" -standbymachine bgfmskvwex1 -deleteexistingfiles

Еще один вариант, но я не пробовал:

would try a manual reseed to take the log files completely out of the picture on both sides.

1. Dismount the mailbox (active side)
2. Right-click the SG and choose to suspend replication
3. On the active side, copy the logs and chk and jsr files to a backup folder
4. On the passive side, move the logs, chk, jsr and database file to a backup folder
5. Copy the database from the active side to the passive side
6. Mount the mailbox store on the active side
7. Then right-click the SG and choose resume

This will ensure the databases are up to date, and that there are no existing log files causing any problems.

These steps were taken from the below technet article, however, you have to combine some of the steps between the different methods to use the EMC and remove the log files:

Exchange 2007 бесплатная утилита по управлению сертификатами
Certificate Manager for Exchange 2007

Certificate Manager for Exchange 2007 Box

Exchange 2007 enables SSL within IIS by default. Using PowerShell commands, certificate creation and management is quite confusing and often results with incorrect results due to the nature of the syntax. U-BTech Solutions is providing Certificate Manager for Exchange Server 2007 freely, to ease the process with a simple, easy to use GUI which enables you to:

1) Manage your current server certificates.
2) Enable certificates for Exchange 2007 Services (POP, IMAP, SMTP, IIS, UM).
3) Generate an Exchange 2007 Certificate Signing Request and process the Certificate Authority answer.
4) Generate an Exchange 2007 Self-Signed certificate (not for production use).
5) Easily include additional subject names in a single certificate.
6) Import & Export ability for existing certificates.

To read more about Certificate Use in Exchange 2007 at Microsoft TechNet follow the link:


Certificate Manager for Exchange Server 2007 is currently offered by U-BTech Solutions free of charge, enjoy!


icon_brown Free Download for Certificate Manager for Exchange 2007


Certificate Manager for Exchange Server 2007 Flash Demonstration Play

This short demonstration will show you how to use our Certificate Manager to create a CSR & then enabling the certificate for Exchange 2007.


Certificate Manager for Exchange Server 2007 Screen Shots

These are a few screen shots of the functions available while using Certificate Manager for Exchange Server 2007.

The main menu of Certificate Manager for Exchange Server 2007 displays the servers current certificates :


Viewing details about a selected certificate includes all the important attributes:


Creating your certificate is a snap, here's the wizard easy steps:

certificate-manager-csr-wizard1 certificate-manager-csr-wizard2 certificate-manager-csr-wizard3

Importing the Certificate Authority Answer or a PFX file while enabling Exchange Server 2007 services is just a click away:


Скачать можно отсюда:

Расчет снижения стоимости владения Exchange 2003\2007\2010

U-BTech Exchange 2010 ROI Tool

Утилита от U-BTech’s покажет снижение стоимости владения при использовании различных версий Exchange 
В настройках есть возможность указать стоимость 1Gb памяти, количество серверов, число лицензий и т.д.

Скачать: U-BTech’s Exchange 2010 ROI Tool


Exchange 2003

Exchange 2007

Exchange 2010


Number of Required Servers

1 Server
+ 1 Server (Cluster)

1 Server
+ 1 Server (DRP)
+ 1 Server + 2 (Cluster)

1 Server
+ 1 Server (DRP)
+ 1 Server (Cluster)

Memory Cost




Required Servers * 4(GB) * Cost Per 1GB, +5MB Recommended Per Mailbox for Exchange 2007 & 2010

Server Hardware Cost

3Т 900,00$

4Т 200,00$

4Т 200,00$

Server Costs Include Memory Costs

Required Storage

1Т 725,00 GB

5Т 175,00 GB

5Т 175,00 GB

Mailbox Size x Number of Mailboxes x 3 (DRP and Cluster)
Exchange 2003 Does Not Support Cluster or DRP

Storage Cost

6Т 037,50$

4Т 312,50$

1Т 725,00$

Required Storage x Cost 1GB Storage
Exchange 2003 - Supports Regular Storage Only
Exchange 2007 - Supports SCSI Storage
Exchange 2010 - Supports SATA Storage

Client License Cost

37Т 375,00$

37Т 375,00$

37Т 375,00$

Cluster Hardware Cost

3Т 900,00$

Single Database Copy

16Т 312,50$

8Т 512,50$

Cluster Requires Doubling the Number of Required Servers (+2 for Exchange 2007)

NOTE: Exchange 2003 Supports Only 1 Database Instance (Single Point of Failure)

Costs for Windows Server Enterprise Licenses

5Т 600,00$

11Т 200,00$

5Т 600,00$

Windows Server Enterprice License is Required for Each Server in Cluster

Costs for Microsoft Exchange Enterprise Licenses

7Т 000,00$

14Т 000,00$

7Т 000,00$

Microsoft Exchange Server Enterprice License is Required for Each Server in Cluster

Disaster Recovery Site Costs

Not Supported

8Т 512,50$

5Т 925,00$

Doubles the Server Hardware and Storage Costs

NOTE: Exchange 2003 Does NOT Support DRP

Mailbox Archive

Supported by third party only.
Estimated price: 29Т 325,00$
50$ per mailbox + Storage costs

Supported by third party only.
Estimated price: 29Т 325,00$
50$ per mailbox + Storage costs



93Т 137,50$

125Т 237,50$

68Т 325,00$

* Exchange 2003 Does Not Support DRP

* Exchange 2003 Supports Only 1 Database Instance (Single Point of Failure)

Microsoft Cloud Mailbox Pricing (Remote Hosting Services)


Number of Mailboxes

Cost Per Mailbox

Total Cost

One Month



2Т 875,00$

36 Months



103Т 500,00$

* CAL Costs Are Included In Total Cost



Exchange server много спама
Проверьте свой сервер на openrelay, для начала
Отключение режима открытого ретранслятора и очистка очередей SMTP сервера Exchange Server
Предотвращение нежелательных коммерческих сообщений в Exchange
How can I configure Exchange Server 2003 to block spam?
Устранение неисправностей, связанных с ретрансляцией почты в Exchange Server 2003 и Exchange 2000 Server
установите пробные антиспам-решения, например
Open Relay Filter
GFI MailEssentials
Также установите на Exchange sp2
И фикс
Зайдите на windowsupdate и обновите саму windows
Или установите в качестве пограничного сервера linux сервер, например exim+spamassin+clamav


You are viewing admin_dm