Как установить целевой сайт в командной строке 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 + '"');