首页 > 解决方案 > 通过 Shell 命令将 Outlook.MailMessage 传递给 PowerShell 脚本

问题描述

我将选定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:被打印到控制台。

这可能吗?

标签: vbapowershelloutlook

解决方案


您只能通过命令行传递字符串。您不能传递 COM 对象。您可以做的最好的事情是传递MailItem.EntryID属性的值并使用它通过子进程中的条目 id 使用它来打开对象Namespace.GetItemFromID


推荐阅读