我的目标是能够在远程计算机上执行命令,并从运行的命令中获取完整的stdout响应。我得到的是一个截断的结果。当我通过命令提示符运行相同的命令时,我从命令运行中获得完整的输出。这是我的代码:
var process = spawn('PsExec.exe', ['\\\\servername', 'ipconfig']);
var doOnce = true;
process.stdout.on('data', function (data) {
log.info('stdout: ' + data.toString());
if(doOnce){
doOnce = false;
process.stdin.write('ipconfig');}
});
process.stderr.on('data', function (data) {
log.info('stderr: ' + data.toString());
});
process.on('exit', function (code) {
log.info('child process exited with code ' + code);
});
执行时,我得到以下控制台输出。如您所知,所有ipconfig都被截断了。如果我执行另一个命令,如netstat,我会在截断之前得到大部分结果,所以我不相信这与缓冲区有关。我现在真的只是出于想法。
info: stderr:
PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
info: stdout:
Windows IP Configuration
ipconfig exited on servername with error code 0.
info: child process exited with code 0
答案 0 :(得分:2)
尝试使用{stdio:'inherit'}选项
var spawn = require('child_process').spawn,
appname = spawn('psexec.exe', ['-accepteula', '\\\\remotepcname', '-u', 'domain\\username', '-p', 'supersecretpassword', 'ipconfig'], { stdio: 'inherit' });