String 如何在Ansible YAML中引用此原始命令?
我正在使用Ansible管理大量Windows客户端的配置。为了记录在案,Ansible剧本(即食谱)是用YAML编写的 我需要在每个客户端上运行此命令,并且我可以在客户端计算机上的Powershell提示符中成功测试它:String 如何在Ansible YAML中引用此原始命令?,string,powershell,yaml,quoting,String,Powershell,Yaml,Quoting,我正在使用Ansible管理大量Windows客户端的配置。为了记录在案,Ansible剧本(即食谱)是用YAML编写的 我需要在每个客户端上运行此命令,并且我可以在客户端计算机上的Powershell提示符中成功测试它: > CMD /C 'control intl.cpl,, /f:"C:\Temp\intlsettings.xml"' (注意单引号,这是必需的,因为文件名周围有双引号) 现在我“只”需要编写一个YAML剧本,并使用Ansible的原始模块将此命令发送到远程Power
> 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"'
如果执行此powershell命令
CMD /C 'control intl.cpl,, /f:"C:\Temp\intlsettings.xml"'
powershell创建以下内容:
注意,命令行中不使用“
但是,您不需要使用cmd,因为命令中没有使用cmd功能
control.exe intl.cpl,, /f:"C:\Temp\intlsettings.xml"
应该足够了
我不知道ansible,但是如果我理解正确,raw
之后的所有文本都是通过ssh作为命令发送的。这意味着,它是由某个shell解释的。如果这个shell是cmd.exe,这应该可以工作:
tasks:
- name: apply keyboard mappings config
raw: control.exe intl.cpl,, /f:"C:\Temp\intlsettings.xml"
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"
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的原因。无论如何,感谢您的reply!如果shell实际上是powershell,并且我正确理解了ansible文档,那么您的原始命令应该可以工作。我添加了另一个代码段,这也应该可以工作。如果两者都不能工作,那么我可能误解了ansible文档。