You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell从AWS CodeArtifact下载资产文件?

AWS CodeArtifact资产文件PowerShell下载解决方案

问题

需要从AWS CodeArtifact下载一个zip格式的资产文件。已知AWS CLI的实现方式,但团队使用PowerShell,希望借助AWSPowerShell库的Get-CAPackageVersionAsset函数完成操作。执行以下命令后:

Get-CAPackageVersionAsset -Asset MyAsset.3.55.98.zip -Domain mydomain -DomainOwner <aws_account_id> -Format generic -Namespace mynamespace -Package MyAsset -PackageVersion 3.55.98 -Repository myrepo

返回了Amazon.CodeArtifact.Model.GetPackageVersionAssetResponse类型的对象,其Asset属性为Amazon.Runtime.Internal.Util.CachingWrapperStream类型,无法直接完成文件下载。AWS CLI的等效命令aws codeartifact get-package-version-asset有下载路径参数,但PowerShell命令没有,请问如何通过PowerShell实现资产文件的下载?

解决方案

Get-CAPackageVersionAsset返回的Asset属性是一个.NET流对象,你可以通过手动将该流写入本地文件来完成下载,具体代码如下:

# 执行命令获取包含资产流的响应对象
$assetResponse = Get-CAPackageVersionAsset -Asset MyAsset.3.55.98.zip -Domain mydomain -DomainOwner <aws_account_id> -Format generic -Namespace mynamespace -Package MyAsset -PackageVersion 3.55.98 -Repository myrepo

# 指定本地文件的保存路径
$localFilePath = "C:\Your\Target\Directory\MyAsset.3.55.98.zip"

# 将资产流写入本地文件
try {
    # 创建本地文件的写入流
    $fileStream = [System.IO.File]::Create($localFilePath)
    # 将资产流的内容复制到文件流
    $assetResponse.Asset.CopyTo($fileStream)
}
finally {
    # 确保流资源被正确释放,避免文件锁定
    if ($fileStream) { $fileStream.Close() }
    if ($assetResponse.Asset) { $assetResponse.Asset.Close() }
}

关键说明

  • 与AWS CLI不同,PowerShell的Get-CAPackageVersionAsset不会直接将文件写入本地,而是返回包含资产内容的流对象
  • 使用.NET的文件流操作可以确保二进制文件(如zip)的内容被完整、正确地写入,避免编码问题
  • finally块中的流关闭操作是必要的,能防止文件被长期占用导致后续操作失败

内容的提问来源于stack exchange,提问作者Peter May

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 12:56:27