PowerShell返回PST文件夹列表和每个

时间:2018-02-17 20:00:13

标签: powershell outlook pst

我正在尝试运行打开Outlook PST的PowerShell脚本,并列出所有目录和每个目录中的电子邮件数量。当我第一次尝试它时,它运行正常,但是当我修改脚本时它最终破坏了。

此时,即使我恢复原始脚本,也无法让它工作。问题似乎是当脚本尝试设置$ PST(附加文件的第56行)时,它为null。然后我收到一条错误消息,指出由于空值表达式而出现问题。

 You cannot call a method on a null-valued expression.
 At H:\users\michael\my documents\~mga outlook pst email\PST Number of Emails.pst:53 char:27
 + $root = $PST.GetRootFolder <<<< <>
      + CategiryUbfi             : InvalidOperation: (GetRootFolder:String) [], RuntimeException
      + FullyQualifiedErrorId : InvokeMethodOnNull

代码可以在这里看到:https://pastebin.com/embed_js/hGDZwhDd这是https://gallery.technet.microsoft.com/office/Count-number-of-emails-in-61a2748e

的略微增强

我认为问题在于下面的行没有产生所需的值:

 $PST = $objnamespace.stores | ? { $_.FilePath -eq $strPSTPath }
 }

如果我知道PST应该是什么,我可以将其硬编码为临时修复,但我不知道代码试图做什么。 $ PST是变量还是对象?

可能相关或不相关的内容是,在运行脚本几次后,会出现几个新文件,其中包含PST文件名的变种。如果只是删除,脚本会在较早的时候挂起。为了阻止脚本查找这些文件,我告诉Outlook名称与基本PST文件相同。这似乎有效,但同样的&#34; $ PST为空&#34;相关错误。

如何修复/破解?

1 个答案:

答案 0 :(得分:0)

我发现很少有线路没有真正起作用,我建议改变。然而,我更新了您的代码并将其粘贴here。通过它并尝试运行它。请让我知道输出的内容。在我看来,你引用的PST文件不存在;)

这里的代码我改为检查文件是否存在

$FileExists = Test-Path $strPSTPath 
  if ($FileExists -eq $True) {
  Write-Host "PST Exists"
}
else {
  Write-Host "PST NOT FOUND! Press any key to continue ..."
  $null = $Host.UI.RawUI.ReadKey('NoEcho, IncludeKeyDown')
}

干杯, 斯坦尼斯