如何修改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
相关产品推荐
相关产品推荐

