rabbitmqctl set_policy löscht den Caret-Anker (^) aus dem Regex-Muster

rabbitmqctl set_policy löscht den Caret-Anker (^) aus dem Regex-Muster

Ich führe dies von PowerShell aus aus, daher bin ich nicht sicher, ob dies in einer anderen Umgebung passieren würde (der reguläre Ausdruck selbst umfasst einfach alles außer denen, die mit „amq.“ beginnen).

Wenn ich den folgenden Befehl ausführe, wird das „^“ aus dem Muster entfernt:

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

Es gibt Folgendes aus:

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

Ich habe erfolglos versucht, dem Problem auf verschiedene Weise zu entgehen. Interessanterweise funktioniert es problemlos, wenn man es über das Web-Management-Plugin einstellt.

AKTUALISIEREN

Das Problem scheint damit zusammenzuhängen, dass es ^sich um ein reserviertes Zeichen in Batchdateien handelt (glaube ich) und nicht in Anführungszeichen steht, soweit es die Batchdatei betrifft (d. h. PS muss eine Zeichenfolge in Anführungszeichen für das Muster übergeben, aber es hat den regulären Ausdruck so übergeben, wie er ist). Alle der folgenden Arbeiten, basierend aufAbonnieren's Antwort:

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

Antwort1

PS 2.0 und höher:

Wenn Sie ein Werte-Array angeben, werden diese automatisch in separate Parameter erweitert.

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

Cmdlet verwenden 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 und höher:

... können Sie den --%Operator verwenden, der PowerShell anweist, die Analyse von diesem Punkt an bis zum Ende der Zeile zu beenden. Ab diesem Operator wird alles vom vom Programm verwendeten Parser analysiert.

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

Referenz:

verwandte Informationen