2012-04-16 23 views
18

Ich habe im Internet und auf Stackoverflow gesucht, aber keine Antwort auf diese Frage gefunden. Wie würden Sie ein Powershell-Skript von Node.js ausführen? Das Skript befindet sich auf demselben Server wie die Node.js-Instanz.Powershell-Skript von Node.js ausführen

Antwort

43

Sie können nur einen untergeordneten Prozess „powershell.exe“ laichen und hören auf Fehler für Befehlsausgabe und stderr nach 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

Perfekt. Vielen Dank für die Hilfe. Genau das habe ich gesucht. Einwandfrei gearbeitet. –

+3

Ich weiß, das ist alt, aber kann die Powershell mit Admin-Berechtigungen ausgeführt werden? – Vandervidi

+0

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

10

Neben der akzeptierte Antwort, gibt es eine Bibliothek mit dem Namen Node.JS Edge.js, mit dem verschiedene Sprachen innerhalb von Node ausgeführt werden können. Einschließlich C#, J #, .Net, SQL, Python, PowerShell und anderen CLR-Sprachen.

Bitte beachte, dass Edge.js erfordert Powershell 3.0 & funktioniert nur unter Windows (viele der anderen Funktionen funktionieren auf Mac und Linux auch).

6

Diese Option funktioniert für mich, wenn das Skript nicht bereits vorhanden ist, Sie aber einige Befehle dynamisch generieren, senden und mit den Ergebnissen auf dem Knoten arbeiten möchten.

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

Oder Sie können einfach Node-PowerShell verwenden.

Die Node-PowerShell nutzt zwei der einfachsten, effektivsten und einfachsten Tools, die es in der heutigen Technologiewelt gibt. Auf der einen Seite, NodeJS, die eine Revolution in der Welt von Javascript gemacht, und auf der anderen Seite, PowerShell, die vor kurzem mit einer ersten Open-Source-, Cross-Plattform-Version und durch die Verbindung von ihnen kam, gibt Ihnen die Macht zu Erstellen Sie jede Lösung, die Sie gefragt wurden, egal ob Sie ein Programmierer, ein IT-Experte oder ein DevOps-Typ sind.

+2

Willkommen bei Stack Overflow! Ein Link zu einer Lösung ist willkommen, aber stellen Sie bitte sicher, dass Ihre Antwort ohne sie nützlich ist: [Fügen Sie einen Kontext um den Link hinzu] (// meta.stackexchange.com/a/8259), damit Ihre Mitbenutzer eine Idee davon haben, was es ist und Warum ist es da? Dann zitieren Sie den relevantesten Teil der Seite, auf den Sie verlinken, falls die Zielseite nicht verfügbar ist. [Antworten, die kaum mehr als ein Link sind, können gelöscht werden.] (// stackoverflow.com/help/deleted-answers) – FelixSFD

Verwandte Themen