2016-04-18 1 views
0

J'essaie de répertorier les boîtes aux lettres partagées d'un utilisateur. Nous avons un environnement mixte, certains sont mappés automatiquement via Exchange, d'autres non (autorisations de groupe de sécurité). Je souhaite ajouter un script Powershell au processus de connexion pour enregistrer toutes les boîtes aux lettres qu'un utilisateur a chargées dans Outlook. Je veux enregistrer cette liste dans un fichier texte ou csv.Liste de toutes les boîtes aux lettres qu'un utilisateur a chargées dans Outlook

Je suis en mesure d'obtenir les noms grâce à $outlook.getnamespace("mapi"). Cependant, certains noms ont changé et l'Outlook de l'utilisateur ne montre pas ces changements, donc ce nom ne veut rien dire lorsqu'il est lancé à Exchange ou AD, mais fonctionne toujours comme par magie.

J'ai besoin de quelque chose de plus concret, samaccountname ou adresse smtp .. quelque chose comme ça.

EDIT

J'ai continué à travailler à cela, et avec l'aide de MFCMAPI j'ai pu déterminer que je dois la propriété PR_USER_NAME. J'ai besoin de faire cela avec vanilla Powershell pour fonctionner sur un système client (et j'ai des milliers donc l'installation de EMS n'est pas une option).

Répondre

1

Utilisez la collection Namespace.Stores. MFCMAPI affiche les objets MAPI auxquels vous ne pouvez pas accéder dans PS. Pour voir les objets du modèle objet Outlook en direct, utilisez OutlookSpy (il affiche à la fois les objets MAPI et MOO).

MISE À JOUR: Si l'utilisation de Redemption est une option, vous pouvez utiliser RDOExchangeMailbox. Owner propriété:

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 
+0

Merci de me faire savoir que je ne peux pas obtenir cette information, d'apprécier l'aide. Le problème est que les magasins ne semblent pas me montrer ce dont j'ai besoin. La seule chose que je vois là-dedans est "DisplayName" .. et c'est le displayname utilisé quand la boîte partagée a été ajoutée, pas la maintenant. Ainsi, dans de nombreux cas, displayname ne se résout pas en échange ou en répertoire actif. – TetraFlash

+0

Si les magasins ne sont pas mis en cache, vous pouvez lire la propriété PR_MAILBOX_OWNER_ENTRYID en utilisant Store.PorpertyAccessor.GetProperty, le convertir en hex et l'utiliser pour appeler Namespace.GetAddressEntryFromId, puis lire la propriété AddressEntry.GetExchangeuser(). PrimarySmtpAddress. Vous pouvez également lire l'ID d'entrée de magasin, l'analyser pour extraire l'adresse de type EX, construire un ID d'entrée de liste d'adresses globale à partir de l'ID, puis appeler Namespace.GetAddressEntryFromId. Si l'utilisation de Redemption est une option, vous pouvez utiliser la propriété RDOExchangeMailbox.Owner (voir la réponse mise à jour ci-dessus). –

+0

Malheureusement, la rédemption n'est pas une option. Donc je suis descendu la rue du magasin .. et a été bloqué quand le magasin n'a pas eu une méthode getproperty ... est-ce que je manque quelque chose simple ici? – TetraFlash