Команда выполняется нормально через cmd, но не через PowerShell

Команда выполняется нормально через cmd, но не через PowerShell

Эта команда не работает:

netsh advfirewall set allprofiles firewallpolicy blockinboundalways,allowoutbound

Эта команда работает:

netsh advfirewall set allprofiles state on

Я пробовал использовать invoke-command и &, но не смог заставить это работать. Когда я запускаю указанную выше команду в PS, она мне говорит:

Недопустимое число аргументов. Проверьте справку для правильного синтаксиса.

решение1

Запятая — это специальный символ для PowerShell. В вашем случае она интерпретируется как оператор двоичного массива. Она создает массив с двумя элементами blockinboundalwaysи allowoutbound. PowerShell ниже v5 будет разделять элементы массива пробелом при передаче массива в собственные приложения. Результирующая командная строка, переданная в, netshбудет следующей:

netsh advfirewall set allprofiles firewallpolicy blockinboundalways allowoutbound

Это не то, что вам нужно. Вам нужно экранировать запятую или заключить ее в кавычки, чтобы интерпретировать ее буквально:

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

Связанный контент