通过Powershell中的REST API调用下载ZIP内容

通过Powershell中的REST API调用下载ZIP内容,rest,powershell,azure-devops,azure-devops-rest-api,Rest,Powershell,Azure Devops,Azure Devops Rest Api,这是一个示例RESTAPI uri,用于从AzureDevOps版本检索日志。 https://vsrm.dev.azure.com/{organization}/{project}/_api/release/releaseId}/logs?api版本=4.1-preview.2 动词是GET,内容类型是“application/zip” 如何使用调用RestMethod通过powershell调用RESTAPI来检索zip文件 如果我将文件传递给此命令并将其另存为zip,则它不会将API响应的

这是一个示例RESTAPI uri,用于从AzureDevOps版本检索日志。
https://vsrm.dev.azure.com/{organization}/{project}/_api/release/releaseId}/logs?api版本=4.1-preview.2

动词是GET,内容类型是“application/zip”

如何使用
调用RestMethod
通过powershell调用RESTAPI来检索zip文件

如果我将文件传递给此命令并将其另存为zip,则它不会将API响应的二进制输出转换为zip


我该怎么做

您需要将输出命名为zip

下面的Powershell脚本适用于我:

Param(
   [string]$collectionUrl = "https://vsrm.dev.azure.com/{organization}",
   [string]$project = "0522TFVCScrum",
   [string]$releaseid = "35",
   [string]$filename = "D:\temp\ReleaseLogs_$releaseid.zip",
   [string]$user = "username",
   [string]$token = "password/PAT"
)

# Base64-encodes the Personal Access Token (PAT) appropriately
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))

$uri = "$collectionUrl/$project/_apis/Release/releases/$releaseid/logs"

Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/zip" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -OutFile $filename

API的二进制输出是什么?它是十六进制字符串还是字节数组?它是base64编码的吗?其思想是,您需要获取任何响应,将其转换为字节数组,并将其发送到
Set Content-Encoding byte
[System.IO.File]::writealBytes($FullPathToOutputFile,$ByteArray)
。工作正常。我使用的是“Out File-filepath C:\Test1\logs.zip”,它不起作用。非常感谢!