命令可以通过 cmd 正常执行,但不能通过 PowerShell

RMa*_*Mal 2 firewall powershell netsh

此命令不起作用:

netsh advfirewall set allprofiles firewallpolicy blockinboundalways,allowoutbound
Run Code Online (Sandbox Code Playgroud)

此命令有效:

netsh advfirewall set allprofiles state on
Run Code Online (Sandbox Code Playgroud)

我试过使用 invoke-command 和 &,但我无法让它工作。当我在 PS 中运行上述命令时,它告诉我:

提供的参数数量无效。检查帮助以获取正确的语法。

use*_*455 7

逗号是 PowerShell 的特殊字符。在您的情况下,它被解释为二元数组运算符。它创建包含两个元素blockinboundalways和的数组allowoutbound。当数组传递给本机应用程序时,v5 以下的 PowerShell 将使用空格分隔数组元素。传递给的结果命令行netsh如下:

netsh advfirewall set allprofiles firewallpolicy blockinboundalways allowoutbound
Run Code Online (Sandbox Code Playgroud)

这不是你想要的。您必须转义逗号或将其括在引号中才能按字面意思解释它:

netsh advfirewall set allprofiles firewallpolicy blockinboundalways`,allowoutbound
netsh advfirewall set allprofiles firewallpolicy 'blockinboundalways,allowoutbound'
Run Code Online (Sandbox Code Playgroud)