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

Azure存储Blob扫描时ContinuationToken类型转换错误求助

Azure存储Blob扫描时ContinuationToken类型转换错误的解决方法

错误原因

  • 类型不兼容:你手动初始化的Microsoft.WindowsAzure.Storage.Blob.BlobContinuationToken属于旧AzureRM模块类型,而Az模块的Get-AzStorageBlob要求的是Microsoft.Azure.Storage.Blob.BlobContinuationToken类型,两者无法互相转换。
  • 模块冲突:如果环境中同时安装了AzureRM和Az模块,会导致类型解析混乱,使得$resultSegment.ContinuationToken被错误识别为System.Object[]数组,触发类型转换错误。
  • 冗余代码干扰:你先创建旧类型实例又立即设为null的操作完全多余,反而可能干扰PowerShell的类型解析逻辑。

修复方案

  1. 移除冗余初始化代码:首次调用Get-AzStorageBlob时直接传入null即可,无需手动创建ContinuationToken实例。
  2. 清理模块环境:卸载AzureRM模块(若存在),确保仅使用Az模块,避免类型冲突。
  3. 直接复用返回的Token:循环中直接赋值$resultSegment.ContinuationToken,它会自动是Az模块要求的正确类型。

修正后的代码

$SubscriptionName = 'not-going-to-tell-you'
Select-AzSubscription -SubscriptionName $SubscriptionName

$resourceGroupName = "rg-not-going-to-tell-you"
$storageAccountName = "stnot-going-to-tell-you"
$containerName = "not-going-to-tell-you"

# 获取存储账户上下文
$storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName
$ctx = $storageAccount.Context

$continuationToken = $null
$filterCriteria = "*your-filter-criteria*"  # 示例过滤规则
#$minSize = 100MB  # 示例大小过滤规则

do {
    try {
        $resultSegment = Get-AzStorageBlob -Container $containerName -Context $ctx -ContinuationToken $continuationToken -MaxCount 500
        $blobs = $resultSegment.Results
        $continuationToken = $resultSegment.ContinuationToken

        # 根据规则过滤Blob
        $filteredBlobs = $blobs | Where-Object { $_.Name -like $filterCriteria } #-and $_.Length -gt $minSize

        # 处理过滤后的Blob
        $filteredBlobs | ForEach-Object { $_.Name }
    }
    catch {
        Write-Error "发生错误: $_"
        Start-Sleep -Seconds 5  # 重试前等待5秒
    }
} while ($continuationToken -ne $null)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:57:11