从VBA脚本运行Powershell脚本

时间:2017-05-03 11:29:39

标签: vba powershell outlook

这很可能是一个与我从VBA代码调用Powershell实例的方式相关的问题,但我无法在StackOverflow上找到相关信息。 This Microsoft forum post提出了一个非常简单的建议,但我无法使其发挥作用。 Others had similar suggestions但我不能让它在我的环境中运行。

我的目标是在Outlook中收到邮件时运行特定的Powershell脚本。这可以通过在VBA中开始实际脚本来更容易地完成,但是因为我已经尝试首先学习Powershell而且最重要的是我不想再去VBA路了。 Powershell脚本本身可以运行并且可以自行运行,但是ThisOutlookSession中的VBA似乎无法调用它(读取:我在某个地方犯了一个错误,使得VBA无法调用Powershell脚本)。为了确保它不是Powershell脚本,我制作了一个简单的测试脚本,只显示一个弹出窗口,说“操作已完成”。

这是VBA代码:

Sub test()
'Call Powershell and run scripts
    Call Shell("powershell -noexit -file ""c:\users\me\desktop\test.ps1")
End Sub

这会运行并打开一个Powershell实例,但会说“在您的系统上禁用运行脚本”,因此我需要使用-ExecutionPolicy参数。我将脚本更改为以下内容:

Sub test()
'Call Powershell and run scripts
    Call Shell("powershell -noexit -ExecutionPolicy Bypass -file ""c:\users\me\desktop\test.ps1")
End Sub

这使得VBA代码无法运行时出现以下错误:

Invalid Procedure Call

无论我在哪里放置-ExecutionPolicy(在-Noexit之前,在-File之后等),都会发生此错误。我已从信任中心设置启用宏并重新启动Outlook。我尝试摆弄引号,并添加一些其他参数(-NoProfile等),看看是否有效,但它仍然给出了相同的结果。我很确定它是-ExecutionPolicy的格式,或者它的顺序使它无法调用它。

感谢任何想法!

1 个答案:

答案 0 :(得分:0)

为了让未来的观众更容易:解决方案是不使用似乎受到限制的 -ExecutionPolicy Bypass(出于很好的理由),而是使用了 -ExecutionPolicy RemoteSigned 并且成功了。感谢@Vesper 提供解决方案。