通过 tfs buildagent 启动时,bitsadmin 不工作

问题描述

我是脚本编写新手,但有一个我无法解决的问题。

我正在编写一个 powershell 脚本,用于下载一些安装文件。 (exe,msi,zip)

它将从 msbuild 项目启动,由 tfs 中的 buildagent 执行。问题是,它不会开始下载。我使用了以下命令:

bitsadmin /transfer nodetest /download /dynamic /priority FOREGROUND "https://nodejs.org/dist/v14.15.5/node-v14.15.5-x64.msi" "C:\temp\buildPrerequisites\nodejstest.msi"

当我连接到 buildagent 并使用 powershell 窗口中的命令时,它将按预期工作。我还确保从 msbuild 文件正确执行脚本。builduser 具有管理权限。

有人有想法吗?

提前致谢

解决方法

我将下面添加到我的 .csproj 文件中,并在我的管道中使用 msbuild 任务进行构建。对我来说效果很好。

<Target Name="download" BeforeTargets="BeforeBuild">
   <Exec Command="C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -executionpolicy Unrestricted -command &quot;&amp; { bitsadmin /transfer nodetest /download /dynamic /priority FOREGROUND https://nodejs.org/dist/v14.15.5/node-v14.15.5-x64.msi C:\temp\buildPrerequisites\nodejstest.msi } &quot;" LogStandardErrorAsError="true" ContinueOnError="false" />
</Target>

上述目标 download 将在您构建项目时自动执行。因为它添加了 BeforeTargets 依赖项到目标 BeforeBuild

如果您在检查构建日志时发现目标未执行。这可能是因为您没有为 download 目标设置依赖目标。如下图:

<Target Name="download" >
 ..
</Target>

然后您需要确保正确配置 msbuild 任务以运行 download 目标

- task: MSBuild@1
  displayName: 'Build'
  inputs:
    solution: **/myProject.csproj
    msbuildArguments: /t:download

更新:

您也可以使用 Invoke-WebRequest。见下文:

<Exec Command="C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -executionpolicy Unrestricted -command &quot;&amp; { Invoke-WebRequest -Uri https://nodejs.org/dist/v14.15.5/node-v14.15.5-x64.msi -OutFile C:\test\buildPrerequisites\nodejstest.msi } &quot;" LogStandardErrorAsError="true" ContinueOnError="false" />