コマンドは cmd では正常に実行されますが、PowerShell では実行されません。

コマンドは cmd では正常に実行されますが、PowerShell では実行されません。

このコマンドは機能しません:

netsh advfirewall set allprofiles firewallpolicy blockinboundalways,allowoutbound

このコマンドは次のように機能します:

netsh advfirewall set allprofiles state on

私はinvoke-commandと&を使ってみましたが、うまくいきませんでした。上記のコマンドをPSで実行すると、次のように表示されます。

指定された引数の数が無効です。正しい構文についてはヘルプを確認してください。

答え1

カンマは PowerShell の特殊文字です。この場合、バイナリ配列演算子として解釈されます。2 つの要素を持つ配列を作成します。PowerShell バージョン 5 より前のバージョンでblockinboundalwaysは、allowoutbound配列がネイティブ アプリケーションに渡されるときに、配列要素がスペースで区切られます。渡される結果のコマンド ラインはnetsh次のようになります。

netsh advfirewall set allprofiles firewallpolicy blockinboundalways allowoutbound

これは望んでいることではありません。文字どおりに解釈するには、カンマをエスケープするか、引用符で囲む必要があります。

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

関連情報