none
Как сделать учетку Exchange по умолчанию? RRS feed

  • Вопрос

  • Выбор учетной записи почты для использования по умолчанию:
    Если используются несколько учетных записей, может быть указана запись, используемая по умолчанию. В Microsoft Outlook сообщение отправляется с помощью учетной записи, используемой по умолчанию, если в сообщении не была нажата кнопка Учетные записи рядом с кнопкой Отправить для выбора другой учетной записи.
    В меню Сервис выберите команду Учетные записи электронной почты.
    Установите переключатель просмотреть или изменить имеющиеся учетные записи электронной почты и нажмите кнопку Далее.
    Выберите в списке нужную учетную запись и нажмите кнопку По умолчанию.



    Все это здорово, но не хочется обходить 500 машин и менять ручками. Как это автоматизировать? По умолчанию нужно поставить учетку Exchange
    • Перемещено Tina_Tian 19 марта 2012 г. 1:39 forum merge (От:Exchange Server 2003/2000/5.5)
    16 июля 2008 г. 8:07

Ответы

  • Эх, чего только ради ответа не сделаешь:

    Code Snippet

    Const HKEY_CURRENT_USER = &H80000001

    Set objRegistry = GetObject("winmgmts:root\default:StdRegProv")

    AccountsPath = "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676"
    AccountsOrder = "{ED475418-B0D6-11D2-8C3B-00104B2A6676}"
    Ret = objRegistry.EnumKey(HKEY_CURRENT_USER, AccountsPath, arrAccounts)

    If IsArray(arrAccounts) Then
     For Each Account In arrAccounts
      Ret = objRegistry.EnumValues(HKEY_CURRENT_USER, AccountsPath & "\" & Account, arrValueNames, arrValueTypes)
      For I = 0 To UBound(arrValueNames)
       If arrValueNames(I) = "Identity Eid" Then
        ExchangeAccount = Account
        Exit For
       End If
      Next
      If (ExchangeAccount) Then
       Exit For
      End If  
     Next
    Else
     Wscript.Quit
    End If

    ExchangeAccount = ConvertHEXStringToDWORD(ExchangeAccount)

    Ret = objRegistry.GetBinaryValue(HKEY_CURRENT_USER, AccountsPath, AccountsOrder, arrAccountsOrder)
    Index = GetDWORDValueIndexInBytesArray(arrAccountsOrder, ExchangeAccount)

    If (Index >= 1) Then
     Ret = SwapDWORDValuesInBytesArray(arrAccountsOrder, 0, Index)
     Ret = objRegistry.SetBinaryValue(HKEY_CURRENT_USER, AccountsPath, AccountsOrder, arrAccountsOrder)
    End If

     

    Function ConvertHEXStringToDWORD(HEXString)
     HEXString = UCase(HEXString)
     Zero = Asc("0")
     Nine = Asc("9")
     LetterA = Asc("A")
     LetterF = Asc("F")
     
     Value = 0
     Lenght = Len(HEXString)
     For I = 0 To 7
      ASCI = Asc(Mid(HEXString, Lenght - I, 1))
      If (ASCI >= Zero And ASCI <= Nine) Then
       ASCI = ASCI - Zero
      ElseIf (ASCI >= LetterA And ASCI <= LetterF) Then
        ASCI = ASCI - LetterA + 10
      Else
        ASCI = 0
      End If
      Value = Value + ASCI * 16 ^ I  
     Next
     
     ConvertHEXStringToDWORD = Value
    End Function

     

    Function GetDWORDValueIndexInBytesArray(arrBytes, DWORDValue)
     Byte0 = DWORDValue And &HFF
     Byte1 = DWORDValue / 256 And &HFF
     Byte2 = DWORDValue / 65536 And &HFF
     Byte3 = DWORDValue / 16777216 And &HFF

     ValuesAmount = (UBound(arrBytes) + 1) / 4
     For I = 0 To ValuesAmount - 1
      If ((arrBytes(I * 4) = Byte0) And _
      (arrBytes(I * 4 + 1) = Byte1) And _
      (arrBytes(I * 4 + 2) = Byte2) And _
      (arrBytes(I * 4 + 3) = Byte3)) Then
       GetDWORDValueIndexInBytesArray = I
       Exit Function
      End If
     Next
     
     GetDWORDValueIndexInBytesArray = -1
    End Function

     

    Function SwapDWORDValuesInBytesArray(arrBytes, Index1, Index2)
     Temp = arrBytes(Index1 * 4)
     arrBytes(Index1 * 4) = arrBytes(Index2 * 4)
     arrBytes(Index2 * 4) = Temp
     
     Temp = arrBytes(Index1 * 4 + 1)
     arrBytes(Index1 * 4 + 1) = arrBytes(Index2 * 4 + 1)
     arrBytes(Index2 * 4 + 1) = Temp
     
     Temp = arrBytes(Index1 * 4 + 2)
     arrBytes(Index1 * 4 + 2) = arrBytes(Index2 * 4 + 2)
     arrBytes(Index2 * 4 + 2) = Temp
     
     Temp = arrBytes(Index1 * 4 + 3)
     arrBytes(Index1 * 4 + 3) = arrBytes(Index2 * 4 + 3)
     arrBytes(Index2 * 4 + 3) = Temp
    End Function

     

    17 июля 2008 г. 6:26

Все ответы

  • А остальные учётные записи вам нужны?

    Как у вас учётка Exchange'а создавалась?

    16 июля 2008 г. 8:56
  •  Stаnky написано:

    А остальные учётные записи вам нужны?

    Как у вас учётка Exchange'а создавалась?



    Остальные нужны.Учетки создавались вашим же скриптом, но другим .prf файлом плюс из вашего скрипта удалил строчку с полным уничтожением всех профилей...
    Вобщем мне надо, чтоб Exchange использовался по умолчанию для отправки писем
    16 июля 2008 г. 9:38
  • К сожалению, сходу могу лишь предложить вариант с реестром:

    Code Snippet

    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676

     

    В этой вертке (у меня) есть значение (у меня {ED475418-B0D6-11D2-8C3B-00104B2A6676}), в котором перечисляется порядок учётных записей (на каждую по 4 байта). Собственно первая и есть по умолчанию.
    16 июля 2008 г. 10:18
  •  Stаnky написано:

    К сожалению, сходу могу лишь предложить вариант с реестром:

    Code Snippet

    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676

     

    В этой вертке (у меня) есть значение (у меня {ED475418-B0D6-11D2-8C3B-00104B2A6676}), в котором перечисляется порядок учётных записей (на каждую по 4 байта). Собственно первая и есть по умолчанию.


    У меня тоже самое... тут возникает проблема, ведь у каждого пользователя разное количество учеток. 0-3 примерно... Тоесть Exchange может стать как первым, так и 2-м, 3-м, 4-м. Плюс были учетки удаленные например. Вот на одном компе Exchange оказалась 11-ой...

    Еще варианты?

    Может есть скрипт, который может найти какая из учеток Exchange и поставить именно ее первой?
    16 июля 2008 г. 11:14
  •  Nilfgardec написано:
    Может есть скрипт, который может найти какая из учеток Exchange и поставить именно ее первой?
    Вот вам его и нужно написать. Считываете порядок учёток, находите среди них Exchange, ставите её первой, записываете в реестр.
    16 июля 2008 г. 11:24
  •  Stаnky написано:
     Nilfgardec написано:
    Может есть скрипт, который может найти какая из учеток Exchange и поставить именно ее первой?
    Вот вам его и нужно написать. Считываете порядок учёток, находите среди них Exchange, ставите её первой, записываете в реестр.


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

    Может есть второй путь через GP, там есть Административные шаблоны для Outlook... Вот там может можно как-то поставить учеткой по умолчанию Exchange?
    16 июля 2008 г. 11:40
  •  Nilfgardec написано:
    Если б я знал как писать скрипты - я бы не задавал предедущий вопрос...
    То есть вы предлагете написать вам готовый скрипт?

     Nilfgardec написано:
    Может есть второй путь через GP, там есть Административные шаблоны для Outlook...
    К сожалению, нет.

    16 июля 2008 г. 16:31
  • Эх, чего только ради ответа не сделаешь:

    Code Snippet

    Const HKEY_CURRENT_USER = &H80000001

    Set objRegistry = GetObject("winmgmts:root\default:StdRegProv")

    AccountsPath = "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676"
    AccountsOrder = "{ED475418-B0D6-11D2-8C3B-00104B2A6676}"
    Ret = objRegistry.EnumKey(HKEY_CURRENT_USER, AccountsPath, arrAccounts)

    If IsArray(arrAccounts) Then
     For Each Account In arrAccounts
      Ret = objRegistry.EnumValues(HKEY_CURRENT_USER, AccountsPath & "\" & Account, arrValueNames, arrValueTypes)
      For I = 0 To UBound(arrValueNames)
       If arrValueNames(I) = "Identity Eid" Then
        ExchangeAccount = Account
        Exit For
       End If
      Next
      If (ExchangeAccount) Then
       Exit For
      End If  
     Next
    Else
     Wscript.Quit
    End If

    ExchangeAccount = ConvertHEXStringToDWORD(ExchangeAccount)

    Ret = objRegistry.GetBinaryValue(HKEY_CURRENT_USER, AccountsPath, AccountsOrder, arrAccountsOrder)
    Index = GetDWORDValueIndexInBytesArray(arrAccountsOrder, ExchangeAccount)

    If (Index >= 1) Then
     Ret = SwapDWORDValuesInBytesArray(arrAccountsOrder, 0, Index)
     Ret = objRegistry.SetBinaryValue(HKEY_CURRENT_USER, AccountsPath, AccountsOrder, arrAccountsOrder)
    End If

     

    Function ConvertHEXStringToDWORD(HEXString)
     HEXString = UCase(HEXString)
     Zero = Asc("0")
     Nine = Asc("9")
     LetterA = Asc("A")
     LetterF = Asc("F")
     
     Value = 0
     Lenght = Len(HEXString)
     For I = 0 To 7
      ASCI = Asc(Mid(HEXString, Lenght - I, 1))
      If (ASCI >= Zero And ASCI <= Nine) Then
       ASCI = ASCI - Zero
      ElseIf (ASCI >= LetterA And ASCI <= LetterF) Then
        ASCI = ASCI - LetterA + 10
      Else
        ASCI = 0
      End If
      Value = Value + ASCI * 16 ^ I  
     Next
     
     ConvertHEXStringToDWORD = Value
    End Function

     

    Function GetDWORDValueIndexInBytesArray(arrBytes, DWORDValue)
     Byte0 = DWORDValue And &HFF
     Byte1 = DWORDValue / 256 And &HFF
     Byte2 = DWORDValue / 65536 And &HFF
     Byte3 = DWORDValue / 16777216 And &HFF

     ValuesAmount = (UBound(arrBytes) + 1) / 4
     For I = 0 To ValuesAmount - 1
      If ((arrBytes(I * 4) = Byte0) And _
      (arrBytes(I * 4 + 1) = Byte1) And _
      (arrBytes(I * 4 + 2) = Byte2) And _
      (arrBytes(I * 4 + 3) = Byte3)) Then
       GetDWORDValueIndexInBytesArray = I
       Exit Function
      End If
     Next
     
     GetDWORDValueIndexInBytesArray = -1
    End Function

     

    Function SwapDWORDValuesInBytesArray(arrBytes, Index1, Index2)
     Temp = arrBytes(Index1 * 4)
     arrBytes(Index1 * 4) = arrBytes(Index2 * 4)
     arrBytes(Index2 * 4) = Temp
     
     Temp = arrBytes(Index1 * 4 + 1)
     arrBytes(Index1 * 4 + 1) = arrBytes(Index2 * 4 + 1)
     arrBytes(Index2 * 4 + 1) = Temp
     
     Temp = arrBytes(Index1 * 4 + 2)
     arrBytes(Index1 * 4 + 2) = arrBytes(Index2 * 4 + 2)
     arrBytes(Index2 * 4 + 2) = Temp
     
     Temp = arrBytes(Index1 * 4 + 3)
     arrBytes(Index1 * 4 + 3) = arrBytes(Index2 * 4 + 3)
     arrBytes(Index2 * 4 + 3) = Temp
    End Function

     

    17 июля 2008 г. 6:26