gpt4 book ai didi

powershell - 使用 WshShell.Exec() 方法调用 Powershell 会挂起脚本

转载 作者:行者123 更新时间:2023-12-03 19:04:54 29 4
gpt4 key购买 nike

我正在尝试使用 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,64 位,带有 PowerShell 3。我也在带有 PowerShell 1 的 Windows XP 上进行了测试。

编辑 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

最佳答案

你必须关闭标准输入:

var shell = new ActiveXObject("WScript.Shell");
var exec = shell.Exec('powershell -noninteractive -noprofile -Command "& { echo Hello_World ; Exit }"');
exec.StdIn.Close();
WScript.Echo(exec.StdOut.ReadAll());

Microsoft说:

StdIn is still open so PowerShell is waiting for input. (This is an
"implementation consideration" that we're hoping to fix in V2. The
PowerShell executable gathers all input before processing.) So
objexec.StdIn.Close() needs to be added.

关于powershell - 使用 WshShell.Exec() 方法调用 Powershell 会挂起脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12270667/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com