O comando é executado corretamente por meio do cmd, mas não por meio do PowerShell

O comando é executado corretamente por meio do cmd, mas não por meio do PowerShell

Este comando não funciona:

netsh advfirewall set allprofiles firewallpolicy blockinboundalways,allowoutbound

Este comando funciona:

netsh advfirewall set allprofiles state on

Tentei usar o comando Invoke e &, mas não consegui fazê-lo funcionar. Quando executo o comando acima no PS, ele me diz:

O número de argumentos fornecidos não é válido. Verifique a ajuda para obter a sintaxe correta.

Responder1

Vírgula é um caractere especial do PowerShell. No seu caso, é interpretado como um operador de array binário. Ele cria um array com dois elementos blockinboundalwayse allowoutbound. O PowerShell abaixo da v5 separará os elementos do array com espaço quando o array for passado para aplicativos nativos. A linha de comando resultante passada netshserá a seguinte:

netsh advfirewall set allprofiles firewallpolicy blockinboundalways allowoutbound

O que não é o que você quer. Você deve escapar da vírgula ou colocá-la entre aspas para interpretá-la literalmente:

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

informação relacionada