我正嘗試使用WshShell對象的Exec方法調用Powershell。我正在用JScript編寫腳本,但我也在VBScript中重現了這個問題。下面兩個短的測試腳本會導致WSH無限期掛起:使用WshShell.Exec()方法調用Powershell掛起腳本
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,64位PowerShell 3.我已經在Windows XP上用PowerShell 1進行了測試。
編輯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
非常好,工作。謝謝。 – bshacklett
您不必關閉StdIn。但是你需要使用'-NonInteractive'和'-Command'參數才能成功。但是我提出了你的答案,因爲關閉StdIn不會傷害,最終我得到了這個工作。感謝發佈! – fourpastmidnight