列出用户在Outlook中加载的所有邮箱

时间:2016-04-18 14:36:24

标签: powershell outlook-2010 mapi

我正在尝试列出用户的共享邮箱。我们有一个混合环境,因此有些是通过Exchange自动映射的,有些则不是(安全组权限)。我想在登录过程中添加一个Powershell脚本,以记录用户在Outlook中加载的所有邮箱。我想将此列表保存为文本文件或csv。

我可以通过$outlook.getnamespace("mapi")获取姓名。但是有些名称已经改变,并且用户的Outlook没有显示这些更改,所以这个名字在Exchange或AD上抛出时没有任何意义,但不知何故仍然神奇地起作用。

我需要一些更具体的,samaccountname或smtp地址......类似的东西。

修改

我继续为此工作,在MFCMAPI的帮助下,我能够确定我需要PR_USER_NAME属性。我需要使用vanilla Powershell在客户端系统上运行(我有数千个,所以安装EMS不是一个选项)。

1 个答案:

答案 0 :(得分:1)

使用Namespace.Stores集合。 MFCMAPI显示您无法在PS中访问的MAPI对象。要查看实时Outlook对象模型对象,请使用OutlookSpy(它显示MAPI和OOM对象)。

更新:如果使用Redemption是一个选项,您可以使用RDOExchangeMailboxOwner属性:

  skPstAnsi = 1
  skPstUnicode = 2
  skPrimaryExchangeMailbox = 3
  skDelegateExchangeMailbox = 4
  skPublicFolders = 5
  set Session = CreateObject("Redemption.RDOSession")
  Session.MAPIOBJECT = Application.Session.MAPIOBJECT
  for each Store in Session.Stores
    'for i = 1 to Session.Stores.Count
    'set Store = Session.Stores(i)
    Debug.Print Store.Name
    If (Store.StoreKind = skPrimaryExchangeMailbox) or (Store.StoreKind = skDelegateExchangeMailbox) Then
      Debug.Print Store.Owner.SmtpAddress
    End If
    Debug.Print " ------ "
  next