此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
我们越来越近,谢谢您的帮助。