在我的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在生成中使用了参数 …