WshShellオブジェクトのExecメソッドを使用してPowershellを呼び出そうとしています。私はJScriptでスクリプトを書いていますが、VBScriptでも問題を再現しました。次の短いテストスクリプトはどちらも、WSHが無期限にハングする原因になります。
test.js
var shell = new ActiveXObject("WScript.Shell");
WScript.Echo(shell.exec("powershell -Command $Host.Version; Exit").StdOut.ReadAll());
test.vbs
dim shell
set shell = CreateObject("WScript.Shell")
WScript.Echo shell.exec("powershell -Command $Host.Version; Exit").StdOut.ReadAll
私は何か間違ったことをしていますか、それとも制限/非互換性に遭遇していますか?Runメソッドは非常にうまく機能しますが、出力をキャプチャする必要がありますが、これは実行できません。
編集:私のプラットフォームがWindows 7 Pro、PowerShell3を搭載した64ビットであることを忘れました。PowerShell1を搭載したWindowsXPでもテストしました。
編集2:実行しているテストスクリプトをx0nの回答に合うように更新しました。残念ながら、私はまだ問題を抱えています。これが私の現在のテストです:
test.js:
var shell = new ActiveXObject("WScript.Shell");
WScript.Echo(shell.exec('powershell -noninteractive -noprofile -Command "& { echo Hello_World ; Exit }"').StdOut.ReadAll());
test.vbs:
dim shell
set shell = CreateObject("WScript.Shell")
WScript.Echo shell.exec("powershell -noninteractive -noprofile -Command ""& { echo Hello_World ; Exit }""").StdOut.ReadAll