使用 PowerShell 下载安全文件

E. *_*aal 8 powershell azure-devops

我正在尝试为需要从库下载安全文件的VSTS 创建一个新的发布任务。但是,当我运行以下 PowerShell 脚本时,没有显示安全文件,但其中有两个。这可能是没有足够的权利吗?应该怎么改。

另一个问题:当我能够列出安全文件时,我想下载特定的文件。我还没有找到任何关于如何做到这一点的例子。有谁知道一个例子?

$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/distributedtask/securefiles"

Write-Host "URL: $url"

$secureFiles = Invoke-RestMethod -Uri $url -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host "SecureFiles: $secureFiles"
Run Code Online (Sandbox Code Playgroud)

小智 6

我能够使用 REST API、任务的访问令牌和应用程序/八位字节流的 Accept 标头下载安全文件。我启用了“允许脚本访问 OAuth 令牌”。这里我的 task.json 使用名为“SecureFile”的安全文件。

$secFileId = Get-VstsInput -Name SecureFile -Require
$secTicket = Get-VstsSecureFileTicket -Id $secFileId
$secName = Get-VstsSecureFileName -Id $secFileId
$tempDirectory = Get-VstsTaskVariable -Name "Agent.TempDirectory" -Require
$collectionUrl = Get-VstsTaskVariable -Name "System.TeamFoundationCollectionUri" -Require
$project = Get-VstsTaskVariable -Name "System.TeamProject" -Require
$filePath = Join-Path $tempDirectory $secName

$token= Get-VstsTaskVariable -Name "System.AccessToken" -Require
$user = Get-VstsTaskVariable -Name "Release.RequestedForId" -Require

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $User, $token)))
$headers = @{
    Authorization=("Basic {0}" -f $base64AuthInfo)
    Accept="application/octet-stream"
} 

Invoke-RestMethod -Uri "$($collectionUrl)$project/_apis/distributedtask/securefiles/$($secFileId)?ticket=$($secTicket)&download=true&api-version=5.0-preview.1" -Headers $headers -OutFile $filePath
Run Code Online (Sandbox Code Playgroud)

我正在使用“$(Build.QueuedById)”来获取构建任务中的用户 ID,但老实说,我认为在那里使用什么字符串并不重要。

如果您没有 Accept 标头,则会为您尝试下载的文件取回 JSON 元数据。

不幸的是,我是从其他 SO 帖子和 github 问题页面拼凑而成的;我找不到任何官方记录我在那里使用的 URL。


Mar*_*Liu 4

没有这样的 REST API 来下载安全文件,但您可以使用助手的下载安全文件任务。

由于安全文件在构建过程中仅存在于临时位置,因此您应该首先通过下载安全文件任务下载安全文件,然后将安全文件复制到另一个目录:

1.下载安全文件

您可以添加下载安全文件任务(适用于 VSTS)并指定filename要下载的文件。

注意:由于该任务不适用于 TFS,因此您可以为您的 TFS 帐户安装类似的任务,例如下载安全文件扩展名。

2. 将安全文件复制到另一个目录

例如将安全文件复制到$(Build.ArtifactStagingDirectory),可以使用 PowerShell 脚本:

Copy-Item -Path $(Agent.WorkFolder)\_temp\filename -Destination $(Build.ArtifactStagingDirectory)
Run Code Online (Sandbox Code Playgroud)

或者使用复制文件任务将安全文件复制到$(Build.ArtifactStagingDirectory).

顺便提一句: