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

如何修改AzCopy PowerShell脚本添加含上传完成时间的success.txt

实现Blob复制后生成/更新success.txt的解决方案

你可以结合AzCopy和PowerShell完成需求——先用AzCopy完成Blob传输,再生成包含上传完成时间的success.txt并上传到目标容器(覆盖已有文件)。以下是两种可行的实现方式:

方法1:仅用AzCopy+本地临时文件

这种方式无需额外安装Azure PowerShell模块,完全基于你原有的AzCopy工作流:

# storage account details
$sourceStorageAccount = ""
$sourceContainer = ""
$sourceFolderPath = ""
$sourceSasToken = ""

# Destination details
$destStorageAccount = ""
$destContainer = ""
$destFolderPath = ""
$destSasToken = ""

# Construct source and destination container URIs
$sourceContainerUri = "https://$sourceStorageAccount.blob.core.windows.net/$sourceContainer/$sourceFolderPath?$sourceSasToken"
$destContainerUri = "https://$destStorageAccount.blob.core.windows.net/$destContainer/$destFolderPath?$destSasToken"

# 执行AzCopy复制
azcopy copy "$sourceContainerUri" "$destContainerUri" --recursive=true

# 检查复制是否成功(根据AzCopy退出码判断)
if ($LASTEXITCODE -eq 0) {
    # 生成包含当前时间的success.txt内容
    $successContent = "上传完成时间: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"
    $tempFilePath = Join-Path $env:TEMP "success.txt"
    Set-Content -Path $tempFilePath -Value $successContent -Encoding utf8

    # 构造success.txt的目标URI(如果有destFolderPath则拼接路径)
    $successBlobUri = if ($destFolderPath) {
        "https://$destStorageAccount.blob.core.windows.net/$destContainer/$destFolderPath/success.txt?$destSasToken"
    } else {
        "https://$destStorageAccount.blob.core.windows.net/$destContainer/success.txt?$destSasToken"
    }

    # 上传success.txt到目标容器,覆盖已有文件
    azcopy copy "$tempFilePath" "$successBlobUri" --overwrite=true

    # 删除本地临时文件
    Remove-Item -Path $tempFilePath -Force
} else {
    Write-Error "AzCopy Blob复制失败,退出码: $LASTEXITCODE"
}

方法2:使用Azure PowerShell模块(无需本地文件)

如果你已经安装了Az.Storage模块,可以直接在内存中生成内容并上传到Blob,避免本地临时文件:

# 确保已安装并导入Az.Storage模块
# Install-Module -Name Az.Storage -Force -AllowClobber
# Import-Module Az.Storage

# storage account details
$sourceStorageAccount = ""
$sourceContainer = ""
$sourceFolderPath = ""
$sourceSasToken = ""

# Destination details
$destStorageAccount = ""
$destContainer = ""
$destFolderPath = ""
$destSasToken = ""

# Construct source and destination container URIs
$sourceContainerUri = "https://$sourceStorageAccount.blob.core.windows.net/$sourceContainer/$sourceFolderPath?$sourceSasToken"
$destContainerUri = "https://$destStorageAccount.blob.core.windows.net/$destContainer/$destFolderPath?$destSasToken"

# 执行AzCopy复制
azcopy copy "$sourceContainerUri" "$destContainerUri" --recursive=true

# 检查复制是否成功
if ($LASTEXITCODE -eq 0) {
    # 构造目标存储账户的SAS上下文
    $destContext = New-AzStorageContext -StorageAccountName $destStorageAccount -SasToken $destSasToken

    # 生成success.txt的Blob路径
    $successBlobPath = if ($destFolderPath) {
        "$destFolderPath/success.txt"
    } else {
        "success.txt"
    }

    # 生成内容并上传(覆盖已有Blob)
    $successContent = "上传完成时间: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"
    Set-AzStorageBlobContent -Context $destContext -Container $destContainer -FileContent $successContent -Blob $successBlobPath -Force
} else {
    Write-Error "AzCopy Blob复制失败,退出码: $LASTEXITCODE"
}

关键说明

  • 两种方法都会在AzCopy复制成功后才生成success.txt,确保文件仅在传输完成时更新
  • --overwrite=true(AzCopy)和-Force(PowerShell)参数用于强制覆盖已存在的success.txt,保证每次上传都是最新的时间
  • 时间格式可以根据需求调整,比如改成Get-Date -Format 'o'获取ISO8601格式的时间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:28:16