You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ansible Playbook变量两侧添加双引号?附PowerShell示例

问题:如何给Ansible Playbook中的{{ hosts }}变量添加双引号?

其实你现在写的代码里已经给{{ hosts }}加上双引号啦!看你win_shell里的这两行:

$a = Get-ClusterGroup | Where-Object {$_.Name -eq "{{ hosts }}" -and $_.State -eq 'Online'}
Start-VM -Name "{{ hosts }}" -ComputerName $b

这里的"{{ hosts }}"就是正确的写法——Ansible执行时会先把变量替换成实际值,最终生成的PowerShell命令里,这个值就是被双引号包裹的。

不过如果你的hosts变量值可能包含空格、双引号这类特殊字符,直接写"{{ hosts }}"可能会让PowerShell解析出错。这种情况下,更稳妥的方式是用Ansible的quote过滤器,它会自动帮你处理转义,确保生成的字符串安全可靠:

---
- hosts: all
  gather_facts: no
  tasks:
    - name: hyper-v shutdown vm
      win_shell: |
        $a = Get-ClusterGroup | Where-Object {$_.Name -eq {{ hosts | quote }} -and $_.State -eq 'Online'}
        $b = $a.OwnerNode
        Start-VM -Name {{ hosts | quote }} -ComputerName $b

用{{ hosts | quote }}的话,不管变量值里有什么特殊字符,都会被正确包裹成双引号字符串,比如变量值是my "test" hosts,过滤器会自动转义成"my \"test\" hosts",PowerShell就能正常识别了。

总结一下:

  • 如果变量值是简单的无特殊字符的字符串,你原来的"{{ hosts }}"写法完全没问题
  • 如果变量值可能包含特殊字符,推荐用quote过滤器来处理,更健壮

内容的提问来源于stack exchange,提问作者user197267

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:20:45