vba - 通过 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:
被打印到控制台。
这可能吗?
解决方案
您只能通过命令行传递字符串。您不能传递 COM 对象。您可以做的最好的事情是传递MailItem.EntryID
属性的值并使用它通过子进程中的条目 id 使用它来打开对象Namespace.GetItemFromID
。
推荐阅读
- microsoft-graph-api - Ms Graph Get message $value 给出 500 个错误
- c++11 - 获取地址消毒剂致命信号
- r - RODBC 与 ms-access 错误 07002 17 [Microsoft][ODBC Microsoft Access Driver]COUNT 字段不正确
- html - 如何在模态中添加滚动条?
- ruby - Gosu,如何检测何时按下键?
- node.js - 从 mht 文件中提取文件时出现 Mhtml 库错误
- ios - webview_flutter twitter 小部件使用数据/html 未加载 - Balnk 空间显示?
- javascript - 从 API 检索 json 编号时出错(工作了一周)
- docker - Docker 构建不再工作;加载元数据时出错
- typescript - 有没有办法将 useContext 与箭头函数结合起来?