Вопрос по node.js – Выполнить скрипт Powershell из Node.js

25

Я искал в Интернете и в Stackoverflow, но не нашел ответа на этот вопрос. Как бы вы выполнили скрипт Powershell из Node.js? Сценарий находится на том же сервере, что и экземпляр Node.js.

Ваш Ответ

4   ответа
8

Эта опция работает для меня, когда сценария еще нет, но вы хотите динамически генерировать некоторые команды, отправлять их и работать с результатами обратно на узел.

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

Или вы можете просто использоватьУзел PowerShell.

Node-PowerShell taking advantage of two of the simplest, effective and easy tools that exist in the today technology world. On the one hand, NodeJS which made a revolution in the world of javascript, and on the other hand, PowerShell which recently came out with an initial open-source, cross-platform version, and by connecting them together, gives you the power to create any solution you were asked to, no matter if you are a programmer, an IT or a DevOps guy.

Добро пожаловать в переполнение стека! Ссылка на решение приветствуется, но, пожалуйста, убедитесь, что ваш ответ будет полезен без него:add context around the link поэтому ваши коллеги-пользователи будут иметь некоторое представление о том, что это такое и почему это так, а затем процитировать наиболее релевантную часть страницы, на которую вы ссылаетесь, в случае, если целевая страница недоступна.Answers that are little more than a link may be deleted.
11

В дополнение к принятому ответу существует библиотека Node.JS, которая называетсяEdge.js это позволяет выполнять различные языки изнутри узла. Включая C #, J #, .Net, SQL, Python,PowerShell и другие языки CLR.

Обратите внимание, что Edge.js требует PowerShell 3.0 & amp; работает только в Windows (многие другие функции также работают в Mac и Linux).

52

Вы можете просто создать дочерний процесс & quot; powershell.exe & quot; и слушайте 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
Отлично. Большое спасибо за помощь. Это именно то, что я искал. Работал без нареканий. Matthew Crews
Есть ли способ передать относительный путь к сценарию powershell в качестве второго параметра?
Я знаю, что это старый, но можно ли запустить PowerShell с правами администратора?
@Vandervidi взгляните наnode-windows Пакет Npm. Обеспечивает функциюelevate что может быть то, что вы ищете.

Похожие вопросы