2016-04-18 26 views
0

Ich versuche, die freigegebenen Mailboxen eines Benutzers aufzulisten. Wir haben eine gemischte Umgebung, sodass einige automatisch über Exchange zugeordnet werden und einige nicht (Sicherheitsgruppenberechtigungen). Ich möchte ein Powershell-Skript zum Anmeldevorgang hinzufügen, um alle Postfächer aufzuzeichnen, die ein Benutzer in Outlook geladen hat. Ich möchte diese Liste in eine Textdatei oder CSV speichern.Alle Mailboxen auflisten, die ein Benutzer in Outlook geladen hat

Ich bin in der Lage, die Namen durch $outlook.getnamespace("mapi") zu bekommen. Einige Namen haben sich jedoch geändert, und das Outlook des Benutzers zeigt diese Änderungen nicht an, daher bedeutet dieser Name nichts, wenn er bei Exchange oder AD ausgelöst wird, funktioniert jedoch irgendwie immer noch magisch.

Ich brauche etwas konkreter, samaccountname oder SMTP-Adresse .. so etwas.

EDIT

Ich habe in diesem weiter arbeiten, und mit Hilfe von MFCMAPI Ich konnte ich die PR_USER_NAME Eigenschaft benötigen, um zu bestimmen. Ich muss dies mit Vanille Powershell tun, um auf einem Klientensystem zu laufen (und ich habe Tausende, also ist das Installieren von EMS keine Wahl).

Antwort

1

Verwendung Namespace.Stores Sammlung. MFCMAPI zeigt MAPI-Objekte an, auf die Sie in PS nicht zugreifen können. Verwenden Sie OutlookSpy (um MAPI- und OOM-Objekte anzuzeigen), um live Outlook Object Model Objekte anzuzeigen.

UPDATE: Wenn Redemption eine Option ist, können Sie RDOExchangeMailbox verwenden. Owner Eigenschaft:

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

Vielen Dank für mich wissen lassen, dass ich diese Informationen nicht bekommen kann, schätze die Hilfe. Das Problem ist, dass die Läden mir nicht zeigen, was ich brauche. Das einzige, was ich dort sehe, ist "DisplayName" .. und es ist der Anzeigename, der verwendet wird, wenn die geteilte Box hinzugefügt wurde, und nicht der jetzt. In vielen Fällen wird Displayname im Exchange- oder Active Directory nicht aufgelöst. – TetraFlash

+0

Wenn die Stores nicht zwischengespeichert werden, können Sie die PR_MAILBOX_OWNER_ENTRYID-Eigenschaft mit Store.PorpertyAccessor.GetProperty lesen, in hex konvertieren und zum Aufrufen von Namespace.GetAddressEntryFromId verwenden und dann die AddressEntry.GetExchangeuser(). PrimarySmtpAddress-Eigenschaft lesen. Sie können auch die ID des Geschäftseintrags lesen, sie analysieren, um die Adresse des EX-Typs zu extrahieren, eine ID des ID-Eintrags der ID aus der ID erstellen und anschließend Namespace.GetAddressEntryFromId aufrufen. Wenn die Verwendung von Redemption eine Option ist, können Sie die RDOExchangeMailbox.Owner-Eigenschaft verwenden (siehe die aktualisierte Antwort oben). –

+0

Leider ist die Rückzahlung keine Option. Also ging ich die Ladenstraße hinunter ... und wurde blockiert, als der Laden keine getproperty-Methode hatte ... vermisse ich hier etwas Einfaches? – TetraFlash