У меня проблема с пробелами в моих параметрах, которые я пытаюсь отправить в msdeploy из сценария powershell.
Существует ряд других связанных статей, но ни одна из них не решает проблему.
Проблемы с использованием Power Shell и MSDeploy.
Аналогичная проблема SO, которая не работает: Как запустить exe в powershell с параметрами с пробелами и кавычками
Ошибка PowerShell: Выполнение команд, требующих кавычек и переменных, практически невозможно
Еще одна проблема SO, которая не работает: Передача параметров в PowerShell 2.0
Простейший пример, который успешно, а затем не удается, когда я усложняю его, - это просто дамп веб-сайта по умолчанию.
$ msdeploy = "C: \ Program Files \ IIS \ Microsoft Web Deploy \ msdeploy.exe"
& $ msdeploy -verb: dump -source: appHostConfig = `'веб-сайт по умолчанию`' -verbose
== УСПЕХ
Этот?
$ sitename = "веб-сайт по умолчанию"
& $ msdeploy -verb: dump -source: appHostConfig = $ sitename -verbose
== FAIL со следующей ошибкой
msdeploy.exe: Ошибка: нераспознанный аргумент "-source:" appHostConfig = default ". Все аргументы должны начинаться с "-".
На C: \ xxx \ test.ps1: 122 char: 6
+ &
+ CategoryInfo: NotSpecified: (Ошибка: Unrecogn ... начинается с "-" .: String) [], RemoteException
+ FullyQualifiedErrorId: NativeCommandError
Количество ошибок: 1.
Следующие варианты также потерпели неудачу
# СБОЙ
$ sitename = `'веб-сайт по умолчанию`'
$ sitename = `'" веб-сайт по умолчанию "`'
$ sitename = "` 'веб-сайт по умолчанию`' "
$ sitename = "веб-сайт по умолчанию"
$ sitename = "'веб-сайт по умолчанию'"
& $ msdeploy -verb: dump "-source: appHostConfig = $ sitename" -verbose
& $ msdeploy -verb: dump -source: appHostConfig = "$ sitename" -verbose
& $ msdeploy -verb: dump -source: appHostConfig = '$ sitename' -verbose
& $ msdeploy -verb: dump -source: appHostConfig = `'$ sitename`' -verbose
& $ msdeploy -verb: dump -source: appHostConfig = `" $ sitename` "-verbose
Я в растерянности. Все, с кем я работаю, в растерянности. Серьезно это отстой. Я любил Powershell. Я любил msdeploy. Я не могу сказать, что я люблю их соединять. Похоже, что было бы проще сосредоточиться на API, а не на клиенте.
EDIT:
Параметры в массиве строк, предложенные Emperor XLII, работают хорошо. Альтернативное решение представлено в следующей статье: Испытания и трудности использования MSDeploy с PowerShell
function PushToTarget([string]$server, [string]$remotePath, [string]$localPath) {
cmd.exe /C $("msdeploy.exe -verb:sync -source:contentPath=`"{0}`" -dest:computerName=`"{1}`",contentPath=`"{2}`" -whatif" -f $localPath, $server, $remotePath )
}