首页 > 解决方案 > 发送自动电子邮件时,从 Powershell 脚本调用 VB 脚本会产生意外的运行时错误

问题描述

我有以下 VB 脚本:

Set MSOutlook = CreateObject("Outlook.Application")
Set MailMsg = MSOutlook.CreateItem(0)

With MailMsg            
        .To = "xyz@gmail.com"
        .Subject = "my subject"
        .HTMLBody = "my text"
        .Display
        SendKeys "{TAB}{DOWN}{DOWN}{ENTER}", True
        .Send
End With

Set MSOutlook = Nothing
Set MailMsg = Nothing

此脚本在 VB 编译器(例如Microsoft Visual Basic for Applications.

这是必需的,因为我们在工作中使用SendKeys了这个该死的分类系统来对所有内容进行分类,例如电子邮件和文档。Titus

电子邮件发送良好,并且分类正确。

现在我正在尝试从以下 Powershell 脚本中调用此脚本:

& cscript 'C:\Documents\sendEmail.vbs' //nologo

但在 Powershell ISE 中或直接从 PowerShell 控制台调用 vb 脚本时会收到以下错误:

cscript.exe : C:\Documents\sendEmail.vbs Microsoft VBScript runtime error: Type mismatch: 'SendKeys'

任何人都对此非常了解,为什么 SendKeys 功能显然不能以这种方式使用?

为了抢先发表评论,是的,我真的很想将这个 vb 功能移动到 PowerShell 脚本中,但是 TITUS 插件现在正在引起各种各样的麻烦。

谢谢

标签: powershelloutlookvbscript

解决方案


在 VBA 中,SendKeys命令是全局Interaction模块的成员,因此始终在范围内。

在 VBScript 中,您需要使用对象的SendKeys方法来WScript.Shell代替:

Dim shell
Set shell = CreateObject("WScript.Shell")
shell.SendKeys "{TAB}{DOWN}{DOWN}{ENTER}", True

推荐阅读