Dela via


Hantera blockblobar med Azure CLI

Blob Storage stöder blockblobar, tilläggsblobar och sidblobar. Blockblobar är optimerade för att ladda upp stora mängder data effektivt. Blockblobar är idealiska för att lagra bilder, dokument och andra typer av data som inte utsätts för slumpmässiga läs- och skrivåtgärder. Den här artikeln beskriver hur du arbetar med blockblobar.

Förutsättningar

Du behöver en Azure-prenumeration för att få åtkomst till Azure Storage. Om du inte redan har en prenumeration skapar du ett kostnadsfritt konto innan du börjar.

All åtkomst till Azure Storage sker via ett lagringskonto. För den här snabbstarten skapar du ett lagringskonto med hjälp av Azure-portalen, Azure PowerShell eller Azure CLI. Hjälp med att skapa ett lagringskonto finns i Skapa ett lagringskonto.

Förbereda din miljö för Azure CLI

  • Den här artikeln kräver version 2.0.46 eller senare av Azure CLI. Om du använder Azure Cloud Shell är den senaste versionen redan installerad.

Auktorisera åtkomst till Blob Storage

Du kan auktorisera åtkomst till Blob Storage från Azure CLI antingen med Microsoft Entra-autentiseringsuppgifter eller med hjälp av en åtkomstnyckel för lagringskontot. Användning av Microsoft Entra-autentiseringsuppgifter rekommenderas, och i den här artikelns exempel används Microsoft Entra-ID exklusivt.

Azure CLI-kommandon för dataåtgärder mot Blob Storage stöder parametern --auth-mode , som gör att du kan ange hur du auktoriserar en viss åtgärd. Ange parametern --auth-mode för inloggning för att auktorisera med Microsoft Entra-autentiseringsuppgifter. Endast bloblagringsdataåtgärder stöder parametern --auth-mode . Hanteringsåtgärder, till exempel att skapa en resursgrupp eller ett lagringskonto, använder automatiskt Microsoft Entra-autentiseringsuppgifter för auktorisering. Mer information finns i Välj hur du auktoriserar åtkomst till blobdata med Azure CLI.

login Kör kommandot för att öppna en webbläsare och ansluta till din Azure-prenumeration.


az login

Skapa en container

Alla blobdata lagras i containrar, så du behöver minst en containerresurs innan du kan ladda upp data. Om det behövs använder du följande exempel för att skapa en lagringscontainer. Mer information finns i Hantera blobcontainrar med Azure CLI.


#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"

# Create a container object
az storage container create \
    --name $containerName \
    --account-name $storageAccount
    --auth-mode login

När du använder exemplen som ingår i den här artikeln måste du ersätta platshållarvärdena inom hakparenteser med dina egna värden. Mer information om hur du loggar in på Azure med Azure CLI finns i Logga in med Azure CLI.

Ladda upp blobar

Azure CLI erbjuder kommandon som utför åtgärder på en resurs eller på flera resurser, beroende på dina krav.

Om du vill ladda upp en fil till en blockblob skickar du de obligatoriska parametervärdena az storage blob upload till kommandot. Ange källsökvägen och filnamnet med parametern --file och namnet på målcontainern med parametern --container-name . Du måste också ange parametern --account-name . Det här kommandot skapar en ny blob eller skriver över den ursprungliga bloben om den redan finns.

Du kan använda az storage blob upload-batch kommandot för att rekursivt ladda upp flera blobar till en lagringscontainer. Du kan använda Unix-filnamnsmönstermatchning för att ange ett intervall med filer som ska laddas upp med parametern --pattern . De mönster som stöds är *, ?, [seq]och [!seq]. Mer information finns i Python-dokumentationen om unix-filnamnsmönstermatchning.

I följande exempel använder den första åtgärden kommandot för att ladda upp en enda namngiven az storage blob upload fil. Källfilen och mållagringscontainern anges med parametrarna --file och --container-name .

Den andra åtgärden visar hur kommandot används az storage blob upload-batch för att ladda upp flera filer. Parametern --if-modified-since ser till att endast filer som ändrats under de senaste sju dagarna laddas upp. Värdet som anges av den här parametern måste anges i UTC-format.


#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
lastModified=$(date +%Y:%m:%d -d "7 days ago")

path="C:\\temp\\"
filename="demo-file.txt"
imageFiles="*.png"
file="$path$filename"

#Upload a single named file
az storage blob upload \
    --file $file \
    --container-name $containerName \
    --account-name $storageAccount \
    --auth-mode login

#Upload multiple image files recursively
az storage blob upload-batch \
    --destination $containerName \
    --source $path \
    --pattern *.png \
    --account-name $storageAccount \
    --auth-mode login \
    --if-modified-since $lastModified

Lista blobar

Som standard az storage blob list listar kommandot alla blobar som lagras i en container. Du kan använda olika metoder för att förfina sökomfånget. Det finns ingen begränsning för antalet containrar eller blobar som ett lagringskonto kan ha. För att eventuellt undvika att hämta tusentals blobar är det en bra idé att begränsa mängden data som returneras.

Använd parametern --prefix för att välja antingen en enda känd fil eller ett intervall med filer vars namn börjar med en definierad sträng. Du kan ange en virtuell katalog som en del av parametern --prefix .

Som standard returneras endast blobar i en liståtgärd. I vissa scenarier kanske du vill skicka ett värde för parametern --include för att returnera ytterligare typer av objekt, till exempel mjukt borttagna blobar, ögonblicksbilder och versioner. Dessa värden kan kombineras för att returnera flera objekttyper.

Parametern --num-results kan användas för att begränsa antalet blobar som returneras från en container. En tjänstgräns på 5 000 tillämpas på alla Azure-resurser. Den här gränsen säkerställer att hanterbara mängder data hämtas och att prestanda inte påverkas. Om antalet returnerade blobar överskrider antingen --num-results värdet eller tjänstgränsen returneras en fortsättningstoken. Med den här token kan du använda flera begäranden för att hämta valfritt antal blobar. Mer information finns i Räkna upp blobresurser.

I följande exempel visas flera metoder som används för att tillhandahålla en lista över blobar. Den första metoden listar alla blobar i en angiven container. Den andra metoden använder parametern --prefix för att lista alla blobar i containrarna som börjar med det angivna prefixet. Den tredje metoden använder parametern --num-results för att begränsa de returnerade resultaten och parametern --show-next-marker för att inkludera fortsättningstoken i resultatet. När en fortsättningstoken finns i resultatet skickas den till det efterföljande anropet till för att az storage blob list hämta nästa uppsättning resultat.

Mer information finns i referensen az storage blob list .

#!/bin/bash
storageAccount="<storage-account>"
containerName="<container-name>"
blobPrefix="<prefix-string>"
numResults=5

#Approach 1: List all blobs in a container by name.

az storage blob list \
    --account-name $storageAccount \
    --container $containerName \
    --query "[].name" \
    --auth-mode login \
    --output tsv

#Approach 2: Use the --prefix parameter to list blobs starting with specified prefix.

az storage blob list \
    --account-name $storageAccount \
    --container $containerName \
    --prefix $blobPrefix \
    --query "[].name" \
    --auth-mode login \
    --output tsv

#Approach 3: Use the continuation token to return the complete set of results.

get_blobs() {
    if [ -z "$nextMarker" ]; then
        az storage blob list --container-name $containerName --num-results $numResults --account-name $storageAccount --show-next-marker --only-show-errors --auth-mode login
    else
        az storage blob list --container-name $containerName --num-results $numResults --marker $nextMarker --account-name $storageAccount --show-next-marker --only-show-errors --auth-mode login
    fi
}
 
total=0
nextMarker=""
while true; do
    blobs=$(get_blobs $containerName $numResults $storageAccount $nextMarker) 
    nextMarker=""
    blobsLength=$(echo $blobs | jq length)
    
    if [ $blobsLength -le 0 ]; then
        break
    fi
    
    blobIndex=0
    while read blob; do
        if [ $blobIndex -eq $(($blobsLength-1)) ]; 
        then
            nextMarker="$(echo $blob | jq -r .nextMarker)"
        else
            blobName=$(echo $blob | jq .name)
            echo "blobname: $blobName"
        fi
        ((blobIndex++))
    done <<<$(echo $blobs | jq -c '.[]')
 
    total=$(($total+$blobsLength-1))
    echo "Processed $total blobs so far"
    # echo "nextMarker: $nextMarker"
    if [ "${nextMarker}" = "null" ]; then
        echo -e "\nAccountName: $storageAccount, ContainerName: $containerName "
        echo "Processed $total blobs in total."
        break
    fi
done

Ladda ned en blob

Beroende på ditt användningsfall använder du antingen az storage blob download kommandot eller az storage blob download-batch för att ladda ned blobar. Om du vill ladda ned en enskild blob anropar az storage blob download du kommandot direkt och skickar värden för parametrarna --container-name, --fileoch --name . Blobben laddas ned till shell-katalogen som standard, men en alternativ plats kan anges. Åtgärden misslyckas med ett fel om den angivna sökvägen inte finns.

Om du vill ladda ned flera blobar från en lagringscontainer rekursivt använder du az storage blob download-batch kommandot . Det här kommandot stöder Unix-filnamnsmönstermatchning med parametern --pattern . De mönster som stöds är *, ?, [seq]och [!seq]. Mer information finns i Python-dokumentationen om unix-filnamnsmönstermatchning.

Följande exempelkod innehåller ett exempel på både enstaka och flera nedladdningsmetoder. Det erbjuder också en förenklad metod för att söka i alla containrar efter specifika filer med hjälp av ett jokertecken. Eftersom vissa miljöer kan ha tusentals resurser rekommenderar vi att du använder parametern --num-results .

Mer information finns i az storage blob download and az storage blob download batch reference ( az storage blob download batchreference).

#!/bin/bash
#Set variables
storageAccount="<storage-account>"
containerName="demo-container"

destinationPath="C:\\temp\\downloads\\"
destinationFilename="downloadedBlob.txt"
file="$destinationPath$destinationFilename"
sourceBlobName="demo-file.txt"

#Download a single named blob

az storage blob download \
    --container $containerName \
    --file $file \
    --name $sourceBlobName \
    --account-name $storageAccount \
    --auth-mode login

#Download multiple blobs using a pattern value

az storage blob download-batch \
    --destination $destinationPath \
    --source $containerName \
    --pattern images/*.png \
    --account-name $storageAccount \
    --auth-mode login

#Use a loop to download matching blobs in a list of containers

containerList=$( \
    az storage container list \
        --query "[].name" \
        --num-results 5 \
        --account-name $storageAccount \
        --auth-mode login \
        --output tsv 
)
for row in $containerList
do
    tmpName=$(echo $row | sed -e 's/\r//g')
    echo $tmpName
   
    az storage blob download-batch \
        --destination $destinationPath \
        --source $tmpName \
        --pattern *louis*.* \
        --account-name $storageAccount \
        --auth-mode login
done

Hantera blobegenskaper och metadata

En blob exponerar både systemegenskaper och användardefinierade metadata. Systemegenskaper finns på varje Blob Storage-resurs. Vissa egenskaper är skrivskyddade, medan andra kan läsas eller ställas in. Under täcket mappas vissa systemegenskaper till vissa standard-HTTP-huvuden.

Användardefinierade metadata består av ett eller flera namn/värde-par som du anger för en Blob Storage-resurs. Du kan använda metadata för att lagra ytterligare värden med resursen. Metadatavärden är för dina egna syften och påverkar inte hur resursen beter sig.

Läsa blobegenskaper

Om du vill läsa blobegenskaper eller metadata måste du först hämta bloben från tjänsten. az storage blob show Använd kommandot för att hämta en blobs egenskaper och metadata, men inte dess innehåll. I följande exempel hämtas en blob och dess egenskaper visas.

Mer information finns i referensen az storage blob show .

#!/bin/bash
#Set variables
storageAccount="<storage-account>"
containerName="demo-container"

az storage blob show \
    --container  demo-container \
    --name demo-file.txt \
    --account-name $storageAccount \
    --auth-mode login

Läsa och skriva blobmetadata

Blobmetadata är en valfri uppsättning namn/värde-par som är associerade med en blob. Som du ser i föregående exempel finns det inga metadata som är associerade med en blob initialt, även om det kan läggas till när det behövs. Om du vill läsa använder du az storage blob metadata show kommandot . Om du vill uppdatera blobmetadata använder az storage blob metadata update och anger du en matris med nyckel/värde-par. Mer information finns i referensen az storage blob metadata .

Mer information finns i referensen az storage blob metadata .

Exemplet nedan uppdaterar först och checkar sedan in en blobs metadata och hämtar den sedan.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
blobName="blue-moon.mp3"

metadata=("Written=1934" "Recorded=1958")
metadata+=("Lyricist=Lorenz Hart")
metadata+=("Composer=Richard Rogers")
metadata+=("Artist=Tony Bennett")

#Update metadata
az storage blob metadata update \
    --container-name $containerName \
    --name $blobName \
    --metadata "${metadata[@]}" \
    --account-name $storageAccount \
    --auth-mode login

#Retrieve updated blob metadata
az storage blob metadata show \
    --container-name $containerName \
    --name $blobName \
    --account-name $storageAccount \
    --auth-mode login

Kopieringsåtgärder för blobar

Det finns många scenarier där blobar av olika typer kan kopieras. Exempel i den här artikeln är begränsade till blockblobar. Azure CLI erbjuder kommandon som utför åtgärder på en resurs eller på flera resurser, beroende på dina krav.

Om du vill kopiera en specifik blob använder du az storage blob copy start kommandot och anger värden för käll- och målcontainrar och blobar. Det går också att ange en enhetlig resursidentifierare (URI), resurs eller signatur för delad åtkomst (SAS) som källa.

Du kan också ange de villkor under vilka bloben ska kopieras. Dessa villkor kan anges för antingen käll- eller målbloben. Du kan referera till det senast ändrade datumet, taggdata eller ETag-värdet. Du kan till exempel välja att kopiera blobar som inte nyligen har ändrats till en separat container. Mer information finns i Ange villkorsstyrda huvuden för Blob Service-åtgärder.

Du kan använda az storage blob copy start-batch kommandot för att rekursivt kopiera flera blobar mellan lagringscontainrar inom samma lagringskonto. Det här kommandot kräver värden för parametrarna --source-container och --destination-container och kan kopiera alla filer mellan källan och målet. Precis som andra CLI-batchkommandon har det här kommandot stöd för Unix-filnamnsmönstermatchning med parametern --pattern . De mönster som stöds är *, ?, [seq]och [!seq]. Mer information finns i Python-dokumentationen om unix-filnamnsmönstermatchning.

Kommentar

Överväg att använda AzCopy för enkelhet och prestanda, särskilt när du kopierar blobar mellan lagringskonton. AzCopy är ett kommandoradsverktyg som du kan använda för att kopiera blobar eller filer till eller från ett lagringskonto. Läs mer om hur du kommer igång med AzCopy.

Mer information finns i referensen az storage blob copy .

Följande exempelkod innehåller ett exempel på både enstaka och flera kopieringsåtgärder. Eftersom vissa miljöer kan ha tusentals resurser rekommenderar vi att du använder parametern --num-results . Det första exemplet kopierar secret-town-road.png blob från containern photos till containern locations. Båda containrarna finns i samma lagringskonto. Resultatet verifierar att kopieringsåtgärden lyckades.

#!/bin/bash
storageAccount="<storage-account>"
sourceContainer="photos"
blobName="secret-town-road.jpg"
destContainer="locations"

az storage blob copy start \
    --destination-container $destContainer \
    --destination-blob $blobName \
    --source-container $sourceContainer \
    --source-blob $blobName \
    --account-name $storageAccount \
    --auth-mode login

Ögonblicksbildblobar

Lån som är associerade med basbloben påverkar inte ögonblicksbilden. Du kan inte skaffa ett lån på en ögonblicksbild. Läs mer om blobögonblicksbilder. Mer information finns i referensen az storage blob snapshot ( az storage blob snapshot ).

Följande exempelkod hämtar en blob från en lagringscontainer och skapar en ögonblicksbild av den.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
blobName="demo-file.txt"

az storage blob snapshot \
    --container-name $containerName \
    --name Blue-Moon.mp3 \
    --account-name $storageAccount \
    --auth-mode login

Ange blobnivå

När du ändrar en blob-nivå flyttar du bloben och alla dess data till målnivån. Du kan ändra nivån mellan frekvent, lågfrekvent och arkiv med az storage blob set-tier kommandot .

Beroende på dina krav kan du också använda åtgärden Kopiera blob för att kopiera en blob från en nivå till en annan. Åtgärden Kopiera blob skapar en ny blob på önskad nivå medan källbloben lämnas kvar på den ursprungliga nivån.

Att ändra nivåer från lågfrekvent eller frekvent till arkivering sker nästan omedelbart. När en blob har flyttats till arkivnivån anses den vara offline och kan inte läsas eller ändras. Innan du kan läsa eller ändra en arkiverad blobs data måste du extrahera dem till en onlinenivå. Läs mer om blobåterställning från arkivnivån.

Mer information finns i referensen az storage blob set-tier .

Följande exempelkod anger nivån till frekvent för en enda, namngiven blob i containern archive .

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"

az storage blob set-tier 
    --container-name $containerName \
    --name Blue-Moon.mp3 \
    --tier Hot \
    --account-name $storageAccount \
    --auth-mode login

Åtgärder med hjälp av blobtaggar

Blobindextaggar gör datahantering och identifiering enklare. Blobindextaggar är användardefinierade nyckel/värde-indexattribut som du kan använda för dina blobar. När du har konfigurerat kan du kategorisera och hitta objekt i en enskild container eller i alla containrar. Blobresurser kan kategoriseras dynamiskt genom att uppdatera sina indextaggar utan att en ändring krävs i containerorganisationen. Den här metoden erbjuder ett flexibelt sätt att hantera ändrade datakrav. Du kan använda både metadata och indextaggar samtidigt. Mer information om indextaggar finns i Hantera och hitta Azure Blob-data med blobindextaggar.

Dricks

Kodexemplet nedan använder mönstermatchning för att hämta text från en XML-fil med en känd struktur. Exemplet används för att illustrera en förenklad metod för att lägga till blobtaggar med grundläggande Bash-funktioner. Användning av ett verkligt dataparsningsverktyg rekommenderas alltid när du använder data för produktionsarbetsbelastningar.

I följande exempel visas hur du lägger till blobindextaggar i en serie blobar. Exemplet läser data från en XML-fil och använder dem för att skapa indextaggar på flera blobar. Om du vill använda exempelkoden skapar du en lokal blob-list.xml fil i katalogen C:\temp. XML-data anges nedan.

Mer information finns i referensen az storage blob set-tier .

<Venue Name="House of Prime Rib" Type="Restaurant">
  <Files>
    <File path="transactions/12027121.csv" />
    <File path="campaigns/radio-campaign.docx" />
    <File path="photos/bannerphoto.png" />
    <File path="archive/completed/2020review.pdf" />
    <File path="logs/2020/01/01/logfile.txt" />
  </Files>
</Venue>

Exempelkoden itererar raderna i XML-filen. Den letar upp elementet Venue och skapar variabler för värdena Namn och Typ . Den itererar sedan genom de återstående raderna och skapar taggar för varje blob som refereras av en File nod.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"

while read line
do
  
#Set Tag values 
if echo "$line" | grep -q "<Venue";then
    name=`echo "$line" | cut -d'"' -f 2`
    type=`echo "$line" | cut -d'"' -f 4`
    tags=("name=$name")
    tags+=("type=$type")
fi

#Add tags to blobs
if echo "$line" | grep -q "<File ";then
    blobName=`echo "$line" | cut -d'"' -f 2`
    
    echo az storage blob tag set \
        --container-name $containerName \
        --name $blobName \
        --account-name $storageAccount \
        --auth-mode login \
        --tags "{$tags[@]}"
fi

done < /mnt/c/temp/bloblist.xml

Ta bort blobar

Du kan ta bort antingen en enskild blob eller en serie blobar med kommandona az storage blob delete och az storage blob delete-batch . När du tar bort flera blobar kan du använda villkorsstyrda åtgärder, loopar eller annan automatisering enligt exemplen nedan.

Varning

Om du kör följande exempel kan du ta bort blobar permanent. Microsoft rekommenderar att du aktiverar mjuk borttagning av containrar för att skydda containrar och blobar från oavsiktlig borttagning. Mer information finns i Mjuk borttagning för containrar.

Följande exempelkod innehåller ett exempel på både enskilda åtgärder och batchborttagningsåtgärder. Det första exemplet tar bort en enda, namngiven blob. Det andra exemplet illustrerar användningen av logiska åtgärder i Bash för att ta bort flera blobar. I det delete-batch tredje exemplet används kommandot för att ta bort alla blobar med formatet bennett-x, förutom bennett-2.

Mer information finns i az storage blob delete and az storage blob delete-batch reference .

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"

blobName="demo-file.txt"
blobPrefix="sinatra-"

#Delete a single, named blob
az storage blob delete \
    --container-name $containerName \
    --name $blobName \
    --account-name $storageAccount \
    --auth-mode login

#Iterate a blob list, deleting blobs whose names end with even numbers

## Get list of containers
blobList=$(az storage blob list \
    --query "[].name" \
    --prefix $blobPrefix \
    --container-name $containerName \
    --account-name $storageAccount \
    --auth-mode login \
    --output tsv)

## Delete all blobs with the format *bennett-x* except *bennett-2.*
for row in $blobList
do
    #Get the blob's number
    tmpBlob=$(echo $row | sed -e 's/\r//g') 
    tmpName=$(echo ${row%.*} | sed -e 's/\r//g')

    if [ `expr ${tmpName: ${#blobPrefix}} % 2` == 0 ]
    then
        
        echo "Deleting $tmpBlob"
        az storage blob delete \
            --container-name $containerName \
            --name $tmpBlob \
            --account-name $storageAccount \
            --auth-mode login

  fi
done

#Delete multiple blobs using delete-batch
az storage blob delete-batch \
    --source $containerName \
    --pattern bennett-[!2].* \
    --account-name $storageAccount \
    --auth-mode login

I vissa fall är det möjligt att hämta blobar som har tagits bort. Om lagringskontots alternativ för mjuk borttagning av dataskydd är aktiverat returnerar överföring av parametern --include d blobar som har tagits bort inom kontots kvarhållningsperiod. Mer information om mjuk borttagning finns i artikeln Mjuk borttagning för blobar .

Använd följande exempel för att hämta en lista över blobar som tagits bort inom containerns associerade kvarhållningsperiod. I det första exemplet visas en lista över alla nyligen borttagna blobar och de datum då de togs bort. I det andra exemplet visas alla borttagna blobar som matchar ett specifikt prefix.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"

blobPrefix="sinatra-"

#Retrieve a list of all deleted blobs
az storage blob list \
    --container-name $containerName \
    --include d \
    --output table \
    --account-name $storageAccount \
    --auth-mode login \
    --query "[?deleted].{name:name,deleted:properties.deletedTime}"

#Retrieve a list of all deleted blobs matching a specific prefix
az storage blob list \
    --container-name $containerName \
    --prefix $blobPrefix \
    --output table \
    --include d \
    --account-name $storageAccount \
    --auth-mode login \
    --query "[].{name:name,deleted:deleted}"

Återställa en borttagen blob

Som du nämnde i avsnittet Listblobar kan du konfigurera alternativet för skydd mot mjuk borttagning av data på ditt lagringskonto. När det är aktiverat går det att återställa containrar som tagits bort inom den associerade kvarhållningsperioden. Du kan också använda versionshantering för att underhålla tidigare versioner av dina blobar för varje återställning och återställning.

Om blobversionshantering och mjuk borttagning av blobar är aktiverade skapar ändring, överskrivning, borttagning eller återställning av en blob automatiskt en ny version. Vilken metod du ska använda för att återställa en borttagen blob beror på om versionshantering är aktiverat på ditt lagringskonto.

Följande kodexempel återställer alla mjukt borttagna blobar eller återställer den senaste versionen av en blob om versionshantering är aktiverat. Den avgör först om versionshantering är aktiverat med az storage account blob-service-properties show kommandot .

Om versionshantering är aktiverat az storage blob list hämtar kommandot en lista över alla unikt namngivna blobversioner. Därefter hämtas och sorteras blobversionerna i listan efter datum. Om inga versioner hittas med isCurrentVersion attributvärdet az storage blob copy start används kommandot för att göra en aktiv kopia av blobbens senaste version.

Om versionshantering är inaktiverat az storage blob undelete används kommandot för att återställa varje mjuk borttagen blob i containern.

Innan du kan följa det här exemplet måste du aktivera mjuk borttagning på minst ett av dina lagringskonton. Mer information om dataskyddsalternativet mjuk borttagning finns i artikeln Mjuk borttagning för blobar eller az storage blob undelete-referensen .

#!/bin/bash
storageAccount="<storage-account>"
groupName="myResourceGroup"
containerName="demo-container"

blobSvcProps=$(
    az storage account blob-service-properties show \
        --account-name $storageAccount \
        --resource-group $groupName)

softDelete=$(echo "${blobSvcProps}" | jq -r '.deleteRetentionPolicy.enabled')
versioning=$(echo "${blobSvcProps}" | jq -r '.isVersioningEnabled')

# If soft delete is enabled
if $softDelete
then
    
    # If versioning is enabled
    if $versioning
    then

        # Get all blobs and versions using -Unique to avoid processing duplicates/versions
        blobList=$(
            az storage blob list \
                --account-name $storageAccount \
                --container-name $containerName \
                --include dv \--query "[?versionId != null].{name:name}" \
                --auth-mode login -o tsv | uniq)
        
        # Iterate the collection
        for blob in $blobList
        do
            # Get all versions of the blob, newest to oldest
            blobVers=$(
                az storage blob list \
                    --account-name $storageAccount \
                    --container-name $containerName \
                    --include dv \
                    --prefix $blob \
                    --auth-mode login -o json | jq 'sort_by(.versionId) | reverse | .[]')
            # Select the first (newest) object
            delBlob=$(echo "$blobVers" | jq -sr '.[0]')
            
            # Verify that the newest version is NOT the latest (that the version is "deleted")
            if [[ $(echo "$delBlob" | jq '.isCurrentVersion') != true ]]; 
            then
                # Get the blob's versionId property, build the URI to the blob
                versionID=$(echo "$delBlob" | jq -r '.versionId')
                uri="https://$storageAccount.blob.core.windows.net/$containerName/$blob?versionId=$versionID"
                
                # Copy the latest version 
                az storage blob copy start \
                    --account-name $storageAccount \
                    --destination-blob $blob \
                    --destination-container $containerName \
                    --source-uri $uri \
                    --auth-mode login
       
                delBlob=""
            fi
        done

    else

        #Retrieve all deleted blobs
        blobList=$( \
            az storage blob list \
                --container-name $containerName \
                --include d \
                --output tsv \
                --account-name $storageAccount \
                --auth-mode login \
                --query "[?deleted].[name]" \
        )

        #Iterate list of deleted blobs and restore
        for row in $blobList
        do
            tmpName=$(echo $row | sed -e 's/\r//g')
            echo "Restoring $tmpName"
            az storage blob undelete \
                --container-name $containerName \
                --name $tmpName \
                --account-name $storageAccount \
                --auth-mode login
        done

    fi

else
    
    #Soft delete is not enabled
    echo "Sorry, the delete retention policy is not enabled."

fi

Nästa steg