求Azure PowerShell脚本:对比Blob与本地文件并下载缺失文件
Azure Blob存储本地缺失文件下载脚本
以下是实现对比Azure Blob存储与本地文件、仅下载本地缺失文件的完整PowerShell脚本:
# 配置核心参数 $storageAccountName = "你的存储账户名" $containerName = "你的容器名" $localDestinationPath = "D:\LocalBlobFiles" $isRecursive = $true # 设为$false则不处理Blob容器中的子目录 # 获取存储账户上下文 $storageAccount = Get-AzStorageAccount -Name $storageAccountName $context = $storageAccount.Context # 获取容器内所有Blob(含子目录,根据$isRecursive控制) $blobs = Get-AzStorageBlob -Container $containerName -Context $context -Recursive:$isRecursive # 转换本地文件路径为Blob名称格式(统一用正斜杠分隔层级) $localFiles = Get-ChildItem -Path $localDestinationPath -File -Recurse:$isRecursive | ForEach-Object { $_.FullName.Substring($localDestinationPath.Length).Replace('\', '/').TrimStart('/') } # 遍历Blob,下载本地缺失的文件 foreach ($blob in $blobs) { $localFilePath = Join-Path -Path $localDestinationPath -ChildPath $blob.Name.Replace('/', '\') if (-not (Test-Path -Path $localFilePath)) { # 自动创建文件所在目录(避免因目录不存在下载失败) $directory = Split-Path -Path $localFilePath -Parent if (-not (Test-Path -Path $directory)) { New-Item -Path $directory -ItemType Directory -Force | Out-Null } Write-Host "正在下载缺失文件: $($blob.Name)" Get-AzStorageBlobContent -Blob $blob.Name -Container $containerName -Destination $localFilePath -Context $context -Force } else { Write-Host "文件已存在,跳过: $($blob.Name)" } } Write-Host "缺失文件下载完成"
关键说明
- 参数适配:替换
$storageAccountName、$containerName和$localDestinationPath为你的实际信息,$isRecursive控制是否同步Blob的子目录结构。 - 路径格式统一:将本地文件路径转换为Blob的正斜杠层级格式,避免因Windows与Azure的路径分隔符差异导致对比错误。
- 目录自动创建:下载前检查并创建文件所在目录,解决层级Blob下载时的目录缺失问题。
- 按需下载:仅当本地无对应文件时执行下载,避免重复操作。
对你原代码的修正点
- 补充了Blob列表的正确获取逻辑,而非依赖未指定路径的
Get-Content; - 增加了本地文件与Blob的对比逻辑,避免盲目下载;
- 修正了
Get-AzStorageBlobContent中-Verbos的拼写错误(正确为-Verbose,脚本中按需启用); - 添加了目录自动创建逻辑,解决层级结构下的下载失败问题。
内容的提问来源于stack exchange,提问作者Gopi Arumugam
相关产品推荐
相关产品推荐

