通过Shell命令将Outlook.MailMessage传递到PowerShell脚本

时间:2019-02-07 16:18:37

标签: vba powershell outlook outlook-vba

我将选定的Outlook.MailMessage属性从VBA脚本传递给PowerShell:

Public Sub InvokeMessageParser()

    For Each Item In Application.ActiveExplorer.Selection
        If TypeName(Item) = "MailItem" Then

            Dim MailItem As Outlook.MailItem: Set MailItem = Item

            // arrange
            Dim cmd As String: cmd = "powershell -NoExit -NoProfile -File C:\Users\[user]\Desktop\Invoke-MessageParser.ps1 -Subject """ & MailItem.Subject & """ -Verbose"

            // act
            i = Shell(cmd, vbNormalFocus)

        End If
    Next

End Sub

Invoke-MessageParser.ps1

param (
    [string]$Subject
)

Write-Host "Subject: $Subject"

将期望值打印到控制台。

我希望传递整个消息,但无法正确获取语法:

// arrange
Dim cmd As String: cmd = "powershell -NoExit -NoProfile -File C:\Users\[user]\Desktop\Invoke-MessageParser.ps1 -Message " & MailItem

Invoke-MessageParser.ps1

param (
    [object]$Message
)
Write-Verbose "Subject: $($Message.Subject)"

这导致Subject:被打印到控制台。

这可能吗?

1 个答案:

答案 0 :(得分:1)

您只能通过命令行传递字符串。您不能传递COM对象。最好的办法是传递MailItem.EntryID属性的值,并使用Namespace.GetItemFromID在子进程中使用该ID通过条目ID打开对象。