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

Start-Job封装带分页的Get-AzStorageBlob查询仅返回部分结果如何解决

根因分析

你遇到的问题本质是Start-Job启动的独立后台进程中,Azure存储返回的BlobContinuationToken复杂类型在对象序列化过程中丢失了类型信息,导致Get-AzStorageBlob无法识别后续迭代传入的延续令牌,误判为没有更多结果,循环提前终止,最终仅返回257条数据。


解决方案

调整作业内的逻辑,优化延续令牌的判断和保存时机,具体修改点如下:

  • 将集合判空逻辑从$Blobs.Length -le 0改为$null -eq $Blobs -or $Blobs.Count -le 0,兼容单Blob对象场景下Length属性不存在导致的误判
  • 先提取并校验延续令牌再输出Blob集合,避免管道枚举过程中Blob对象的属性被修改导致令牌丢失
  • 额外校验延续令牌的NextMarker属性,确认真实存在待返回的后续数据

修改后的可用代码如下:

# 用Start-Job规避模块依赖冲突
Start-Job -ScriptBlock {
    # 若存在多版本Az.Storage模块,可显式指定加载版本,避免版本不一致问题
    # Import-Module Az.Storage -RequiredVersion <你使用的模块版本号> -Force

    $storageContainer = 
      New-AzStorageContext -ConnectionString $using:StorageAccountConnectionString `
        | Get-AzStorageContainer -Name $using:BlobContainerName;

    $MaxCount = 100;
    $Token = $Null;

    do
     {
         $Blobs = $storageContainer | Get-AzStorageBlob `
            -MaxCount $MaxCount `
            -ContinuationToken $Token;

         if($null -eq $Blobs -or $Blobs.Count -le 0) { Break; }

         # 先保存延续令牌再输出Blob,避免管道枚举导致令牌属性丢失
         $rawToken = $Blobs[$Blobs.Count - 1].ContinuationToken;
         # PowerShell 7+支持三元运算符,低版本可替换为常规if判断
         $Token = ($rawToken -and $rawToken.NextMarker) ? $rawToken : $null;

         $Blobs;
     }
     While ($null -ne $Token)

} | Receive-Job -Wait -Force;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:36:03