我编写了一个节点JS脚本,该脚本应使用PowerShell命令行执行。然后将PowerShell响应返回给angularjs。 PowerShell命令执行需要5分钟以上的时间。因此,节点正在向angularjs发送空响应。为此,我尝试了回调函数。但是我得到了同样的空洞回应。请帮我解决这个问题。
这是用于在节点js中使用回调函数执行powershell的代码
let ps = new shell({
executionPolicy: 'Bypass',
noProfile: true
});
function getData(callback){
ps.addCommand('C:/Users/sowmi096/Desktop/Code/jobid.ps1',a)
ps.invoke()
.then(output => {
return callback(null,output);
})
.catch(err => {
return callback(null,err);
ps.dispose();
});
}
getData(function onGetData(err,data){
if(err)
res.send(err);
res.send(data);
});
答案 0 :(得分:0)
这里提出了一个非常类似的问题:
Execute Powershell script from Node.js
有人建议使用Edge.js库。它允许从Node内部执行各种语言。包括C#,J#、. Net,SQL,Python,PowerShell和其他CLR语言。请注意,Edge.js需要PowerShell 3.0,并且只能在Windows上运行,但是许多其他功能也可以在Mac和Linux上运行。
Javier Castro还有一个代码示例,可以从Powershell返回结果。
答案 1 :(得分:0)
tl;博士:
要使PowerShell命令完成执行,必须调用ps.dispose()
。
您似乎正在使用node-powershell
npm package,并尝试修改其示例代码。
不幸的是,在撰写本文时,this sample code is flawed是因为成功案例中缺少对ps.dispose()
代码的调用,这意味着PowerShell命令永远不会退出。
这是一个可行的示例(假设该软件包是通过npm install node-powershell
安装的):
const shell = require('node-powershell')
let ps = new shell({
executionPolicy: 'Bypass',
noProfile: true
});
// You can pack everything into the 1st argument or pass arguments as
// parameter-name-value objects; note the need to use null for [switch] parameters.
ps.addCommand("write-verbose", [ { verbose: null }, { message: 'hello, world'} ])
// IMPORTANT: ps.dispose() MUST be called for execution to finish.
ps.invoke()
.then(output => {
console.log(output)
ps.dispose() // This was missing from your code.
})
.catch(err => {
console.log(err)
ps.dispose()
});