如何将原始 Ansible 参数传递给 Windows cmd 而不进行任何编码/解码?

如何将原始 Ansible 参数传递给 Windows cmd 而不进行任何编码/解码?

我正在尝试设置某些 Windows 目录的权限,如下所示

# ansible example.com -m raw -a 'icacls D:\somedir\ /grant "! ЗАО. Руководство":F' -vvvvv

并出现有关无效参数的 Windows 错误

No config file found; using defaults
Loaded callback minimal of type stdout, v2.0
File lookup using /etc/ansible/host_files/example.com/mvs as file
<example.com> ESTABLISH WINRM CONNECTION FOR USER: mvs on PORT 5985 TO example.com
<example.com> WINRM CONNECT: transport=plaintext endpoint=http://example.com:5985/wsman

<example.com> EXEC icacls D:\somedir\ /grant "! .  C:>2>4AB2>" :F

<example.com> WINRM EXEC 'PowerShell' ['-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Unrestricted', '-EncodedCommand', 'aQBjAGEAYwBsAHMAIABEADoAXAAxAGMAXAAgAC8AZwByAGEAbgB0ACAAIgAhACAAFwQQBB4ELgAgACAEQwQ6BD4EMgQ+BDQEQQRCBDIEPgQiACAAOgBGAA==']
<example.com> WINRM RESULT u'<Response code 1, out "", err "Invalid parameter "!">'
example.com | FAILED | rc=1 >>
Invalid parameter "! ���. �㪮����⢮"

我发现两个问题:

  1. 从 Ansible 传递到 Windows 主机的西里尔字母参数“!ЗАО. Руководство”(这是 Windows 中的组名)的奇怪编码或解码。

  2. 在组名和权限之间添加额外的空格

    “编码 bla-bla-bla”:F

代替

"encoded bla-bla-bla":F

如何修复?

Ansible 使用源代码(于 2015 年 8 月 17 日签出)

# ansible --version
ansible 2.0.0 (devel 4068598c15) last updated 2015/08/17 23:09:54 (GMT +600)
  lib/ansible/modules/core: (detached HEAD dea5f5d15e) last updated 2015/08/17 23:10:13 (GMT +600)
  lib/ansible/modules/extras: (detached HEAD 210ee3febc) last updated 2015/08/17 23:10:35 (GMT +600)
  v1/ansible/modules/core: (detached HEAD f8d8af17cd) last updated 2015/08/17 23:10:53 (GMT +600)
  v1/ansible/modules/extras: (detached HEAD 495ad450e5) last updated 2015/08/17 23:11:11 (GMT +600)
  config file =
  configured module search path = None

并在 Gentoo Linux 上运行

# uname -a
Linux web 3.10.4-gentoo #1 SMP Sat Aug 3 02:25:18 NOVT 2013 x86_64 Intel(R) Core(TM)2 Quad CPU @ 2.40GHz GenuineIntel GNU/Linux

另一方面 - KVM 中的 Windows Server 2012 R2 标准版(在 vultr.com 上)

相关内容