在工作中,我们有简短的login名,例如hastingsg
,但Outlook和我相信Windows系统的其他部分也可以使用更长的名字,例如Jeff Hastings。
在cpython(不是IronPython)中,如果我有更短的login名,我怎样才能得到更长的全名? 我有pywin32和ExchangeCDO安装。
通过pywin32
的COM部分,您需要获得Outlook的Application对象,并从中获得其属性Session
,从而为您提供Namespace对象( GetNamespace
方法也应该为相同的目的工作,只用唯一支持的参数值调用'MAPI'
)。 从那里你可以使用Accounts
属性来获取Accounts对象,这是一个典型的COM集合 – 可以通过Item
直到它的Count
来索引。 您可以遍历它并检查每个Account对象:每个Account对象都有两个感兴趣的属性 – 一个UserName
(您希望检查与“较短的登录名”相等的字符串)和一个DisplayName
(您希望的字符串)。
是的,这是令人难以置信的漫长和令人费解的,但是,这是MS应用程序提供的COM接口的过程。 对于我所知道的,在最近的Outlook版本中可能会有一些比较简单的方法 – 这是长期以来一直工作很久的一种方式(现在我甚至没有Windows安装手册来检查这一点并编写Python为你…!-)
我认为你可以用专用的模块来查询你的Exchange server Active Directory
(未测试):
import active_directory user = active_directory.find_user("hastingsg") print user.displayName
可能是你需要TranslateName api例如玩这样的事情,2ns / 3参数可以是常量从http://msdn.microsoft.com/en-us/library/ms724268(VS.85).aspx
win32security.TranslateName(win32api.GetUserName(), win32api.NameUnknown, win32api.NameDisplay)
要么
win32net.NetUseGetInfo(win32api.GetComputerName(),win32api.GetUserName())