Javascript Nodejs execSync工作但不工作,更改为系统无效

Javascript Nodejs execSync工作但不工作,更改为系统无效,javascript,node.js,powershell,Javascript,Node.js,Powershell,我想在windows防火墙中阻止chrome.exe。完成任务的命令是 netsh advfirewall firewall add rule name="Block Chrome" dir=out action=block program="C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" enable=yes' 当通过PowerShell发出上述命令时,该命令工作正常。但是当我试着这么做的时候 在Nodejs中 con

我想在windows防火墙中阻止chrome.exe。完成任务的命令是

netsh advfirewall firewall add rule name="Block Chrome" dir=out action=block program="C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" enable=yes'
当通过PowerShell发出上述命令时,该命令工作正常。但是当我试着这么做的时候 在Nodejs中

const execSync=需要“子进程”。execSync, 命令='netsh advfirewall firewall add rule name=Block Chrome dir=out action=Block program=C:\program Files x86\Google\Chrome\Application\Chrome.exe enable=yes' const result=execSync命令 console.log结果 它打印

Ok.
通过输出,我假设命令正在执行。但Chrome不会因此受到影响。它仍然可以访问互联网

当我在PowerShell中运行相同的命令时,它会立即阻止chrome。我想知道为什么在Nodejs上运行该命令不能按预期工作


鉴于Nodejs拥有管理员权限,这里会出现什么问题?

您需要避开反斜杠:

命令='netsh advfirewall firewall add rule name=Block Chrome dir=out action=Block program=C:\\program Files x86\\Google\\Chrome\\Application\\Chrome.exe enable=yes'
它起作用了,但请解释一下,这样其他读者就可以从这个答案中得到最好的答案。反斜杠用于JS字符串中的转义。如果不在Windows路径中转义它,它只意味着转义下一个字符,这在大多数情况下对于非保留字符是不可操作的。如果您在控制台中计算字符串命令的路径部分,您可以看到它对解析器的意义:“program=C:\program Files x86\Google\Chrome\Application\Chrome.exe”变为“program=C:program Files x86GoogleChromeApplicationchrome.exe”。我理解,但它得到了相同的输出,这让我很困惑。如果命令出错,则输出必须是某个错误,而不是Ok。如果在powershell中使用program=C:program Files x86GoogleChromeApplicationchrome.exe部分运行命令,是否会出现任何错误?JavaScript引擎和Node.js都不知道是否使用反斜杠作为转义字符,或者只是误用了它们。它是有效的语法,按原样处理。对于netsh程序来说,路径C:program Files x86GoogleChromeApplicationchrome.exe似乎在某种程度上也是有效的,因此在接收到的输出中不会出现任何错误。但此路径与Chrome进程路径不匹配,因此阻塞不起作用。