我有一个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。
我做错了什么?
答案 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。