我将选定的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:
被打印到控制台。
这可能吗?
答案 0 :(得分:1)
您只能通过命令行传递字符串。您不能传递COM对象。最好的办法是传递MailItem.EntryID
属性的值,并使用Namespace.GetItemFromID
在子进程中使用该ID通过条目ID打开对象。