Powershell:将 Headers 从 .msg 文件转换为 .txt - 当前目录不会提取 header 信息,但特定目录会

Powershell: Converting Headers from .msg file to .txt - Current directory doesn't pull header information, but specific directory does

所以我试图制作一个脚本来获取一批 .msg 文件,提取它们的 header 信息,然后将 header 信息放入 .txt 文件中。当我使用这段代码时,一切正常:

$directory = "C:\Users\IT\Documents\msg\"
$ol = New-Object -ComObject Outlook.Application
$files = Get-ChildItem $directory -Recurse
foreach ($file in $files)
{
  $msg = $ol.CreateItemFromTemplate($directory + $file)
  $headers = $msg.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x007D001E")
  $headers > ($file.name +".txt")
}

但是当我将目录更改为使用 PS 脚本所在的活动目录时 运行 从 $directory = ".\msg\",它会将所有文件变成文本文档,但它们会完全空白,没有 header 信息。我尝试了不同的变体,例如:
$directory = -Path ".\msg\"
$files = Get-ChildItem -Path $directory
$files = Get-ChildItem -Path ".\msg\"

如果有人可以分享一些关于我如何 运行 来自活动目录的脚本而不需要编辑代码来指定每个位置的路径的想法。我正在尝试对其进行设置,以便只需将其放入文件夹并 运行 即可完成。

谢谢!非常感谢任何帮助!

注意:我确实安装了 outlook,所以这不是无法拉取 header 的问题,因为它在代码中指定目录时有效[=31] =]

最简单的方法实际上可能是这样做

$msg = $ol.CreateItemFromTemplate($file.FullName)

所以,完整的脚本看起来像这样

$directory = ".\msg\"
$ol = New-Object -ComObject Outlook.Application
$files = Get-ChildItem $directory

foreach ($file in $files)
{
    $msg = $ol.CreateItemFromTemplate($file.FullName)
    $headers = $msg.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x007D001E")
    $headers > ($file.name +".txt")
}

综上所述,值得阅读自动变量 (Get-Help about_Automatic_Variables) - 例如关于 $PWD$PSScriptRoot$PSCommandPath 的部分可能是有用。

替代方法 - 尽管它们看起来不必要地复杂。

$msg = $ol.CreateItemFromTemplate((Get-Item $directory).FullName + $file)

或者像这样的东西

$msg = $ol.CreateItemFromTemplate($file.DirectoryName + "\" $file)