web-dev-qa-db-ja.com

Node.jsからPowershellスクリプトを実行する

私はWebとStackoverflowを見て回っていましたが、この質問に対する答えが見つかりませんでした。 Node.jsからPowershellスクリプトをどのように実行しますか?スクリプトは、Node.jsインスタンスと同じサーバー上にあります。

31
Matthew Crews

子プロセス「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
60
muffel

受け入れられた答えに加えて、ノード内からさまざまな言語を実行できる Edge.js というNode.JSライブラリがあります。 C#、J#、. Net、SQL、Python、 PowerShell およびその他のCLR言語を含む。

Edge.jsはPowerShell 3.0を必要とし、Windowsでのみ動作することに注意してください(他の機能の多くはMacおよびLinuxでも動作します)。

11
Julian Knight

または、単に Node-PowerShell を使用できます。

Node-PowerShellは、今日のテクノロジーの世界に存在する2つの最もシンプルで効果的で簡単なツールを活用しています。一方では、javascriptの世界に革命をもたらしたNodeJS、他方では、最近オープンソースのクロスプラットフォームバージョンを最初に発表し、それらを相互に接続することでPowerShellを使用すると、プログラマ、IT、DevOpsのいずれのユーザーであっても、求められたソリューションを作成します。

9
Ran Cohen

このオプションは、スクリプトがまだ存在しない場合に機能しますが、いくつかのコマンドを動的に生成し、それらを送信して、ノードで結果を処理する必要があります。

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;
9
Javier Castro