Rabbitmqctl set_policy remove a âncora circunflexa (^) do padrão regex

Rabbitmqctl set_policy remove a âncora circunflexa (^) do padrão regex

Estou executando isso no PowerShell, então não tenho certeza se isso aconteceria em um ambiente diferente (o próprio regex inclui apenas tudo, exceto aqueles que começam com 'amq.').

Quando executo o seguinte comando, o '^' é eliminado do padrão:

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

Ele produz o seguinte:

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

Eu tentei escapar de diferentes maneiras, sem sucesso. Curiosamente, configurá-lo no plugin de gerenciamento da web funciona bem.

ATUALIZAR

O problema parece estar relacionado ao fato ^de ser um caractere reservado em arquivos em lote (eu acho), e não estar entre aspas no que diz respeito ao arquivo em lote (ou seja, PS precisa passar uma string entre aspas para o padrão, mas estava passando no regex como está). Qualquer um dos seguintes trabalhos, com base embeatcrackerresposta:

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\"}'

Responder1

PS 2.0 e superior:

Se você especificar uma matriz de valores, ela os expandirá automaticamente em parâmetros separados.

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

Usando Start-Processcmdlet.

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 e superior:

... você pode usar o --%operador que informa ao PowerShell para interromper a análise desse ponto em diante até o final da linha. Tudo a partir desse operador é analisado pelo analisador usado pelo programa.

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

Referência:

informação relacionada