来自Powershell的MSBuild

来自Powershell的MSBuild,powershell,msbuild,Powershell,Msbuild,我正在尝试从MSBuild(从Powershell)运行同步,其中还包括预同步命令 我无法获得正确的命令。我尝试了多种方法,但最后一种方法是: [string[]]$msdeployArgs = @( "-verb:sync", "-preSync:runCommand='$preSyncCommand',waitInterval=30000", "-source:dirPath=$sourceFolder", "-dest:computerName=$serverName,us

我正在尝试从MSBuild(从Powershell)运行同步,其中还包括预同步命令

我无法获得正确的命令。我尝试了多种方法,但最后一种方法是:

[string[]]$msdeployArgs = @(
  "-verb:sync",
  "-preSync:runCommand='$preSyncCommand',waitInterval=30000",
  "-source:dirPath=$sourceFolder",
  "-dest:computerName=$serverName,userName=$username,password=$password,authType=basic,dirPath=$serviceFolder", 
  "-postSync:runCommand=$postSyncCommand,waitInterval=30000"
)

& "C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe" $msdeployArgs
我得到以下错误

错误:无法识别的参数 “-preSync:runCommand='F:\Projects\released\Release\u Scripts\WindowsServices\deploytopshelfserviceceprecommands.cmd 释放的.Maintenance.JobScheduler C:\MyCompany\Services\MyCompany.Maintenance.JobScheduler',waitInterval=30000“。 所有参数必须以“-”开头

请注意,在PreSyncCommand之后,是我想要传递给CMD文件的参数(以便它知道从何处卸载现有服务等)

我已经通过EchoArgs.exe运行了该参数,参数正常


如果有问题(可能),我正在运行TeamCity的powershell脚本。

我发现了问题所在。事实证明,问题不在于powershell,而在于MSDeploy。据我所知,MSDeploy不允许您传递带有参数的批处理文件。删除参数可以正常工作(但是您需要在批处理文件中对它们进行硬编码,或者想出其他方法动态生成bat文件)。

可能是引用问题?您可以尝试使用
“$preSyncCommand”
找到问题。我将添加它作为答案。