我们在VSTS私有包管理订阅源中存储了某些Chocolatey包。我试图在PowerShell中的VSTS中从Feed下载特定的包。我使用以下命令:
$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代码。任何人都可以建议我该怎么做?我不想从Feed中安装这个包,只能下载它。
我想知道是否有更好的方法来执行此操作,因为此过程仍然需要我首先准备包url,这对于每个包迭代都会有所不同?
答案 0 :(得分:0)
您似乎无法正确创建auth标头。基本上,使用PAT,不需要用户名。
我一直使用这段代码:
$pat = 'yourPatHere'
$bytes = [System.Text.Encoding]::ASCII.GetBytes(":$($pat)")
$encodedText =[Convert]::ToBase64String($bytes)
$header = @{Authorization = "Basic $encodedText"}
然后,您可以使用Invoke-WebRequest
下载Feed信息:
Invoke-WebRequest -Uri 'https://uri' -Header $header -Method Get
这与您的代码大致相同,但Invoke-WebRequest
是惯用的PowerShell与创建WebClient
。最后不应该这么重要。
实际上从Feed中下载文件是另一回事。包装通过特定类型饲料的标准机制暴露。请参阅documentation。基本上,如果您需要NuGet包,可以从NuGet提要下载,而不是从包管理中下载。