【问题标题】:download files from vsts package feed从 vsts 包源下载文件
【发布时间】:2017-12-05 14:29:44
【问题描述】:

我们将某些 Chocolatey 包存储在 VSTS 私有包管理源中。我正在尝试从 PowerShell 中的 VSTS 中的提要下载特定包。我正在使用以下命令:

$user = "my-user-id"

$token = "my-pat-token"

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))

$url = "vsts-package-url"

$webClient = New-Object System.Net.WebClient
$webClient.Headers.Add('HttpRequestHeader.Authorization',"Basic $base64AuthInfo")

在此之后,我应该可以在使用$webClient.DownloadFile($url, $fileName)时下载包。

但是文件包含要求我登录的虚拟文本,并且包含 401 相关详细信息。

它基本上是一个 PowerShell 代码。谁能告诉我该怎么做?我不想从提要安装包,只下载它。

我想知道是否有更好的方法可以做到这一点,因为这个过程仍然需要我首先准备包 url,这对于每个包迭代都会有所不同?

【问题讨论】:

    标签: powershell azure-devops azure-pipelines-release-pipeline


    【解决方案1】:

    您似乎错误地创建了身份验证标头。基本上,使用 PAT,不需要用户名。

    我一直在使用这个sn-p的代码:

    $pat = 'yourPatHere'
    $bytes = [System.Text.Encoding]::ASCII.GetBytes(":$($pat)")
    $encodedText =[Convert]::ToBase64String($bytes)
    
    $header = @{Authorization = "Basic $encodedText"}
    

    然后您可以使用Invoke-WebRequest 下载提要信息:

    Invoke-WebRequest -Uri 'https://uri' -Header $header -Method Get
    

    这看起来与您的代码大致相同,但 Invoke-WebRequest 是惯用的 PowerShell 而不是创建 WebClient。最后应该没关系。

    实际上从提要下载文件是另一回事。这些包通过特定类型的提要的标准机制公开。请参阅documentation。基本上,如果您需要 NuGet 包,您可以从 NuGet 源下载它,而不是从包管理中下载。

    【讨论】:

    猜你喜欢
    • 2018-11-21
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多