2012-04-16 39 views
18

Tôi đã tìm kiếm trên web và trên Stackoverflow nhưng không tìm thấy câu trả lời cho câu hỏi này. Làm thế nào bạn sẽ thực thi một kịch bản Powershell từ Node.js? Kịch bản lệnh nằm trên cùng một máy chủ với cá thể Node.js.Thực thi kịch bản Powershell từ Node.js

Trả lời

43

Bạn chỉ có thể đẻ trứng một quá trình con "powershell.exe" và lắng nghe thiết bị xuất chuẩn cho đầu ra lệnh và stderr cho các lỗi:

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

Hoàn hảo. Cảm ơn bạn rất nhiều vì sự giúp đỡ. Điều này thật đúng với gì mà tôi đã tìm kiếm. Làm việc hoàn hảo. –

+3

Tôi biết điều này cũ nhưng có thể chạy quyền hạn với quyền quản trị? – Vandervidi

+0

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

10

Ngoài các câu trả lời được chấp nhận, có một thư viện Node.js gọi Edge.js cho phép các langugages khác nhau được thực thi từ bên trong Nút. Bao gồm C#, J #, .Net, SQL, Python, PowerShell và các ngôn ngữ CLR khác.

Lưu ý rằng Edge.js yêu cầu PowerShell 3.0 & chỉ hoạt động trên Windows (nhiều tính năng khác cũng hoạt động trên Mac và Linux).

6

Tùy chọn này phù hợp với tôi, khi tập lệnh không có sẵn, nhưng bạn muốn tạo một số lệnh động, gửi chúng và làm việc với kết quả trở lại trên nút.

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

Hoặc bạn chỉ có thể sử dụng Node-PowerShell.

Node-PowerShell tận dụng lợi thế của hai công cụ đơn giản, hiệu quả và dễ dàng tồn tại trong thế giới công nghệ ngày nay. Một mặt, NodeJS đã tạo ra một cuộc cách mạng trong thế giới javascript, và mặt khác, PowerShell gần đây đã ra mắt với một phiên bản nền tảng nguồn mở ban đầu, và bằng cách kết nối chúng lại với nhau, mang lại cho bạn sức mạnh tạo ra bất kỳ giải pháp nào mà bạn được yêu cầu, cho dù bạn là một lập trình viên, một công ty CNTT hay một anh chàng DevOps.

+2

Chào mừng bạn đến với Stack Overflow! Liên kết đến giải pháp được chào đón, nhưng hãy đảm bảo câu trả lời của bạn hữu ích khi không có: [thêm ngữ cảnh xung quanh liên kết] (// meta.stackexchange.com/a/8259) để người dùng đồng nghiệp của bạn sẽ biết nó là gì và tại sao nó ở đó, sau đó báo giá phần có liên quan nhất của trang bạn đang liên kết đến trong trường hợp trang đích không có sẵn. [Câu trả lời có nhiều hơn một liên kết có thể bị xóa.] (// stackoverflow.com/help/deleted-answers) – FelixSFD

Các vấn đề liên quan