Как вызвать msdeploy из powershell, когда параметры есть пробелы?

У меня проблема с пробелами в моих параметрах, которые я пытаюсь отправить в 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 )
}

25
задан Community 23 May 2017 в 11:55
поделиться

1 ответ

Используя метод из ] Ответ Кейта на Как запустить 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
14
ответ дан 28 November 2019 в 21:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: