2009-11-12 3 views
1

Au travail, nous avons des noms de connexion courts, par ex. hastingsg, mais Outlook et je crois que d'autres parties du système Windows ont également accès à un nom plus long, par exemple. Jeff Hastings.Sur Windows en python, éventuellement en utilisant l'API Outlook, comment puis-je obtenir le nom complet d'un utilisateur à partir de son nom de connexion plus petit?

En cpython (pas IronPython), si j'ai le nom de connexion le plus court, comment puis-je obtenir le nom complet le plus long? J'ai pywin32 et ExchangeCDO installé.

Répondre

1

Je pense que vous pouvez interroger votre Active Exchange Server Directory avec un dedicated module

(non testé):

import active_directory 
user = active_directory.find_user("hastingsg") 
print user.displayName 
+0

Cela m'a donné un résultat de « hastingsg » encore une fois, mais quand je regarde les autres propriétés, l'utilisateur .geco m'a donné quelque chose comme ce que je veux. Merci! –

+0

fyi ... user.geco pourrait être un paramètre d'entreprise qui est unique à ma configuration. –

+0

ooops. il était user.gecos pas user.geco –

2

Via les parties COM de pywin32, vous devez obtenir l'objet Application d'Outlook et de c'est son attribut Session, qui vous donne l'objet Namespace (la méthode GetNamespace devrait également fonctionner dans le même but, lorsqu'elle est appelée avec la seule valeur d'argument supportée, 'MAPI'). De là, vous pouvez utiliser la propriété Accounts pour obtenir l'objet Accounts, qui est une collection COM typique - indexable via Item jusqu'à ses Count. Vous bouclez dessus et vérifiez chaque objet Account: chacun a deux propriétés d'intérêt - un UserName (la chaîne que vous voulez vérifier pour l'égalité au "nom de connexion plus court") et un DisplayName - la chaîne que vous désirez.

Oui, c'est incroyablement long et alambiqué, mais c'est pareil pour le cours pour les interfaces COM que les applications MS offrent. Pour tout ce que je sais, il pourrait y avoir une façon plus légère dans les récentes versions d'Outlook - c'est la façon longue et glandée qui fonctionne depuis longtemps (ces jours, je n'ai même pas une installation Windows à portée de main pour écrire le Python pour vous ...! -)

0

Peut être vous avez besoin TranslateName api eg jouer avec quelque chose comme ça, 2ns/3ème argument peut être des constantes de http://msdn.microsoft.com/en-us/library/ms724268(VS.85).aspx

win32security.TranslateName(win32api.GetUserName(), win32api.NameUnknown, win32api.NameDisplay) 

ou

win32net.NetUseGetInfo(win32api.GetComputerName(),win32api.GetUserName()) 
+0

Le premier code renvoyait le nom d'utilisateur d'origine et le second était erroné avec: pywintypes.error: (2250, 'NetUseGetInfo', 'La connexion réseau était introuvable.') –

+0

en premier peut essayer différent 3ème argument par exemple voir http://msdn.microsoft.com/en-us/library/ms724268(VS.85).aspx –

Questions connexes