2014-01-10 19 views
10

Ich habe ein Web Deploy 3.5-Paket, das ich auf einem Remote-Server bereitstellen möchte. Wie gebe ich den Namen der Site in der MSDeploy.exe-Befehlszeile an?So legen Sie die Zielwebsite für die MSDeploy.exe-Befehlszeile fest

Hier ist, was ich bisher:

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" 

Aber der Name der Website ist in der package.SetParamters.xml-Datei angegeben, und ich würde es vorziehen, sie auf der Kommandozeile. Einige der Orte, an denen ich dieses Paket bereitstellen möchte, sind verschiedene Sites, die sich auf demselben Server befinden, wie unsere Stage- und UAT-Sites. http://technet.microsoft.com/en-us/library/dd569040%28v=ws.10%29.aspx

Aber ich habe Probleme mit denen, in Kombination mit einer Paketdatei: hier beschriebenen iisapp und appHostConfig Anbieter bei Verwendung

Ich habe aussehen.

Antwort

17

Sie können es überschreiben setParam mit:

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" 
+0

Ich habe eine schwierige Zeit, Msdeploy zu erhalten, um die Zeichenfolge "IIS Web Application Name" zu akzeptieren. Es analysiert die Anführungszeichen nicht richtig. – dthrasher

+0

@dthrasher - Powershell? –

+3

Eigentlich habe ich den Befehlszeilen-Runner in TeamCity, meinem Continuous Integration Server, verwendet. Also mache ich das momentan nicht in der PowerShell-Umgebung. Aber es versucht weiterhin, die Parameter auf den Leerzeichen zwischen "IIS Web Application Name" aufzuteilen. – dthrasher

11

das gleiche in Powershell zu tun (siehe Richard Szalay's answer), haben Sie über die Befehlszeilenargument Handhabung ein wenig vorsichtig sein - insbesondere dort, wo Räume beteiligt sind. Ich finde, dass es am besten ist, sie als ein Array zu übergeben, wo die gewünschten Befehlszeilenargumente effektiv auf das Leerzeichen aufgeteilt werden. Beachten Sie, dass die folgenden Zeilen durch Kommas getrennt sind und dass der Parametername 'IIS Web Application' geteilt ist. Ich habe das auf einer Zeile zur besseren Lesbarkeit gelassen.

$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 

aktualisieren

ich Probleme hatte, als ich wieder ging die Website Name parametrisieren. Da ich einfache Anführungszeichen für die Strings verwendet hatte, entschied ich mich für eine Verkettung anstelle von string interpolation. Leider scheinen die Kommas, die die Elemente im Array begrenzt haben, vor der Verkettung ausgewertet worden zu sein. Das Ergebnis war, dass ich anstelle der Verkettung von Strings innerhalb eines Array-Elements neue Elemente mit dem Array verkettete. Meine Lösung bestand darin, Klammern zu verwenden, um das Array-Element zu umgeben und die Verkettung zuerst durchzuführen.

$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 + '"'); 
+1

Wow. Das ist verrückt. Danke für den Tipp! Ich hätte nie daran gedacht, ein Array mit Argumenten zu verwenden, um das Whitespace-Problem zu beheben. – dthrasher

+0

Ich konnte den Parameter mit setzen: '-setParam: kind = ProviderPath, scope = iisApp, value = YourSiteName' – thepirat000

+0

Ich angegeben, wie folgt:' $ siteNameParam = 'Name = "IIS Web Application Name", Wert = "Standard Web Site/TestService "'' und benutze es: 'msdeploy -verb: sync -source: package =" pack/infoservice.wcf.zip "-dest: auto, computerName = iis-dtp -setParam: $ siteNameParam' – Vladislav

Verwandte Themen