rabbitmqctl set_policy は正規表現パターンからキャレット (^) アンカーを削除します。

rabbitmqctl set_policy は正規表現パターンからキャレット (^) アンカーを削除します。

私はこれを PowerShell から実行しているので、別の環境でこれが発生するかどうかはわかりません (正規表現自体には、「amq.」で始まるものを除くすべてのものが含まれます)。

次のコマンドを実行すると、パターンから '^' が削除されます。

rabbitmqctl set_policy mirroring '^(?!(?:amq\.)).+$' '{"""ha-mode""":"""all"""}'

出力は次のようになります。

Setting policy "mirroring" for pattern "(?!(?:amq\\.)).+$" to "{\"ha-mode\":\"all\"}" with priority "0" ...

さまざまな方法でエスケープを試みましたが、成功しませんでした。興味深いことに、Web 管理プラグインから設定すると正常に機能します。

アップデート

この問題は、バッチファイルで予約文字になっていること(私の考えでは)と、バッチファイルに関する限り引用符で囲まれていないことに関係しているようです^(つまり、PSはパターンに引用符で囲まれた文字列を渡す必要がありますが、正規表現ではそのまま渡されていました)。以下のいずれかが機能します。ビートクラッカーの答え:

rabbitmqctl set_policy mirroring '"^(?!(?:amq\.)).+$"' '{\"ha-mode\":\"all\"}'

rabbitmqctl --% set_policy mirroring "^(?!(?:amq\.)).+$" {\"ha-mode\":\"all\"}

rabbitmqctl @('set_policy','mirroring','"^(?!(?:amq\.)).+$"','{\"ha-mode\":\"all\"}')

Start-Process -FilePath 'rabbitmqctl' -ArgumentList 'set_policy mirroring "^(?!(?:amq\.)).+$" {\"ha-mode\":\"all\"}'

答え1

PS 2.0以上:

値の配列を指定すると、それらは自動的に個別のパラメータに展開されます。

& rabbitmqctl @('set_policy mirroring', '^(?!(?:amq\.)).+$', '{ha-mode:all}')

コマンドレットを使用しますStart-Process

Start-Process -FilePath 'rabbitmqctl' -ArgumentList 'set_policy mirroring ^(?!(?:amq\.)).+$ {ha-mode:all}'

# Same as above, shortened using aliases and positional parameters

start rabbitmqctl 'set_policy mirroring ^(?!(?:amq\.)).+$ {ha-mode:all}'
saps rabbitmqctl 'set_policy mirroring ^(?!(?:amq\.)).+$ {ha-mode:all}'

PS 3.0以降:

--%...その時点から行の終わりまで解析を停止するように PowerShell に指示する演算子を使用できます。その演算子以降のすべては、プログラムで使用されるパーサーによって解析されます。

rabbitmqctl --% set_policy mirroring ^(?!(?:amq\.)).+$ {ha-mode:all}

参照:

関連情報