El comando se ejecuta bien a través de cmd pero no a través de PowerShell

El comando se ejecuta bien a través de cmd pero no a través de PowerShell

Este comando no funciona:

netsh advfirewall set allprofiles firewallpolicy blockinboundalways,allowoutbound

Este comando funciona:

netsh advfirewall set allprofiles state on

Intenté usar el comando invoke y &, pero no pude hacerlo funcionar. Cuando ejecuto el comando anterior en PS, me dice:

El número de argumentos proporcionados no es válido. Consulte la ayuda para conocer la sintaxis correcta.

Respuesta1

La coma es un carácter especial de PowerShell. En su caso se interpreta como un operador de matriz binaria. Crea una matriz con dos elementos blockinboundalwaysy allowoutbound. PowerShell inferior a v5 separará los elementos de la matriz con espacio cuando la matriz se pase a aplicaciones nativas. La línea de comando resultante pasada netshserá la siguiente:

netsh advfirewall set allprofiles firewallpolicy blockinboundalways allowoutbound

Que no es lo que quieres. Tienes que escapar de la coma o encerrarla entre comillas para interpretarla literalmente:

netsh advfirewall set allprofiles firewallpolicy blockinboundalways`,allowoutbound
netsh advfirewall set allprofiles firewallpolicy 'blockinboundalways,allowoutbound'

información relacionada