2017-04-25 16 views
4

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プロセスを終了するには、より良い方法がありますか?

答えて

4

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() 

編集: [OK]を、あなたは、Outlook、あなたの.msgファイルをクローズする必要はありません。それをループの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

関連する問題