2016-09-19 4 views
0

У меня есть сценарий PowerShell, который мне нужно запустить из VBScript, и мне нужно, чтобы VBScript ожидал завершения PowerShell (но двум вообще не нужно общаться). Вот код, который будет выполнять PowerShell, но VBScript не ждет:Синхронный вызов сценария 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) 

Это не работает для меня, так как сценарий всегда жалуется на «не может использовать скобки при вызове к югу», который a whole thing.

Я подозреваю, что это проблема VisualBasic против VB.NET, но я застрял в VisualBasic здесь.

Что я делаю неправильно?

+0

Этот другой пост [может быть, что вы ищете] (http://stackoverflow.com/questions/10279404/vbscript-how-to-make-program-wait-until-process-has-finished) – BenH

ответ

3

Синхронное/асинхронное выполнение контролируется третьим параметром метода Run (второй параметр управляет стилем окна). Установите этот параметр, чтобы 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) 

или в ситуациях, когда re вы используете возвращаемое значение, например. при назначении его переменной:

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

См here для дальнейшего объяснения.

Смежные вопросы