Outlook какие файлы связаны pst - PullRequest
0 голосов
/ 18 марта 2020

Скажите, пожалуйста, как вы можете получить информацию из реестра, список подключенных PST-файлов на данный момент?

Пример: Outlook 2013 установлен, к нему подключен архив - archive.pst.

Из реестра я получаю прикрепленные архивы через Powershell следующим образом.

get-item HKCU:\software\Microsoft\Office\15.0\Outlook\Search | select -expandProperty property | where {$_ -match '.pst$'}

Отображается список когда-либо подключенных архивов:

C: \ users \ user \ Documents \ archive1.pst
C: \ users \ user \ Documents \ archive2.pst
C: \ users \ user \ Documents \ archive.pst

Но archive2.pst и archive1.pst сейчас не подключены, а подключен только archive.pst.

Если возможно, пример реализации желателен в C #.

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Решение в C # будет следующим. Это решение работало для меня.

using Outlook = Microsoft.Office.Interop.Outlook;

static int Main(string[] args)
{
Outlook.Application app = null;
Outlook.NameSpace ns = null;
Outlook.Store store = null;
Outlook.Stores stores = null;
app = new Outlook.Application();
ns = app.GetNamespace("MAPI");
stores = ns.Stores;
string storeList = string.Empty;
for (int i = 1; i <= stores.Count; i++)
{
store = stores[i];
    storeList += String.Format("{0} {2}",
        //store.DisplayName,
        store.FilePath,
        (store.IsDataFileStore ? ".pst" : ".ost"),
        Environment.NewLine);
    if (store != null)
        Marshal.ReleaseComObject(store);
}
   Console.WriteLine(storeList);
}
0 голосов
/ 18 марта 2020

Ниже приведены три подпрограммы Outlook VBA, которые демонстрируют три различных способа определения, какие хранилища (PST-файл - это тип хранилища) доступны из Outlook.

Извините, они не C#. В настоящее время у меня нет доступа к C#. Если память служит, после подключения к InterOp C# выглядит очень похоже на операторы VBA.

Sub ListStores1()

  Dim InxStoreCrnt As Integer
  Dim NS As NameSpace
  Dim StoresColl As Folders

  Set NS = Application.GetNamespace("MAPI")
  Set StoresColl = NS.Folders

  For InxStoreCrnt = 1 To StoresColl.Count
    Debug.Print StoresColl(InxStoreCrnt).Name
  Next

End Sub
Sub ListStores2()

 Dim StoresColl As Stores
 Dim StoreCrnt As Store

 Set StoresColl = Session.Stores

 For Each StoreCrnt In StoresColl
   Debug.Print StoreCrnt.DisplayName
 Next

End Sub
Sub ListStores3()

  Dim InxStoreCrnt As Long

  With Application.Session
    For InxStoreCrnt = 1 To .Folders.Count
      Debug.Print .Folders(InxStoreCrnt).Name
    Next
  End With

End Sub
...