【问题标题】:How to quote this raw command in Ansible YAML?如何在 Ansible YAML 中引用这个原始命令?
【发布时间】:2016-04-28 10:40:51
【问题描述】:

我正在使用 Ansible 来管理一堆 Windows 客户端的配置。作为记录,Ansible 剧本(即食谱)是用 YAML 编写的。

我需要在每个客户端上运行这个命令,并且我可以在客户端机器上的 Powershell 提示符下成功地测试它:

> CMD /C 'control intl.cpl,, /f:"C:\Temp\intlsettings.xml"'

(注意单引号,因为文件名周围有双引号,所以需要)

现在我“只”需要编写一个 YAML 剧本并使用 Ansible 的原始模块将此命令发送到远程 Powershell 会话。这就是我卡住的地方。我的命令包含:'" 符号,所以我不知道如何正确引用它。

我已经尝试了一百万种变体,但到目前为止都没有成功:

CMD /C 'control intl.cpl,, /f:"C:\Temp\intlsettings.xml"'
"CMD /C 'control intl.cpl,, /f:"C:\\Temp\\intlsettings.xml"'"
"CMD /C 'control intl.cpl,, /f:\"C:\\Temp\\intlsettings.xml\"'"
"CMD /C 'control intl.cpl,, /f\:\"C\:\\Temp\\intlsettings.xml\"'"

有关信息,最终的剧本将如下所示:

---
- name: Configure keyboard mappings
  hosts: windows

  tasks:
  - name: apply keyboard mappings config
    raw: CMD /C 'control intl.cpl,, /f:"C:\Temp\intlsettings.xml"'

【问题讨论】:

    标签: string powershell yaml quoting


    【解决方案1】:

    如果你执行这个 powershell 命令

    CMD /C 'control intl.cpl,, /f:"C:\Temp\intlsettings.xml"'
    

    powershell 创建这个CommandLine:

    "C:\Windows\system32\cmd.exe" /C "control intl.cpl,, /f:"C:\Temp\intlsettings.xml""
    

    注意,在命令行中没有使用'

    但是,您不需要通过 cmd,因为您的命令中没有使用 cmd 功能。

    control.exe intl.cpl,, /f:"C:\Temp\intlsettings.xml"
    

    应该够了。

    我不知道ansible,但如果我正确理解documentationraw 之后的所有文本都会通过ssh 作为命令发送。这意味着,它被一些外壳解释。如果这个 shell 是 cmd.exe,这应该可以工作:

    tasks:
      - name: apply keyboard mappings config
        raw: control.exe intl.cpl,, /f:"C:\Temp\intlsettings.xml"
    

    如果shell是powershell(v3及以上(win8及以上默认,win7可安装)),这应该可以工作:

    tasks:
      - name: apply keyboard mappings config
        raw: control.exe --% intl.cpl,, /f:"C:\Temp\intlsettings.xml"
    

    【讨论】:

    • 谢谢,有机会我会测试一下。我可以得到的所有示例都使用 PowerShell 作为默认 shell。这是有道理的,因为我必须在 Windows 客户端上配置 PowerShell,以便它接受从 Ansible 发送的命令。这可能就是为什么需要 CMD /C 从 PowerShell 调用 CMD shell 的原因。无论如何,谢谢你的回复!
    • 如果 shell 实际上是 powershell 并且我正确理解了 ansible 文档,那么您的原始命令应该可以工作。我添加了另一个代码 sn-p,它也应该可以工作。如果两者都不起作用,我可能误解了 ansible 文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 2019-12-03
    • 1970-01-01
    • 2014-01-27
    • 2014-09-11
    • 1970-01-01
    • 2022-06-15
    相关资源
    最近更新 更多