В Windows на python, возможно, с использованием Outlook API, как я могу получить полное имя пользователя из его меньшего имени для входа? - PullRequest
1 голос
/ 12 ноября 2009

На работе у нас короткие имена для входа, например hastingsg, но Outlook и я полагаем, что другие части системы Windows также имеют доступ к более длинному имени, например, Джефф Гастингс.

В cpython (не IronPython), если у меня более короткое имя входа, как я могу получить более длинное полное имя? У меня установлены pywin32 и ExchangeCDO .

Ответы [ 3 ]

2 голосов
/ 12 ноября 2009

Через COM-части pywin32 вам нужно получить объект приложения Outlook и получить от него его атрибут Session, который дает вам объект Пространство имен (метод GetNamespace также должен работать для той же цели, когда вызывается с единственным поддерживаемым значением аргумента, 'MAPI'). Оттуда вы можете использовать свойство Accounts, чтобы получить объект Accounts , который является типичной коллекцией COM - индексируется через Item вплоть до Count. Вы зацикливаетесь на нем и проверяете каждый объект Account : у каждого есть два интересующих свойства - a UserName (строка, которую вы хотите проверить на равенство с «более коротким именем входа») и DisplayName - Строка, которую вы хотите.

Да, это невероятно долго и запутанно, но это нормально для COM-интерфейсов, предлагаемых MS-приложениями. Насколько я знаю, в последних выпусках Outlook может быть более гибкий путь - это долгий и изнурительный способ, который работает долгое время (в настоящее время у меня даже нет удобной установки Windows, чтобы проверить это и написать Python для тебя ...! -)

1 голос
/ 12 ноября 2009

Я думаю, что вы можете запросить свой Exchange Server Active Directory с выделенным модулем

(не тестировалось):

import active_directory
user = active_directory.find_user("hastingsg")
print user.displayName
0 голосов
/ 12 ноября 2009

Может быть, вам нужен TranslateName api, например. играть с чем-то вроде этого, 2ns / 3rd аргумент может быть константами от 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())
...