Получить содержимое файла msg в строку

Я использую Powershell для анализа содержимого сообщений электронной почты, которые сохраняются в локальной папке.

Код выглядит следующим образом...

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?


person Brandon    schedule 25.04.2017    source источник


Ответы (1)


Не открывайте и не закрывайте 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()
person TheMadTechnician    schedule 25.04.2017
comment
К сожалению, это не имеет значения. Это сообщение появляется при попытке снова запустить скрипт. OUTLOOK.EXE все еще работает в процессах. We can't open 'C:\projtest\emails\Project Creations 42517.msg'. It's possible the file is already open, or you don't have permission to open it. - person Brandon; 25.04.2017
comment
Очень признателен! Идея состоит в том, чтобы иметь возможность открывать/анализировать сообщение, но не закрывать Outlook в процессе. Я надеялся, что будет какой-то способ просто закрыть файл .msg без необходимости убивать процесс Outlook. - person Brandon; 02.05.2017
comment
Точно, это именно то, что делает мой последний фрагмент кода. Вам вообще не нужно закрывать Outlook. Удалите эту последнюю строку, и она должна просто подключаться к Outlook, а затем открывать и анализировать сообщения, а также закрывать сообщения по мере их поступления. - person TheMadTechnician; 02.05.2017
comment
к сожалению, это фактически убивает процесс Outlook, работающий на машине, который закрывает мой клиент Outlook. Я разместил код здесь, чтобы показать, что я сделал. stackoverflow.com/questions/43746981/ - person Brandon; 02.05.2017
comment
Если у вас большую часть времени работает Outlook, просто отпустите строку .Quit() :-). - person sodawillow; 04.05.2017