2016-09-19 19 views
0

私はVBScriptから実行する必要のあるPowerShellスクリプトを持っていますが、PowerShellが終了するのを待つためにVBScriptが必要です(しかし、2つは通信する必要はありません)。ここでPowerShellを実行するコードですが、VBScriptが待たれていません。VBScriptからSynchronously PowerShellスクリプトを呼び出します。

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

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

MsgBox("Powershell execution complete") 

PowerShellがまだ実行されている間、このスクリプトは、即座に「完全なPowerShellの実行」でポップアップ表示されます。

ApparentlyTrueフラグがあります。これを追加するとVBが強制的に待機します。以下のようなので、多分:a whole thingで、「サブを呼び出すときに括弧を使用することはできません」スクリプトはいつも文句として、私のために働いていない

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

私はこれがVisualBasic vs. VB.NETの問題だと思っていますが、ここではVisualBasicに固執しています。

私は間違っていますか?

+0

この他の投稿[あなたが探しているものかもしれません](http://stackoverflow.com/questions/10279404/vbscript-how-to-make-program-wait-until-process-has-finished) – BenH

答えて

3

同期/非同期実行は、Runメソッドの3番目のパラメータによって制御されます(2番目のパラメータはウィンドウスタイルを制御します)。同期コマンドを実行するためにTrueにそのパラメータを設定します。

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

2番目のパラメータは省略することができますが、あなたはまだポジションを維持する必要があります。

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を参照してください。

関連する問題