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

问题描述 投票:1回答:1

我从VBA脚本的PowerShell通过选择Outlook.MailMessage属性:

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

这可能吗?

vba powershell outlook outlook-vba
1个回答
1
投票

您只能通过命令行传递的字符串。你不能传递一个COM对象。你能做的最好是通过MailItem.EntryID属性的值,并用它通过使用Namespace.GetItemFromID子进程中的德条目号打开对象。

© www.soinside.com 2019 - 2024. All rights reserved.