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

如何用PowerShell/Bash批量删除Azure Purview集合资产(AAD认证)

批量删除Azure Purview集合内资产的实现方案

前提条件

  • 已安装Azure PowerShell模块(版本≥5.1)或Azure CLI(版本≥2.40.0)
  • 已通过AAD账户登录Azure(Connect-AzAccount 或 az login)
  • 拥有目标Purview账户的集合管理员权限
  • 提前获取目标集合的集合ID(可通过Purview UI的集合详情页获取,或调用API查询)

PowerShell实现方案

1. 定义基础变量

$purviewAccountName = "your-purview-account-name"  # 替换为你的Purview账户名
$collectionId = "your-collection-id"              # 替换为目标集合ID
$apiBaseUrl = "https://$purviewAccountName.purview.azure.com/catalog/api/atlas/v2"

2. 获取Purview API访问令牌

$accessToken = (Get-AzAccessToken -ResourceUrl "https://purview.azure.com").Token
$headers = @{
    "Authorization" = "Bearer $accessToken"
    "Content-Type"  = "application/json"
}

3. 分页获取集合内所有资产GUID

$allAssetGuids = @()
$nextPageToken = $null

do {
    $queryParams = if ($nextPageToken) { "?filter=collectionId eq '$collectionId'&nextPageToken=$nextPageToken" } else { "?filter=collectionId eq '$collectionId'" }
    $response = Invoke-RestMethod -Method Get -Uri "$apiBaseUrl/entity/bulk$queryParams" -Headers $headers
    
    $allAssetGuids += $response.entities.guid
    $nextPageToken = $response.nextPageToken
} while ($nextPageToken)

4. 批量删除资产

Purview API单次支持最多删除1000个资产,因此需要分批处理:

$batchSize = 1000
for ($i=0; $i -lt $allAssetGuids.Count; $i+=$batchSize) {
    $batchGuids = $allAssetGuids[$i..($i+$batchSize-1)]
    $deleteBody = @{ guids = $batchGuids } | ConvertTo-Json
    
    try {
        Invoke-RestMethod -Method Post -Uri "$apiBaseUrl/entity/bulk/delete" -Headers $headers -Body $deleteBody
        Write-Host "成功删除第 $($i/$batchSize + 1) 批资产(共 $($batchGuids.Count) 个)"
    } catch {
        Write-Host "删除第 $($i/$batchSize + 1) 批资产失败:$($_.Exception.Message)"
    }
}

Azure Cloud Bash(Azure CLI)实现方案

1. 定义基础变量

PURVIEW_ACCOUNT_NAME="your-purview-account-name"  # 替换为你的Purview账户名
COLLECTION_ID="your-collection-id"                # 替换为目标集合ID
API_BASE_URL="https://$PURVIEW_ACCOUNT_NAME.purview.azure.com/catalog/api/atlas/v2"

2. 获取Purview API访问令牌

ACCESS_TOKEN=$(az account get-access-token --resource https://purview.azure.com --query accessToken -o tsv)
HEADERS=(-H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json")

3. 分页获取集合内所有资产GUID

ALL_ASSET_GUIDS=()
NEXT_PAGE_TOKEN=""

while true; do
    QUERY_PARAMS=""
    if [ -n "$NEXT_PAGE_TOKEN" ]; then
        QUERY_PARAMS="?filter=collectionId eq '$COLLECTION_ID'&nextPageToken=$NEXT_PAGE_TOKEN"
    else
        QUERY_PARAMS="?filter=collectionId eq '$COLLECTION_ID'"
    fi

    RESPONSE=$(curl -s "${API_BASE_URL}/entity/bulk$queryParams" "${HEADERS[@]}")
    CURRENT_GUIDS=$(echo "$RESPONSE" | jq -r '.entities[].guid')
    ALL_ASSET_GUIDS+=($CURRENT_GUIDS)
    
    NEXT_PAGE_TOKEN=$(echo "$RESPONSE" | jq -r '.nextPageToken')
    if [ "$NEXT_PAGE_TOKEN" == "null" ]; then
        break
    fi
done

4. 批量删除资产

同样按1000个/批处理:

BATCH_SIZE=1000
TOTAL_GUIDS=${#ALL_ASSET_GUIDS[@]}

for ((i=0; i<TOTAL_GUIDS; i+=BATCH_SIZE)); do
    BATCH_GUIDS=("${ALL_ASSET_GUIDS[@]:i:BATCH_SIZE}")
    DELETE_BODY=$(jq -n --argjson guids "$(printf '%s\n' "${BATCH_GUIDS[@]}" | jq -R . | jq -s .)" '{guids: $guids}')
    
    RESPONSE=$(curl -s -X POST "${API_BASE_URL}/entity/bulk/delete" "${HEADERS[@]}" -d "$DELETE_BODY")
    if [ $(echo "$RESPONSE" | jq -r '.guidAssignments | length') -eq ${#BATCH_GUIDS[@]} ]; then
        echo "成功删除第 $((i/BATCH_SIZE + 1)) 批资产(共 ${#BATCH_GUIDS[@]} 个)"
    else
        echo "删除第 $((i/BATCH_SIZE + 1)) 批资产失败:$(echo "$RESPONSE" | jq -r '.error.message')"
    fi
done

注意事项

  • 执行删除前建议先验证资产列表,避免误删:可将删除步骤替换为打印GUID列表确认
  • 若资产数量极大,建议在非业务高峰时段执行,避免影响Purview服务性能
  • 部分特殊资产(如通过扫描生成的资产)可能需要先删除扫描规则或关联资源,否则可能重新被同步

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:45:43