将msg文件的内容转换为字符串

问题描述:

我正在使用Powershell解析保存到本地文件夹的电子邮件内容。将msg文件的内容转换为字符串

的代码如下...

Get-ChildItem "C:\projtest\emails" -Filter *.msg | 
ForEach-Object { 
    $msg = "" 
    $outlook = New-Object -comobject outlook.application 
    $msg = $outlook.Session.OpenSharedItem($_.FullName) 
    $msg | Select -ExpandProperty body 

    Write-Host $msg 
} 

$outlook.Quit() 

现在,我只是想打开该文件,得到的内容,并显示它。

我遇到的问题是,一旦脚本运行,OUTLOOK.EXE不会关闭,因此我无法在同一条消息上再次运行该脚本。

是否有更好的方式来打开Outlook电子邮件,获取内容到PowerShell中的字符串,并关闭Outlook进程?

不要打开和关闭Outlook,打开一次,完成所有工作,然后关闭它。

$outlook = New-Object -comobject outlook.application 
Get-ChildItem "C:\projtest\emails" -Filter *.msg | 
    ForEach-Object { 
     $msg = $outlook.Session.OpenSharedItem($_.FullName) 
     $msg.body 
    } 
$outlook.Quit() 

编辑:好吧,你需要关闭.msg文件,而不是Outlook。只需将其添加到ForEach回路中即可:

$outlook = New-Object -comobject outlook.application 
Get-ChildItem "C:\projtest\emails" -Filter *.msg | 
    ForEach-Object { 
     $msg = $outlook.Session.OpenSharedItem($_.FullName) 
     $msg.body 
     $msg.Close() 
    } 
$outlook.Quit() 
+0

不幸的是,它没有区别。 尝试再次运行脚本时发生此消息。 OUTLOOK.EXE仍在进程中运行。 '我们无法打开'C:\ projtest \ emails \ Project Creations 42517.msg'。有可能文件已经打开,或者您没有权限打开它。“ – Brandon

+0

我更新了我的答案以解决您的问题。 – TheMadTechnician

+0

非常感谢!这个想法是能够打开/解析消息,但不必在此过程中关闭Outlook。我希望有一些方法可以在不关闭Outlook进程的情况下关闭.msg文件。 – Brandon