首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找所有.pst文件

查找所有.pst文件
EN

Stack Overflow用户
提问于 2016-09-28 05:02:59
回答 1查看 2K关注 0票数 1

问候

我在查找.pst文件时遇到了问题。**

任务

**是查找机器上的所有.pst文件,并创建它们的列表。

我尝试使用注册表条目:"HKCU\Software\Microsoft\Office\%OfficeVersion%\Outlook\Search\Catalog".看起来它包含所有.pst & .ost文件的列表,但结果显示它也包含已删除(或移动)文件的条目,并且只有当您在Outlook中手动连接.pst时,它才会更新。因此,如果您在某种“存档”中移动旧.pst,我的注册表将不包含有关它的信息。

我知道查看所有文件需要花费太多的时间,所以我想避免这种情况。

另外,请记住,用户可能有很多邮箱和大量.pst(其中一些甚至根本没有连接到Outlook )。我不能用救赎之类的东西。只是普通的C#(可能是一些C++ MAPI库)

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-28 14:50:40

PST文件位置存储在注册表中的配置文件节中。官方支持的用于访问和操作配置文件数据的API是IProfAdmin接口(如果单击IProfAdmin按钮,您可以在OutlookSpy中使用它(我是它的作者)。PST路径存储在PR_PST_PATH属性中。扩展的MAPI只能从C++或Delphi访问。

概要文件数据存储在注册表中,因此理论上您可以从注册表读取数据,但是键名是特定于概要文件的,并且是随机生成的(概要文件节名是guid)。还请注意,注册表中的配置文件数据位置是Outlook版本特定的。

您可以使用ProfMan (它附带可发行版本的赎罪);ProfMan可以从任何语言中使用。以下脚本(VB)从所有本地配置文件中检索PST文件名:

代码语言:javascript
复制
'Print the path to all the PST files in all profiles
 PR_PST_PATH = &H6700001E

 set Profiles=CreateObject("ProfMan.Profiles")
 for i = 1 to Profiles.Count
   set Profile = Profiles.Item(i)
   set Services = Profile.Services
   Debug.Print "------ Profile: " & Profile.Name & " ------"
   for j = 1 to Services.Count
     set Service = Services.Item(j)
     If (Service.ServiceName = "MSPST MS") or (Service.ServiceName = "MSUPST MS") Then
      MsgBox Service.Providers.Item(1).ProfSect.Item(PR_PST_PATH)
     End If
   next
 next

还可以使用Outlook对象模型从PST存储中检索PST文件名(但这需要运行Outlook,并且只能针对当前使用的配置文件)--使用Store.FilePath属性:

代码语言:javascript
复制
set vApp = CreateObject("Outlook.Application")
for each vStore in vApp.Session.Stores
  MsgBox vStore.DisplayName & " - " & vStore.FilePath
next
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39738425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档