44

我一直在网上和 Stackoverflow 上寻找,但没有找到这个问题的答案。您将如何从 Node.js 执行 Powershell 脚本?该脚本与 Node.js 实例位于同一服务器上。

4

5 回答 5

83

您可以只生成一个子进程“powershell.exe”并收听 stdout 的命令输出和 stderr 的错误:

var spawn = require("child_process").spawn,child;
child = spawn("powershell.exe",["c:\\temp\\helloworld.ps1"]);
child.stdout.on("data",function(data){
    console.log("Powershell Data: " + data);
});
child.stderr.on("data",function(data){
    console.log("Powershell Errors: " + data);
});
child.on("exit",function(){
    console.log("Powershell Script finished");
});
child.stdin.end(); //end input
于 2012-04-16T20:49:01.217 回答
27

执行此操作的新方法

const { exec } = require('child_process');
exec('command here', {'shell':'powershell.exe'}, (error, stdout, stderr)=> {
    // do whatever with stdout
})
于 2020-04-15T01:24:26.710 回答
13

除了公认的答案之外,还有一个名为Edge.js的 Node.JS 库,它允许从 Node 中执行各种语言。包括 C#、J#、.Net、SQL、Python、PowerShell和其他 CLR 语言。

请注意,Edge.js 需要 PowerShell 3.0 并且仅适用于 Windows(许多其他功能也适用于 Mac 和 Linux)。

于 2014-07-09T16:29:20.557 回答
13

或者你可以只使用Node-PowerShell

Node-PowerShell 利用了当今技术世界中存在的两个最简单、有效和容易的工具。一方面,NodeJS 在 javascript 领域掀起了一场革命,另一方面,PowerShell 最近推出了最初的开源跨平台版本,通过将它们连接在一起,您可以无论您是程序员、IT 人员还是 DevOps 人员,都可以创建您被要求的任何解决方案。

于 2017-03-03T16:47:52.287 回答
10

当脚本不存在时,此选项对我有用,但您想动态生成一些命令,发送它们,然后在节点上处理结果。

var PSRunner = {
    send: function(commands) {
        var self = this;
        var results = [];
        var spawn = require("child_process").spawn;
        var child = spawn("powershell.exe", ["-Command", "-"]);

        child.stdout.on("data", function(data) {
            self.out.push(data.toString());
        });
        child.stderr.on("data", function(data) {
            self.err.push(data.toString());
        });

        commands.forEach(function(cmd){
            self.out = [];
            self.err = [];
            child.stdin.write(cmd+ '\n');
            results.push({command: cmd, output: self.out, errors: self.err});
        });
        child.stdin.end();
        return results;
    },
};

module.exports = PSRunner;
于 2014-10-03T03:13:04.673 回答