У меня проблема с пробелами в моих параметрах, которые я пытаюсь отправить в 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.
Следующие варианты также потерпели неудачу
#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, а не на кли.
Параметры в массиве строк, предложенные императором 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 )
}
Используя метод из ] Ответ Кейта на Как запустить exe в PowerShell с параметрами с пробелами и кавычками , на который вы связались, выполнив echoargs -verb: dump -source: appHostConfig = $ sitename -verbose
дал мне следующий результат:
Arg 0 is <-verb:dump>
Arg 1 is <-source:appHostConfig=default>
Arg 2 is <web>
Arg 3 is <site>
Arg 4 is <-verbose>
Это объясняет недопустимый аргумент appHostConfig = default
, который видел msdeploy
.
Выполнение echoargs -verb: dump "-source: appHostConfig = $ sitename" -verbose
с $ sitename = "default web site"
, похоже, приводит к желаемым аргументам. :
Arg 0 is <-verb:dump>
Arg 1 is <-source:appHostConfig=default web site>
Arg 2 is <-verbose>
Хотя из вашего списка похоже, что это не сработало для вас.
Другой метод, который вы можете попробовать, - это создание списка аргументов в массиве, который PowerShell может автоматически исключить. Например, это дает тот же результат, что и выше:
[string[]]$msdeployArgs = @(
"-verb:dump",
"-source:appHostConfig=$sitename",
"-verbose"
)
echoargs $msdeployArgs