来自 Powershell 的 MSBuild

MSBuild from Powershell

我正在尝试 运行 从 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

我收到以下错误。

Error: Unrecognized argument '"-preSync:runCommand='F:\Projects\Unleashed\Release_Scripts\WindowsServices\deployTopShelfServicePreCommands.cmd Unleashed.Maintenance.JobScheduler C:\MyCompany\Services\MyCompany.Maintenance.JobScheduler',waitInterval=30000"'. All arguments must begin with "-".

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

我已经 运行 通过 EchoArgs.exe 传递了参数,并且参数没问题。

如果重要(可能),我正在 运行使用 TeamCity 的 powershell 脚本。

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