Как да зададете целеви уебсайт на командния ред 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 (вижте отговора на Richard Szalay), трябва да сте малко внимателни относно обработката на аргументите на командния ред - особено там, където са включени пространства. Намирам, че е най-добре да ги подадете като масив, където желаните аргументи на командния ред са ефективно разделени на знака за интервал. Обърнете внимание, че редовете по-долу са разделени със запетая и че името на параметъра „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 + '"');
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 за BackUps (току-що го обърнах, за да го използвам за разполагане). Тайната вода е "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