У меня возникает проблема с пробелами в моих параметрах, которые я пытаюсь отправить в msdeploy из powershell script.
Существует ряд других связанных статей, но ни одна из них не решает проблему.
Проблемы с использованием Power Shell и MSDeploy.
Аналогичная проблема SO, которая не работает: Как запустить exe в powershell с параметрами с пробелами и кавычками
PowerShell BUG: Выполнение команд, для которых требуются кавычки и переменные, практически невозможно
Еще одна проблема 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.
Следующие изменения также не удались
#FAIL
$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 вместо cli.
EDIT:
Параметры в массиве строк, предложенные императором 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 )
}