Как установить целевой веб-сайт в командной строке MSDeploy.exe

У меня есть пакет Web Deploy 3.5, который я хочу развернуть на удаленном сервере. Как указать имя сайта в командной строке MSDeploy.exe?

Вот что у меня есть до сих пор:

C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe
    -source:package='package.zip' 
    -dest:auto,computerName="ServerName",includeAcls="False" 
    -verb:sync 
    -disableLink:AppPoolExtension 
    -disableLink:ContentExtension 
    -disableLink:CertificateExtension 
    -setParamFile:"package.SetParameters.xml"

Но название сайта указано в файле package.SetParamters.xml, и я бы предпочел задать его в командной строке. Некоторые из мест, где я хочу развернуть этот пакет, — это разные сайты, расположенные на одном сервере, например, наши сайты Stage и UAT.

Я рассмотрел использование поставщиков iisApp и appHostConfig, описанных здесь: http://technet.microsoft.com/en-us/library/dd569040%28v=ws.10%29.aspx

Но у меня возникли проблемы с их использованием в сочетании с файлом пакета.


person dthrasher    schedule 10.01.2014    source источник


Ответы (3)


Вы можете переопределить его, используя setParam:

msdeploy.exe
    -source:package='package.zip' 
    -dest:auto,computerName="ServerName",includeAcls="False" 
    -verb:sync 
    -disableLink:AppPoolExtension 
    -disableLink:ContentExtension 
    -disableLink:CertificateExtension 
    -setParamFile:"package.SetParameters.xml"
    -setParam:name="IIS Web Application Name",value="site name"
person Richard Szalay    schedule 12.01.2014
comment
Мне трудно заставить msdeploy принять строку имени веб-приложения IIS. Это не анализирует кавычки должным образом. - person dthrasher; 22.01.2014
comment
@dthrasher - Powershell? - person Richard Szalay; 22.01.2014
comment
На самом деле, я использовал средство командной строки в TeamCity, моем сервере непрерывной интеграции. Так что в настоящее время я не делаю этого в среде PowerShell. Но он продолжает пытаться разделить параметры на пробелы между именем веб-приложения IIS. - person dthrasher; 23.01.2014
comment
У меня была такая же проблема с разделенными параметрами. Ответ Скотта, похоже, справился с этим. - person Paul Wade; 27.10.2014
comment
Я обнаружил, что setParam не позволяет мне переопределять пользовательские обязательные параметры, если я также использую setParamFile. У меня есть работающая командная строка msdeploy.exe, использующая только setParam, но как только я добавляю к ней setParamFile, она жалуется на различные требуемые пользовательские параметры, что аргумент не может быть нулевым или пустым. Если я удалю элементы setParam и вместо этого помещу их в SetParameters.xml, он снова заработает. Но, похоже, у вас не может быть обоих, по крайней мере, с обязательными пользовательскими параметрами. - person Oran Dennison; 03.03.2015
comment
Я пробовал все ответы отсюда и с кучи других страниц. Ни один из них не работал у меня... Но теперь у меня есть более простое решение: stackoverflow.com/questions/21056251/ - person Major; 21.05.2018

Чтобы сделать то же самое в Powershell (см. ответ Ричарда Салая), вы должны быть немного осторожны с обработкой аргументов командной строки. - особенно там, где задействованы пробелы. Я считаю, что лучше всего передавать их в виде массива, в котором нужные аргументы командной строки эффективно разделены на символ пробела. Обратите внимание, что строки ниже разделены запятыми, а также что имя параметра «Веб-приложение IIS» разделено. Я оставил это в одной строке для улучшения читаемости.

$msdeploy = "C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe";

$msdeployArguments = 
    '-source:package="package.zip"',
    '-dest:auto,computerName="<ServerName>",includeAcls="False"',
    '-verb:sync',
    '-disableLink:AppPoolExtension',
    '-disableLink:ContentExtension',
    '-disableLink:CertificateExtension',
    '-setParam:name="IIS', 'Web', 'Application', 'Name",value="<WebsiteName>"'

& $msdeploy $msdeployArguments

Обновить

У меня были проблемы, когда я вернулся к параметризации имени веб-сайта. Поскольку я использовал одинарные кавычки для строк, я решил использовать конкатенацию, а не интерполяцию строк. К сожалению, запятые, разделяющие элементы в массиве, по-видимому, были оценены до конкатенации. В результате вместо объединения строк в элементе массива я объединял новые элементы в массив. Мое решение состояло в том, чтобы использовать круглые скобки, чтобы окружить элемент массива и принудительно выполнить конкатенацию в первую очередь.

$msdeployArguments = 
    '-source:package="package.zip"',
    ('-dest:auto,computerName="' + $webServerName + '",includeAcls="True"'),
    '-verb:sync',
    '-disableLink:AppPoolExtension',
    '-disableLink:ContentExtension',
    '-disableLink:CertificateExtension',
    '-setParam:name="IIS', 'Web', 'Application', ('Name",value="' + $websiteName + '"');
person Scott Munro    schedule 12.09.2014
comment
Ух ты. Это безумие. Спасибо за чаевые! Я бы никогда не подумал об использовании массива аргументов для решения проблемы с пробелами. - person dthrasher; 16.09.2014
comment
Мне удалось установить параметр с помощью: -setParam:kind=ProviderPath,scope=iisApp,value=YourSiteName - person thepirat000; 24.11.2016
comment
я указал так: $siteNameParam='name="IIS Web Application Name",value="Default Web Site/TestService"' и использую его:msdeploy -verb:sync -source:package="pack/infoservice.wcf.zip" -dest:auto,computerName=iis-dtp -setParam:$siteNameParam - person Vladislav; 20.07.2017

Я пробовал все ответы отсюда (и в основном все ответы из Интернета), ни один из них не работал у меня. Не уверен, почему. Затем я нашел это страница, которая объясняет, как использовать MSDeploy для резервного копирования (я просто перевернул ее, чтобы использовать для развертывания). Секретным источником является "contentPath". Это немного вводит в заблуждение, потому что в данном случае это не путь на диске (однако я видел примеры, в которых он использовался для передачи физического пути размещенного сайта). Но я не хотел использовать Физический путь. И вы не должны! Хитрость заключается в том, что он может содержать имя веб-сайта или дочернего сайта (в IIS yoursite.com/shop, так что я предполагаю, что это путь в IIS).

Использование для резервного копирования:

msdeploy –verb:sync -source:contentPath="yoursite.com" -dest:package=c:\Backups\yoursite.zip

Использование для развертывания:

msdeploy –verb:sync -source:package=c:\Deployment\yoursite.zip -dest:contentPath="yoursite.com"

Я потратил впустую почти день с declareParam, setParam и т.д... Однако это так просто!

Надеюсь, поможет...

person Major    schedule 21.05.2018
comment
Помог и мне. Ни строка запроса «сайт» в URL-адресе службы веб-развертывания, ни имя -setParam не работали для меня. Спасибо, сэр! - person Владимiръ; 27.07.2021