我从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:
被打印到控制台。
这可能吗?
您只能通过命令行传递的字符串。你不能传递一个COM对象。你能做的最好是通过MailItem.EntryID
属性的值,并用它通过使用Namespace.GetItemFromID
子进程中的德条目号打开对象。