从Node.js执行Powershell脚本

问题描述:

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

你可以只生成一个子进程“powershell.exe”,并听取stdout中,命令输出和标准错误的错误:

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

完美。十分感谢你的帮助。这正是我所期待的。完美无瑕地工作。 – 2012-04-16 22:02:21

+3

我知道这是旧的,但可以与管理权限运行powershell? – Vandervidi 2015-12-03 22:25:37

+0

http://serverfault.com/a/464024/202283 – digitalextremist 2015-12-13 01:43:11

除了公认的答案,有一个Node.js的库调用Edge.js,它允许从Node内执行各种语言。包括C#,J#,.Net,SQL,Python,PowerShell和其他CLR语言。

请注意Edge.js要求PowerShell 3.0 &只适用于Windows(许多其他功能也适用于Mac和Linux)。

此选项适用于我,当脚本尚未存在时,但您想要动态生成某些命令,发送它们,并将结果处理回节点。

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; 

或者您可以使用Node-PowerShell

Node-PowerShell利用当今技术世界中存在的两种最简单,最有效和最简单的工具。一方面,在JavaScript的世界中进行了革命的NodeJS,另一方面,最近推出了最初的开放源代码,跨平台版本的PowerShell,并将它们连接在一起,为您提供了强大的功能无论您是程序员,IT还是DevOps人员,都可以创建任何您需要的解决方案。

+2

欢迎来到Stack Overflow!一个解决方案的链接是受欢迎的,但请确保你的答案是有用的没有它:[添加链接的上下文](/ meta.stackexchange.com/a/8259),以便您的同行用户将有一些想法是什么和为什么它在那里,然后引用你链接到的页面中最相关的部分,以防目标页面不可用。 [仅仅是一个链接的答案可能会被删除。](// *.com/help/deleted-answers) – FelixSFD 2017-03-03 16:48:43