【发布时间】:2017-05-03 11:29:38
【问题描述】:
这很可能是与我从 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 代码无法运行并出现以下错误:
无论我将 -ExecutionPolicy 放在何处(在 -Noexit 之前、-File 之后等),都会发生此错误。我已从信任中心设置启用宏并重新启动 Outlook。我尝试摆弄引号,并通过添加一些其他参数(-NoProfile 等)来查看是否有效,但它仍然给出相同的结果。我相当确定是 -ExecutionPolicy 的格式或它的顺序导致它无法调用它。
感谢任何想法!
【问题讨论】:
-
谢谢,但是该帖子给出的答案告诉 OP,他应该在调用 Powershell 实例时使用 -ExecutionPolicy Bypass。这就是我在上面的帖子中所描述的,但我仍然收到“无效的过程调用”错误。
-
你确定你的调用参数是正确的吗?我对 VBA 不是很熟悉,但看起来您插入了一个
"但不要以一个结束脚本的路径?如果您只是删除执行策略参数,这是否有效(有关执行权限的错误)? -
是的,我只是想描述一下。第一部分(没有 -ExecutionPolicy Bypass)工作并启动一个 Powershell 实例。在那里显示的第一件事是“在您的系统上禁用了正在运行的脚本”。如果我在该窗口中运行 Get-ExecutionPolicy,它将设置为 Restricted,因此我需要从 VBA 代码中调用具有提升权限的 Powershell 实例。我确定是 VBA 中的参数调用不正确,但我不知道是什么:)
-
检查
RemoteSigned提供的执行策略是否有效。或简单地签署您的文件。我希望您尝试做黑客所做的事情,以利用系统运行未签名(读取任何)代码。
标签: vba powershell outlook