2012-04-16 19 views

risposta

43

Si può solo generare un processo figlio "powershell.exe" e ascoltare stdout per l'uscita di comando e stderr per gli errori:

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

Perfetto. Grazie mille per l'aiuto. Questo e 'esattamente quello che stavo cercando. Ha funzionato perfettamente. –

+3

So che questo è vecchio ma è possibile eseguire il powershell con le autorizzazioni di amministratore? – Vandervidi

+0

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

10

Oltre alla risposta accettata, v'è una biblioteca Node.JS chiamato Edge.js che consente l'esecuzione di vari langugages dal nodo. Compresi C#, J #, .Net, SQL, Python, PowerShell e altri linguaggi CLR.

Nota che Edge.js richiede PowerShell 3.0 & funziona solo su Windows (molte delle altre funzioni funzionano anche su Mac e Linux).

6

Questa opzione funziona per me, quando lo script non è già lì, ma si desidera generare alcuni comandi in modo dinamico, inviarli e lavorare con i risultati sul nodo.

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

Oppure è sufficiente utilizzare Node-PowerShell.

Node-PowerShell che sfrutta due degli strumenti più semplici, efficaci e facili che esistono nel mondo tecnologico attuale. Da un lato, NodeJS che ha fatto una rivoluzione nel mondo di javascript e, d'altro canto, PowerShell che recentemente è uscito con una versione open-source e multipiattaforma iniziale e collegandoli insieme, ti dà il potere di crea qualsiasi soluzione che ti è stata richiesta, non importa se sei un programmatore, un IT o un DevOps.

+2

Benvenuti in Stack Overflow! Un collegamento a una soluzione è il benvenuto, ma per favore assicurati che la tua risposta sia utile senza di essa: [aggiungi contesto intorno al link] (// meta.stackexchange.com/a/8259) in modo che i tuoi utenti abbiano qualche idea di cosa sia e perché è lì, quindi citare la parte più pertinente della pagina a cui si sta collegando nel caso in cui la pagina di destinazione non è disponibile. [Le risposte che sono poco più di un collegamento potrebbero essere eliminate.] (// stackoverflow.com/help/deleted-answers) – FelixSFD

Problemi correlati