小编Mik*_*řík的帖子

在nodejs中执行长时间运行的powershell脚本

在我的nodejs项目中,我需要检测USB闪存驱动器何时插入/拔出。我选择使用 powershell 脚本并使用 child_process exec 或 spawn 运行它。

ps脚本.ps1

Write-Host "listening for Win32_VolumeChangeEvent";
Register-WmiEvent -Query "SELECT * FROM Win32_VolumeChangeEvent" -Action {Write-Host "something happened"} | Out-Null;
Run Code Online (Sandbox Code Playgroud)

我不是 powershell 方面的专家,但它应该只监听volumeChangeEvent并something happened在它触发时写入

Nodejs 使用以下代码将其作为子项生成

节点脚本.js

var spawn = require('child_process').spawn;
var child = spawn('powershell.exe', ['psscript.ps1']);
child.stdout.on('data', function(data){
    console.log('DATA:', data.toString());
});
child.stdout.on('close', function(data){
    console.log('psscript closed');
});
Run Code Online (Sandbox Code Playgroud)

它应该捕获孩子的标准输出上的任何内容并解析它。出于演示目的,它只是打印出带有前缀的 string DATA:

这是日志。nodescript 生成 psscript 并按DATA:我想要的方式打印其输出。问题是 psscript 关闭并且 nodejs 也退出,所以我永远不会收到事件。

C:\myproject>node nodescript.js
DATA: listening for Win32_VolumeChangeEvent
DATA:

psscript closed

C:\myproject>
Run Code Online (Sandbox Code Playgroud)

所以我一直在寻找一种方法让powershell不关闭。我最终-noexit在生成中使用了参数 …

powershell node.js

6
推荐指数
1
解决办法
2189
查看次数

标签 统计

node.js ×1

powershell ×1