Ansible:如何处理win_shell变量的引号

此PowerShell脚本有效:

$serverInstance = "100.200.300.400,2211"

$database = "myDatabase"

Backup-SqlDatabase -ServerInstance $serverInstance -BackupSetName "$database Ansible Deployment Backup" -Database $database -verbose

但是,当我尝试将其转换为在Ansible中工作时,它失败了,因为由于端口的逗号而需要引用服务器实例变量。而且它希望备份集名称因空格而被引用(我认为)。

- name: Call PowerShell Module to backup database
  win_shell: Backup-SqlDatabase -ServerInstance “{{ serverInstance }}” -BackupSetName “{{ backupSetName }}” -Database {{ database }} -Verbose"
  register: backup_result

此语法给我这个错误:

  

“ cmd”:“ Backup-SqlDatabase -ServerInstance \“ 100.200.300.400,2211 \”   -BackupSetName \“ myDatabase Ansible部署备份\” -Database myDatabase-详细“

     

“ stderr”:“ Backup-SqlDatabase:执行时发生异常   Transact-SQL \ r \ n语句或批处理。\ r \ n在第1行:char:65 \ r \ n +   [控制台] :: InputEncoding =新对象文本。UTF8Encoding$ false;   \ r \ nBackup-SqlDataba ... \ r \ n +

我想我要为cmd获得此结果:

  

“ cmd”:Backup-SqlDatabase -ServerInstance“ 100.200.300.400,2211”   -BackupSetName“ myDatabase Ansible部署备份” -Database myDatabase-详细

我已经在该网站上阅读了与我的问题类似的所有问题,并尝试了所有示例。我已经尝试了单引号和双引号,转义引号和引号过滤器的每种组合都无济于事。我敢肯定这很简单。任何帮助将不胜感激。谢谢。

更新


serverInstance是一个额外的变量

serverInstance:“ 100.200.300.400,2211”

backupSetName是连接数据库额外变量和字符串的事实。

  • set_fact: backupSetName:“ {{数据库}} Ansible部署备份”

根据您对报价过滤器的建议,我将win_shell更改为以下内容:

win_shell:Backup-SqlDatabase -ServerInstance {{serverInstance | quote}} -BackupSetName {{backupSetName | quote}}-数据库{{database}} -Verbose

这是结果,请注意,backupSetName被引用了,但是serverInstance没有,是因为它认为它是列表而不是字符串?

“ cmd”:“ Backup-SqlDatabase -ServerInstance 100.200.300.400,2211 -BackupSetName'myDatabase Ansible Deployment Backup'-Database myDatabase -Verbose”,

该错误是由于从serverInstance变量中删除了逗号和端口号引起的。

“ stderr”:“ Backup-SqlDatabase:无法连接到服务器100.200.300.400。\ r

我们越来越近,谢谢您的帮助。

muling07 回答:Ansible:如何处理win_shell变量的引号

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3149613.html

大家都在问