通过批处理脚本需要Microsoft Outlook / Exchange邮箱版本

时间:2016-03-03 22:09:45

标签: batch-file outlook registry exchange-server

是否有任何方法可以判断用户的Outlook客户端邮箱是否位于具有以下要求的Exchange 2010邮箱或Exchange 2013邮箱中:

  • 我需要能够从客户端通过 注册表项或本地计算机上的文件告诉我它是Exchange 2010或2013客户端 即可。
  • 不使用PowerShell。我希望能够找到差异并使用批处理脚本向管理员注意哪些用户位于Exchange 2010邮箱中以及哪些用户位于Exchange 2013邮箱中。

我问的原因是该公司正在将邮箱从Exchange 2010迁移到Exchange 2013.我只能访问本地计算机。我想用批处理脚本编写报告。查找由Exchange 2010/2013客户端创建的注册表项或特定文件似乎是我最可行的选择。

1 个答案:

答案 0 :(得分:1)

Exchange服务器存储的版本数据确实存储在配置文件中每个存储的配置文件数据部分中,其二进制值名为" 0102663b"在

HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Profiles\<profile name>\4cd3558f0de14d49a9023eb7f6002752

那里&#34; 15.0&#34;是Outlook版本,&#34;&lt;个人资料名称&gt;&#34;是个人资料的名称,&#34; 4cd3558f0de14d49a9023eb7f6002752&#34;是配置文件部分guid(它是动态生成的,并且在不同的机器和配置文件上会有所不同)和&#34; 0102663b&#34;对应于标记为0x663B0102的MAPI属性。

至于解析值(例如0f 00 00 00 6a 04 a5 0f),它是一个8字节的int,版本的每个部分编码为2字节int。在你的情况下,它是(0x0F,0x0,0x046A,0x0FA5)=(15,0,1130,4005)。

Microsoft建议不要直接访问配置文件数据,因为该位置会根据Outlook版本进行更改。

如果使用Redemption是一个选项,它会在RDOExchangeMailboxStore对象上公开ServerVersion属性。以下脚本将在当前配置文件中打印所有Exchange邮箱的版本(假定Application对象指向Outlook.Application对象的实例):

  skPrimaryExchangeMailbox = 3
  skDelegateExchangeMailbox = 4
  set Session = CreateObject("Redemption.RDOSession")
  Session.MAPIOBJECT = Application.Session.MAPIOBJECT
  for each Store in Session.Stores
    If (Store.StoreKind = skPrimaryExchangeMailbox) or (Store.StoreKind = skDelegateExchangeMailbox) Then
      Debug.Print Store.ServerVersion & " - " & Store.Name
    End If
  next