Как установить целевой сайт в командной строке 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
Но мне не удается использовать их в сочетании с файлом пакета.
Ответы
Ответ 1
Вы можете переопределить его, используя 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"
Ответ 2
Чтобы сделать то же самое в Powershell (см. Richard Szalay answer), вы должны быть немного осторожны в обработке аргументов командной строки, особенно в тех случаях, когда задействованы пробелы. Я считаю, что лучше передать их как массив, где требуемые аргументы командной строки эффективно разделяются на символ пробела. Обратите внимание, что строки ниже разделены запятыми, а также что имя параметра "IIS Web Application" разделено. Я оставил это на одной строке для улучшения удобочитаемости.
$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 + '"');