Этот сценарий 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 Резервное копирование для развертывания \" -Database myDatabase -Verbose "
" stderr ":" Backup-SqlDatabase: возникла исключительная ситуация при выполнении Transact-SQL \ r \ nstatement или batch. \ R \ nAt строка: 1 символ: 65 \ r \ n + [Console] :: InputEncoding = New-Object Text.UTF8Encoding $ false; \ r \ nBackup-SqlDataba ... \ r \n +
Мне кажется, я хочу получить этот результат для cmd:
"cmd": Backup-SqlDatabase -ServerInstance «100.200.300.400,2211» -BackupSetName «myDatabase AnsibleРезервное копирование развертывания »-Database myDatabase -Verbose
Я прочитал все вопросы, похожие на мою проблему на этом сайте, и попробовал каждый пример. Я пробовал каждую комбинацию одинарных и двойных кавычек, экранирование кавычек и фильтр цитатбезрезультатно. Я уверен, что этопросто. Любая помощь будет принята с благодарностью. Спасибо.
ОБНОВЛЕНИЕ
ServerInstance является дополнительной переменной
serverInstance: "100.200.300.400,2211"
BackupSetName является фактомобъединить дополнительную переменную базы данных и строку.
- set_fact: backupSetName: "{{database}} Ansible Deployment Backup"
Я изменил win_shell на следующее, основываясь наВаша рекомендация фильтра цитат:
win_shell: Backup-SqlDatabase -ServerInstance {{serverInstance |цитата}} -BackupSetName {{backupSetName |quote}} -Database {{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
Мы приближаемся, спасибо за вашу помощь.