【问题标题】:Execute PowerShell script in Node.js在 Node.js 中执行 PowerShell 脚本
【发布时间】:2021-02-05 19:31:23
【问题描述】:

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

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

我想做,当我点击提交按钮时,运行 powershell 脚本。该脚本的意思是,添加本地windows用户并设置密码。

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

$PASSWORD= ConvertTo-SecureString –AsPlainText -Force -String kamisama123@@
New-LocalUser -Name "gohan" -Description "sleepy" -Password $PASSWORD

执行此命令后,本地用户被创建。

我在我的代码中使用 node-powershell 包。此代码意味着当我提交我的信息并运行 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

我不知道错误来自哪里。

【问题讨论】:

  • 喜欢 DBZ 参考 :)。你可以粘贴整个脚本吗?我们没有看到这里定义的 User 函数。还要确保您正在使用 const Shell = require('node-powershell'); 加载类型
  • @FoxDeploy 完整代码在我的 github gist 中。 gist.github.com/writingdeveloper/…
  • 你有什么理由一定要使用node-powershell吗?如果没有,你可以使用 Node 内置的child_process

标签: javascript node.js powershell


【解决方案1】:

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

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

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

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

https://rannn505.gitbook.io/node-powershell/start https://www.jeansnyman.com/posts/executing-powershell-commands-in-a-nodejs-api/

How to execute Powershell script function with arguments using Node JS? 可能是解决此问题的方法。 powershell 脚本必须包含在 nodejs 中的 promise 中(并且可能是点源代码):

How to execute Powershell script function with arguments using Node JS?

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

在PShttps://dfinke.github.io/powershell,%20design%20patterns/2018/04/13/PowerShell-And-Design-Patterns.html中也可以使用面向对象的设计模式

【讨论】:

    猜你喜欢
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2012-09-18
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多