2012-04-16 174 views
18

私はWebとStackoverflowを見てきましたが、この質問に対する答えは見つかりませんでした。 Node.jsからPowershellスクリプトをどのように実行しますか?スクリプトはNode.jsインスタンスと同じサーバー上にあります。あなただけの子プロセス「たpowershell.exe」を生むとエラーのためにコマンドの出力および標準エラー出力のためにstdoutに聞くことができますNode.jsからPowershellスクリプトを実行

答えて

43

:受け入れ答えに加えて

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 
+0

パーフェクト。助けてくれてありがとう。これはまさに私が探していたものです。完璧に働きました。 –

+3

これは古いのですが、PowerShellを管理者権限で実行できるのは分かりますか? – Vandervidi

+0

http://serverfault.com/a/464024/202283 – digitalextremist

10

、と呼ばれるNode.jsの図書館がありますEdge.jsであり、ノード内からさまざまな拘束を実行できます。 C#、J#、.NET、SQL、Python、PowerShellなどのCLR言語を含みます。

Edge.jsにはPowerShell 3.0が必要です。&はWindowsのみで動作します(他の多くの機能はMacとLinuxでも動作します)。

6

このオプションは、スクリプトがまだ存在していないのに、いくつかのコマンドを動的に生成して送信し、その結果をノードに戻したい場合に使用できます。

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; 
2

Node-PowerShellを使用することもできます。

Node-PowerShellは、今日の技術界に存在する最も簡単で効果的で簡単なツールの2つを利用しています。一方で、javascriptの世界で革命を起こしたNodeJS、そして最近、最初のオープンソース、クロスプラットフォーム版で出てきたPowerShellを一緒に接続することで、あなたがプログラマであれ、IT開発者であれ、開発者であれ、どんな解決策を作成してもかまいません。

+2

ようこそスタックオーバーフロー!ソリューションへのリンクは歓迎しますが、あなたの答えはそれが無ければ有用であることを確認してください:[リンクの前後にコンテキストを追加する](// meta.stackexchange.com/a/8259)あなたの仲間のユーザーは、なぜそれがあるのか​​、ターゲットページが利用できない場合にリンクしているページの最も関連性の高い部分を引用します。 [リンク以上の回答は削除される可能性があります。](// stackoverflow.com/help/deleted-answers) – FelixSFD

関連する問題