如何让PowerShell脚本获取存储账户所有容器的最旧10个Blob?
解决方法
你的脚本问题出在排序后取结果的方向错误,且可能包含存储容器中的虚拟目录(若存在)。修改后的脚本会遍历所有容器的所有文件,统一排序后取出最旧的10个:
$storageAccountName = "aaa" $resourceGroup = "bbb" # 获取存储账户密钥并创建上下文 $storageAccountKey = (Get-AzStorageAccountKey -ResourceGroupName $resourceGroup -Name $storageAccountName).Value[0] $context = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey # 获取所有容器,遍历每个容器获取所有块Blob(排除虚拟目录) $allBlobs = Get-AzStorageContainer -Context $context | ForEach-Object { Get-AzStorageBlob -Container $_.Name -Context $context -BlobType BlockBlob } # 按LastModified升序排序(最旧的在前),取前10个 $oldest10Blobs = $allBlobs | Sort-Object -Property LastModified | Select-Object -First 10 # 输出结果 $oldest10Blobs
关键修改点说明:
- 移除未使用的
$storageAccount变量,消除代码冗余 - 创建上下文时使用自动获取的存储账户密钥,替代硬编码的
'xxx',提升安全性和可维护性 - 添加
-BlobType BlockBlob参数,排除容器中的虚拟目录,确保只获取实际文件 - 将
Select-Object -last 10改为Select-Object -First 10:按LastModified升序排序后,最旧的文件排在结果集最前面,取前10个即为所有容器中最旧的10个文件 - 将结果分步存储到变量中,方便后续调试或扩展使用
内容的提问来源于stack exchange,提问作者DBA Guy
相关产品推荐
相关产品推荐

