rabbitmqctl set_policy从正则expression式中删除脱字符(^)锚

我从PowerShell运行这个,所以我不知道这是否会发生在不同的环境(正则expression式本身只包括除了那些以“amq。”开头的东西)。

当我运行下面的命令,'^'从模式中删除:

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

它输出以下内容:

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

我尝试过以不同的方式逃脱它,没有任何成功。 有趣的是,从networkingpipe理插件设置它工作正常。

UPDATE

这个问题似乎与^在batch file(我认为)中是一个保留的字符有关,并且就batch file而言并没有被引用(即,PS需要传入引用string中的模式,但它是按原样传递正则expression式)。 基于beatcracker的回答,以下任何一项工作:

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

PS 2.0及更高版本:

如果您指定了一个值的数组,它会自动将它们扩展为单独的参数。

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

使用Start-Process cmdlet。

 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停止从该点开始parsing,直到行结束。 从那个运算符开始的所有东西都被程序使用的parsing器parsing。

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

参考:

  • PowerShell和外部命令做对了