从VBScript同步调用PowerShell脚本

时间:2016-09-19 17:45:22

标签: powershell vbscript

我有一个PowerShell脚本,我需要从VBScript运行,我需要VBScript等待PowerShell完成(但两个人根本不需要进行通信)。这里将执行powershell的代码,但VBScript不会等待:

Set objShell = (CreateObject("Wscript.shell"))

objShell.Run ("powershell -noexit -file e:\powershell\vb_to_powershell_test.ps1")

MsgBox("Powershell execution complete")

此脚本将弹出" Powershell执行完成"即时,PowerShell仍在运行。

Apparently我可以添加True标志,迫使VB等待。像这样,也许:

objShell.Run ("powershell -noexit -file e:\powershell\vb_to_powershell_test.ps1", True)

这对我来说并不起作用,因为脚本总是抱怨"在调用sub"时不能使用括号,即a whole thing

我怀疑这是VisualBasic与VB.NET的问题,但我在这里遇到了VisualBasic。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

同步/异步执行由Run方法的第3个参数控制(第2个参数控制窗口样式)。将该参数设置为True以同步运行命令:

objShell.Run "powershell -noexit -file e:\some.ps1", 1, True

第二个参数可以省略,但您仍需要保持位置:

objShell.Run "powershell -noexit -file e:\some.ps1", , True

只有在使用Call语句调用方法时才能使用括号:

Call objShell.Run("powershell -noexit -file e:\some.ps1", 1, True)

或在您使用返回值的情况下,例如将其分配给变量时:

retval = objShell.Run("powershell -noexit -file e:\some.ps1", 1, True)

有关详细说明,请参阅here