Javascript 在Node.js中执行PowerShell脚本

Javascript 在Node.js中执行PowerShell脚本,javascript,node.js,powershell,Javascript,Node.js,Powershell,我使用node.js和Express.js创建注册应用程序 所以它有名称表单、密码表单和提交按钮 我想在单击submit按钮时运行powershell脚本。此脚本意味着,添加本地windows用户并设置密码 在PowerShell中,此脚本运行良好。此powershell脚本应以管理员身份运行 $PASSWORD= ConvertTo-SecureString –AsPlainText -Force -String kamisama123@@ New-LocalUser -Name "

我使用node.js和Express.js创建注册应用程序

所以它有名称表单、密码表单和提交按钮

我想在单击submit按钮时运行powershell脚本。此脚本意味着,添加本地windows用户并设置密码

在PowerShell中,此脚本运行良好。此powershell脚本应以管理员身份运行

$PASSWORD= ConvertTo-SecureString –AsPlainText -Force -String kamisama123@@
New-LocalUser -Name "gohan" -Description "sleepy" -Password $PASSWORD
执行此命令后,将创建本地用户

我在代码中使用节点powershell包。这段代码表示当我提交my information并运行PowerShell脚本并将信息添加到mongodb中时

router.post(`/submit`, async function (req, res) {
  let name = req.body.name; 
  let password = req.body.password; 
  let passwordCheck = req.body.passwordCheck;
  let company = req.body.company; 
  let registerStatus = false; 
  let executives = req.body.executives; 
  let registerDate = Date.now();


  let ps = new Shell();

  let cmd = new PSCommand(`$PASSWORD= ConvertTo-SecureString ?AsPlainText -Force -String ${password}`)
  let script = new PSCommand(`New-LocalUser -Name "${name}" -FullName "${name}" -Description "${name}" -PasswordNeverExpires -Password $PASSWORD`)
  ps.addCommand(cmd);
  ps.addCommand(script);
ㅡㅛ
  try {
    if (password !== passwordCheck) { 
      res.redirect('/') 
    } else {
      let encodedPassword = Base64.encode(password);

      await User.create({
        name,
        password: encodedPassword,
        company,
        registerStatus,
        executives,
        registerDate
      }, (err, result) => {
        if (err) throw err;
      })
      res.redirect(`/success/${name}`)
    }
  } catch (err) {
    throw err;
  }
})
但这个错误会引发

(node:21596) UnhandledPromiseRejectionWarning: TypeError: Shell is not a constructor
我不知道错误来自哪里。

构造函数是来自面向对象编程(OOP)的一个术语,OOP中的每个对象都有一个构造函数函数

对于
shell
对象,构造函数不能为空(
shell()
有空括号)

通常,
shell
的构造函数有两个参数:执行策略和noProfile

   let ps = new shell({
  executionPolicy: 'Bypass',
  noProfile: true
});

这可能是解决这个问题的一个办法。powershell脚本必须包装在nodejs中的承诺中(可能是点源代码):

Powershell和node.js还可能实现OOP(面向对象编程)设计范例和语义,即在编写面向对象代码时,每个类都必须有一个构造函数(
new()
)和一个析构函数(
remove
…),并且应该有
get()
set()
方法来访问(读和写)类的字段(或属性)。在ps中,这是严格实现的


也可以在PS中使用面向对象的设计模式(参见DBZ参考:)。你能粘贴整个脚本吗?我们看不到这里定义的用户函数。还要确保加载的类型为
constshell=require('node-powershell')@FoxDeploy完整代码在我的github指南中。是否有任何原因使您必须使用
节点powershell
?如果没有,您可以使用内置到节点的
子进程。