如何使用childprocess和nodejs执行windows powershell命令?

w8f9ii69  于 2022-11-03  发布在  Node.js
关注(0)|答案(4)|浏览(367)

我正在尝试通过nodejs脚本运行powershell命令。我发现以下两篇文章向我展示了与我试图实现的类似的东西:Execute Windows Commands with NodejsExecute powershell script from nodejs显示器
在一个按钮点击事件中,我试图列出当前连接到系统的usb设备及其驱动器号(C,D,E等)。如果我在powershell中运行该命令,它会工作(虽然我无法让它显示驱动器号)。但是,如果我将其作为脚本的一部分运行,它就不工作了。下面是我的代码:

if (process.platform === 'win32' || process.platform === 'win64') {
    exec("powershell.exe",["GET-WMIOBJECT win32_diskdrive | Where { $_.InterfaceType –eq 'USB' }"], function (err, stdout, stderr) {
        console.log(err);
        console.log(stdout);
        console.log(stderr);
    });
}

我做错了什么?

pftdvrlh

pftdvrlh1#

您可以使用Node-PowerShell
Node-PowerShell利用了当今技术世界中存在的两个最简单、有效和容易的工具。一方面,NodeJS在javascript世界中进行了一场革命,另一方面,PowerShell最近推出了一个最初的开源、跨平台版本。通过将它们连接在一起,您可以创建任何要求您创建的解决方案。无论您是程序员、IT人员还是开发运维人员。

rfbsl7qr

rfbsl7qr2#

我认为您应该在代码前加上-command。默认的PowerShell语法是:powershell.exe -command "get-wmiobject ..." .
大概是这样的:

exec("powershell.exe",["-command \"Get-WmiObject -Class win32_diskdrive | Where { $_.InterfaceType -eq 'USB' }\""], function (err, stdout, stderr) {
    console.log(err);
    console.log(stdout);
    console.log(stderr);
});
uemypmqf

uemypmqf3#

另一种方式......

exec('command here', {'shell':'powershell.exe'}, (error, stdout, stderr)=> {
  // do whatever with stdout
})
iqxoj9l9

iqxoj9l94#

您将需要使用..请求child_process

var exec = require("child_process").exec;

然后,您将需要调用exec()来执行子进程,后跟您希望子进程执行的命令,如下所示..

exec('CommandHere', {'shell':'powershell.exe'}, (error, stderr, stdout) => {
    if (error !== null) {
        // Do something
    }
});

下面是一个使用Powershell的set-locationgci命令在指定目录中递归搜索文件并返回其相对路径的示例...

var exec = require("child_process").exec;
var folder = "C:\\Users\\winUser\\just\\some\\folder\\location";
var file = "test.txt";

exec('set-location ' + '"' + folder + '"' + 
';' + ' gci -path ' + '"' + folder + '"' + 
' -recurse -filter ' + '"' + file + '"' + 
' -file | resolve-path relative', 
{'shell':'powershell.exe'}, (error, stderr, stdout) => {
    var filePath = stdout.substring(stdout.indexOf(".\\") + 2).trim("\n");
    if (error !== null) {
        console.log("Cannot locate the given file \n");
        console.log(error);
    }

    console.log("File located! \n Path: " + filePath);

});

希望这对任何面临这个问题的人都有帮助。

相关问题