Share via


Blokkblobok kezelése a PowerShell-lel

A Blob Storage támogatja a blokkblobokat, a hozzáfűző blobokat és a lapblobokat. A blokkblobok nagy mennyiségű adat hatékony feltöltésére vannak optimalizálva. A blokkblobok ideálisak képek, dokumentumok és más típusú adatok tárolására, amelyek nem tartoznak véletlenszerű olvasási és írási műveletek hatálya alá. Ez a cikk a blokkblobok működését ismerteti.

Előfeltételek

Környezeti objektum konfigurálása hitelesítő adatok beágyazásához

Az Azure Storage felé irányuló minden kérést engedélyezni kell. A Microsoft Entra-fiókjával vagy a fiók hozzáférési kulcsaival engedélyezheti a PowerShellből érkező kéréseket. A cikkben szereplő példák a Microsoft Entra-hitelesítést környezeti objektumokkal használják. A környezeti objektumok beágyazják a Microsoft Entra hitelesítő adatait, és átadják azokat a későbbi adatműveletek során.

Ha Microsoft Entra-fiókkal szeretne bejelentkezni az Azure-fiókjába, nyissa meg a PowerShellt, és hívja meg az Csatlakozás-AzAccount parancsmagot.

#Connect to your Azure subscription
Connect-AzAccount

A kapcsolat létrejötte után hozza létre az Azure-környezetet. A Microsoft Entra ID-val való hitelesítés automatikusan létrehoz egy Azure-környezetet az alapértelmezett előfizetéshez. Bizonyos esetekben előfordulhat, hogy a hitelesítés után egy másik előfizetés erőforrásaihoz kell hozzáférnie. Az aktuális Azure-munkamenethez társított előfizetést az aktív munkamenet-környezet módosításával módosíthatja.

Az alapértelmezett előfizetés használatához hozza létre a környezetet a New-AzStorageContext parancsmag meghívásával. Adja meg a paramétert -UseConnectedAccount , hogy az adatműveletek a Microsoft Entra hitelesítő adataival legyenek végrehajtva.

#Create a context object using Azure AD credentials
$ctx = New-AzStorageContext -StorageAccountName <storage account name> -UseConnectedAccount

Az előfizetések módosításához kérje le a környezetobjektumot a Get-AzSubscription parancsmaggal, majd módosítsa az aktuális környezetet a Set-AzContext használatával. További információ: Az aktív előfizetés módosítása.

Tároló létrehozása

Minden blobadat tárolókban van tárolva, ezért az adatok feltöltéséhez legalább egy tárolóerőforrásra van szüksége. Ha szükséges, az alábbi példában hozzon létre egy tárolót. További információ: Blobtárolók kezelése a PowerShell használatával.

#Create a container object
$container = New-AzStorageContainer -Name "mycontainer" -Context $ctx

Az alábbi példák használata esetén a zárójelek helyőrző értékeit a saját értékeire kell cserélnie. További információ az Azure-ba a PowerShell-lel való bejelentkezésről: Bejelentkezés az Azure PowerShell-lel.

Blob feltöltése

Ha egy fájlt fel szeretne tölteni egy blokkblobba, adja át a szükséges paraméterértékeket a Set-AzStorageBlobContent parancsmagnak. Adja meg az elérési utat és a fájlnevet a -File paraméterrel, valamint a tároló nevét a -Container paraméterrel. A paraméterrel a környezeti objektumra -Context mutató hivatkozást is meg kell adnia.

Ez a parancs létrehozza a blobot, ha nem létezik, vagy ha létezik, felülírást kér. Ha átadja a paramétert a -Force parancsmagnak, megerősítés nélkül felülírhatja a fájlt.

Az alábbi példa egy paraméterértéket -File határoz meg egyetlen, elnevezett fájl feltöltéséhez. Azt is bemutatja, hogy a PowerShell-folyamat operátora és Get-ChildItem parancsmagja több fájl feltöltésére használható. A Get-ChildItem parancsmag a -Path C:\Temp\*.png paramétert használja. A csillag (*) helyettesítő karakter felvétele a .png fájlnévkiterjesztéssel rendelkező összes fájlt meghatározza. A -Recurse paraméter a Temp könyvtárban és annak alkönyvtáraiban keres.

#Set variables
$path          = "C:\temp\" 
$containerName = "mycontainer"
$filename      = "demo-file.txt"
$imageFiles    = $path + "*.png"
$file          = $path + $filename

#Upload a single named file
Set-AzStorageBlobContent -File $file -Container $containerName -Context $ctx

#Upload multiple image files recursively
 Get-ChildItem -Path $imageFiles -Recurse | Set-AzStorageBlobContent -Container $containerName -Context $ctx

Az eredmény megjeleníti a tárfiók nevét, a tároló nevét, és megjeleníti a feltöltött fájlok listáját.

   AccountName: demostorageaccount, ContainerName: demo-container

Name              BlobType   Length  ContentType                LastModified          AccessTier  IsDeleted
----              --------   ------  -----------                ------------          ----------  ---------
demo-file.txt     BlockBlob  222     application/octet-stream   2021-12-14 01:38:03Z  Cool        False     
hello-world.png   BlockBlob  14709   application/octet-stream   2021-12-14 01:38:03Z  Cool        False
hello-world2.png  BlockBlob  12472   application/octet-stream   2021-12-14 01:38:03Z  Cool        False
hello-world3.png  BlockBlob  13537   application/octet-stream   2021-12-14 01:38:03Z  Cool        False

Blobok listázása

A Get-AzStorageBlob parancsmag egy tárolóban tárolt blobok listázására szolgál. A keresés hatókörének meghatározásához különböző megközelítéseket használhat. Az és -Name a -Container paraméter használatával listázhat egy adott blobot egy ismert tárolón belül. Ha egy adott tárolóban lévő összes blob szűretlen listáját szeretné létrehozni, használja egyedül a -Container paramétert -Name érték nélkül.

A tárfiókok tárolóinak vagy blobjainak száma nincs korlátozva. A több ezer blob lekérésének elkerülése érdekében érdemes korlátozni a visszaadott adatok mennyiségét. Több blob beolvasásakor a paraméterrel megadhatja azokat a -Prefix blobokat, amelyeknek a neve egy adott sztringgel kezdődik. A paramétert helyettesítő karakterrel is megadhat -Name fájlneveket vagy típusokat.

A -MaxCount paraméter a tárolóból visszaadott szűretlen blobok számának korlátozására használható. Az összes Azure-erőforrásra 5000 szolgáltatási korlát vonatkozik. Ez a korlát biztosítja, hogy kezelhető mennyiségű adat legyen lekérve, és a teljesítmény ne legyen hatással. Ha a visszaadott blobok száma meghaladja az értéket vagy a -MaxCount szolgáltatási korlátot, a rendszer egy folytatási jogkivonatot ad vissza. Ez a jogkivonat lehetővé teszi, hogy több kérést használjon tetszőleges számú blob lekéréséhez. További információ a bloberőforrások számbavételéről.

Az alábbi példa számos módszert mutat be a blobok listájának megadására. Az első megközelítés egyetlen blobot sorol fel egy adott tárolóerőforráson belül. A második módszer egy helyettesítő karakterrel listáz minden .jpg fájlt Louis előtaggal. A keresés a paramétert használó öt tárolóra korlátozódik -MaxCount . A harmadik megközelítés a tárolón belüli összes blob lekérésének korlátozására használ -MaxCount és -ContinuationToken paramétereket.

#Set variables
$namedContainer  = "named-container"
$demoContainer   = "mycontainer"
$containerPrefix = "demo"

$maxCount = 1000
$total     = 0
$token     = $Null

#Approach 1: List all blobs in a named container
Get-AzStorageBlob -Container $namedContainer -Context $ctx

#Approach 2: Use a wildcard to list blobs in all containers
Get-AzStorageContainer -MaxCount 5 -Context $ctx | Get-AzStorageBlob -Blob "*louis*.jpg" 

#Approach 3: List batches of blobs using MaxCount and ContinuationToken parameters
Do
{
     #Retrieve blobs using the MaxCount parameter
     $blobs = Get-AzStorageBlob -Container $demoContainer `
         -MaxCount $maxCount `
         -ContinuationToken $token `
         -Context $ctx
     $blobCount = 1
     
     #Loop through the batch
     Foreach ($blob in $blobs)
     {
         #To-do: Perform some work on individual blobs here

         #Display progress bar
         $percent = $($blobCount/$maxCount*100)
         Write-Progress -Activity "Processing blobs" -Status "$percent% Complete" -PercentComplete $percent
         $blobCount++
     }

     #Update $total
     $total += $blobs.Count
      
     #Exit if all blobs processed
     If($blobs.Length -le 0) { Break; }
      
     #Set continuation token to retrieve the next batch
     $token = $blobs[$blobs.Count -1].ContinuationToken
 }
 While ($null -ne $token)
 Write-Host "`n`n   AccountName: $($ctx.StorageAccountName), ContainerName: $demoContainer `n"
 Write-Host "Processed $total blobs in $namedContainer."

Az első két módszer megjeleníti a tárfiókot és a tárolóneveket, valamint a lekért blobok listáját. A harmadik megközelítés a blobok teljes számát jeleníti meg egy nevesített tárolóban. A blobok kötegekben lesznek lekérve, és egy állapotsor megjeleníti a darabszám alatti előrehaladást.

   AccountName: demostorageaccount, ContainerName: named-container

Name                 BlobType    Length    ContentType    LastModified          AccessTier    IsDeleted
----                 --------    ------    -----------    ------------          ----------    ---------
index.txt            BlockBlob   222       text/plain     2021-12-15 22:00:10Z  Cool          False
miles-davis.txt      BlockBlob   23454     text/plain     2021-12-15 22:17:59Z  Cool          False
cab-calloway.txt     BlockBlob   18419     text/plain     2021-12-15 22:17:59Z  Cool          False
benny-goodman.txt    BlockBlob   17726     text/plain     2021-12-15 22:17:59Z  Cool          False


   AccountName: demostorageaccount, ContainerName: demo-container

Name                 BlobType    Length    ContentType    LastModified          AccessTier    IsDeleted
----                 --------    ------    -----------    ------------          ----------    ---------
louis-armstrong.jpg  BlockBlob   211482    image/jpeg     2021-12-14 01:38:03Z  Cool          False
louis-jordan.jpg     BlockBlob   55766     image/jpeg     2021-12-14 01:38:03Z  Cool          False
louis-prima.jpg      BlockBlob   290651    image/jpeg     2021-12-14 01:38:03Z  Cool          False


   AccountName: demostorageaccount, ContainerName: demo-container

Processed 5257 blobs in demo-container.

Blob letöltése

A használati esettől függően a Get-AzStorageBlobContent parancsmag egy vagy több blob letöltésére is használható. A legtöbb művelethez hasonlóan mindkét megközelítéshez környezeti objektum szükséges.

Egyetlen elnevezett blob letöltéséhez közvetlenül meghívhatja a parancsmagot, és megadhatja a paraméterek és -Container a -Blob paraméterek értékeit. A blob alapértelmezés szerint letöltődik a működő PowerShell-címtárba, de megadhat egy másik helyet. A célhely módosításához érvényes, meglévő elérési utat kell átadni a -Destination paraméterrel. Mivel a művelet nem tud célhelyet létrehozni, hibaüzenettel meghiúsul, ha a megadott elérési út nem létezik.

A parancsmag és a Get-AzStorageBlob PowerShell-folyamat operátorának kombinálásával több blob is letölthető. Először hozzon létre egy bloblistát a Get-AzStorageBlob parancsmaggal. Ezután a folyamatkezelő és a Get-AzStorageBlobContent parancsmag használatával kérje le a blobokat a tárolóból.

Az alábbi mintakód egy és több letöltési módszert is mutat be. Emellett egyszerűsített módszert is kínál az összes tárolóban egy helyettesítő karakter használatával adott fájlok keresésére. Mivel egyes környezetek több százezer erőforrással rendelkezhetnek, a -MaxCount paraméter használata ajánlott.

#Set variables
$containerName = "mycontainer"
$path          = "C:\temp\downloads\"
$blobName      = "demo-file.txt"
$fileList      = "*.png"
$pipelineList  = "louis*"
$maxCount      = 10

#Download a single named blob
Get-AzStorageBlobContent -Container $containerName -Blob $blobName -Destination $path -Context $ctx

#Download multiple blobs using the pipeline
Get-AzStorageBlob -Container $containerName -Blob $fileList -Context $ctx | Get-AzStorageBlobContent

#Use wildcard to download blobs from all containers
Get-AzStorageContainer -MaxCount $maxCount `
     -Context $ctx | Get-AzStorageBlob `
     -Blob "louis*" | Get-AzStorageBlobContent

Az eredmény megjeleníti a tárfiókot és a tárolóneveket, és megjeleníti a letöltött fájlok listáját.

   AccountName: demostorageaccount, ContainerName: demo-container

Name                 BlobType   Length  ContentType              LastModified          AccessTier  IsDeleted
----                 --------   ------  -----------              ------------          ----------  ---------
demo-file.txt        BlockBlob  222     application/octet-stream 2021-12-14 01:38:03Z  Unknown     False
hello-world.png      BlockBlob  14709   application/octet-stream 2021-12-14 01:38:03Z  Unknown     False
hello-world2.png     BlockBlob  12472   application/octet-stream 2021-12-14 01:38:03Z  Unknown     False
hello-world3.png     BlockBlob  13537   application/octet-stream 2021-12-14 01:38:03Z  Unknown     False

   AccountName: demostorageaccount, ContainerName: public-container

Name                 BlobType   Length  ContentType              LastModified          AccessTier  IsDeleted
----                 --------   ------  -----------              ------------          ----------  ---------
louis-armstrong.jpg  BlockBlob  211482  image/jpeg               2021-12-14 18:56:03Z  Unknown     False

   AccountName: demostorageaccount, ContainerName: read-only-container

Name                 BlobType   Length  ContentType              LastModified          AccessTier  IsDeleted
----                 --------   ------  -----------              ------------          ----------  ---------
louis-jordan.jpg     BlockBlob  55766   image/jpeg               2021-12-14 18:56:21Z  Unknown     False

   AccountName: demostorageaccount, ContainerName: hidden-container

Name                 BlobType   Length  ContentType              LastModified          AccessTier  IsDeleted
----                 --------   ------  -----------              ------------          ----------  ---------
louis-prima.jpg      BlockBlob  290651  image/jpeg               2021-12-14 18:56:45Z  Unknown     False

Blobtulajdonságok és metaadatok kezelése

A tároló a rendszertulajdonságokat és a felhasználó által definiált metaadatokat is elérhetővé teszi. A rendszertulajdonságok minden Blob Storage-erőforráson léteznek. Egyes tulajdonságok írásvédettek, míg mások írásvédettek vagy beállíthatók. A borítók alatt egyes rendszertulajdonságok bizonyos szabványos HTTP-fejlécekre vannak leképezve.

A felhasználó által definiált metaadatok egy vagy több, a Blob Storage-erőforráshoz megadott név-érték párból állnak. Metaadatokkal tárolhatja ezeket az értékeket az erőforrással. A metaadat-értékek csak saját célra szolgálnak, és nem befolyásolják az erőforrás viselkedését.

Blobtulajdonságok olvasása

A blob tulajdonságainak vagy metaadatainak olvasásához először le kell kérnie a blobot a szolgáltatásból. Get-AzStorageBlob A parancsmaggal lekérheti a blob tulajdonságait és metaadatait, tartalmát azonban nem. Ezután a BlobClient.GetProperties metódus használatával kérje le a blob tulajdonságait. A tulajdonságok vagy metaadatok ezután szükség szerint olvashatók vagy állíthatók be.

Az alábbi példa lekéri a blobot, és felsorolja annak tulajdonságait.

$blob = Get-AzStorageBlob -Blob "blue-moon.mp3" -Container "mycontainer" -Context $ctx
$properties = $blob.BlobClient.GetProperties()
Echo $properties.Value

Az eredmény megjeleníti a blob tulajdonságainak listáját az alábbi példában látható módon.

LastModified                         : 11/16/2021 3:42:07 PM +00:00
CreatedOn                            : 11/16/2021 3:42:07 PM +00:00
Metadata                             : {}
BlobType                             : Block
LeaseDuration                        : Infinite
LeaseState                           : Available
LeaseStatus                          : Unlocked
ContentLength                        : 2163298
ContentType                          : audio/mpeg
ETag                                 : 0x8D9C0AA9E0CBA78
IsServerEncrypted                    : True
AccessTier                           : Cool
IsLatestVersion                      : False
TagCount                             : 0
ExpiresOn                            : 1/1/0001 12:00:00 AM +00:00
LastAccessed                         : 1/1/0001 12:00:00 AM +00:00
HasLegalHold                         : False

Blob metaadatainak olvasása és írása

A blob metaadatai a blobhoz társított név-érték párok választható készletei. Ahogy az előző példában is látható, a blobokhoz kezdetben nincsenek metaadatok társítva, de szükség esetén hozzáadható. A blob metaadatainak frissítéséhez használja a metódust BlobClient.UpdateMetadata . Ez a metódus csak általános IDictionary objektumban tárolt kulcs-érték párokat fogad el. További információ: BlobClient osztálydefiníció.

Az alábbi példa először frissíti, majd véglegesíti egy blob metaadatait, majd lekéri. A minta blob ki van ürítve a memóriából, hogy a metaadatok ne legyenek beolvasva a memóriában lévő objektumból.

#Set variable
$container = "mycontainer"
$blobName  = "blue-moon.mp3"

#Retrieve blob
$blob = Get-AzStorageBlob -Blob $blobName -Container $container -Context $ctx

#Create IDictionary, add key-value metadata pairs to IDictionary
$metadata = New-Object System.Collections.Generic.Dictionary"[String,String]"
$metadata.Add("YearWritten","1934")
$metadata.Add("YearRecorded","1958")
$metadata.Add("Composer","Richard Rogers")
$metadata.Add("Lyricist","Lorenz Hart")
$metadata.Add("Artist","Tony Bennett")

#Update metadata
$blob.BlobClient.SetMetadata($metadata, $null)

#Flush blob from memory, retrieve updated blob, retrieve properties
$blob = $null
$blob = Get-AzStorageBlob -Blob $blobName -Container $container -Context $ctx
$properties = $blob.BlobClient.GetProperties()
 
#Display metadata
Echo $properties.Value.Metadata

Az eredmény a blob újonnan frissített metaadatait adja vissza az alábbi példában látható módon.

Key          Value         
---          -----         
YearWritten  1934          
YearRecorded 1958          
Composer     Richard Rogers
Lyricist     Lorenz Hart   
Artist       Tony Bennett

Blobok másolási műveletei

Számos forgatókönyv van, amelyekben különböző típusú blobok másolhatók. A cikkben szereplő példák a blobok blokkolására korlátozódnak.

Forrásblob másolása célblobba

Az ugyanazon tárfiókon belüli egyszerűsített másolási művelethez használja a Copy-AzStorageBlob parancsmagot. Mivel a művelet egy blobot másol ugyanabban a tárfiókban, szinkron művelet. A fiókközi műveletek aszinkronok.

Érdemes megfontolni az AzCopy használatát az egyszerűség és a teljesítmény érdekében, különösen akkor, ha blobokat másol a tárfiókok között. Az AzCopy egy parancssori segédprogram, amellyel blobokat és fájlokat másolhat a tárfiókok között. További információ az AzCopy használatának első lépéseiről.

Az alábbi példa a bannerphoto.png blobot a fényképek tárolójából az archív tároló fényképek mappájába másolja. Mindkét tároló ugyanabban a tárfiókban található. Az eredmény ellenőrzi a másolási művelet sikerességét.

$blobname = "bannerphoto.png"
Copy-AzStorageBlob -SrcContainer "photos" `
     -SrcBlob $blobname -DestContainer "archive" `
     -DestBlob $("photos/$blobname") -Context $ctx

AccountName: demostorageaccount, ContainerName: archive

Name                BlobType   Length  ContentType  LastModified          AccessTier  IsDeleted  VersionId
----                --------   ------  -----------  ------------          ----------  ---------  ---------
photos/bannerphoto  BlockBlob  12472   image/png    2021-11-27 23:11:43Z  Cool        False

A paraméterrel -Force felülírhat egy azonos nevű meglévő blobot a célhelyen. Ez a művelet hatékonyan helyettesíti a célblobot. Emellett eltávolítja a nem véglegesített blokkokat, és felülírja a célblob metaadatait.

Pillanatkép másolása másik nevű célblobba

Az eredményként kapott célblob egy írható blob, és nem pillanatkép.

A másolási művelet forrásblobja lehet blokkblob, hozzáfűző blob, lapblob vagy pillanatkép. Ha a célblob már létezik, a forrásblob típusával megegyező blobtípusúnak kell lennie. Felülír egy meglévő célblobot.

A célblob nem módosítható másolási művelet közben. A célblobok csak egy befejezetlen másolási művelettel rendelkezhetnek. Más szóval egy blob nem lehet több függőben lévő másolási művelet célja.

Ha egy blobot ugyanabban a tárfiókban másol, az szinkron művelet. A fiókközi másolási műveletek aszinkronok.

A program mindig másolja a teljes forrásblobot vagy fájlt. A bájtok vagy blokkok tartományának másolása nem támogatott.

A blob másolásakor a rendszer tulajdonságai a célblobba lesznek másolva ugyanazokkal az értékekkel.

Azt is bemutatja, hogyan szakíthat meg aszinkron másolási műveletet.

Pillanatkép-blobok

A pillanatkép egy adott időpontban készített blob írásvédett verziója. A blob-pillanatképek megegyeznek az alapblobjával, azzal a kivételrel, hogy egy DateTime-érték hozzá van fűzve az URI-hoz. Ez az érték a pillanatkép létrehozásának időpontját jelzi, és az egyetlen különbséget teszi az alapblob és a pillanatkép között.

Az alapblobhoz társított bérletek nem befolyásolják a pillanatképet. Pillanatképen nem szerezhet be bérletet. További információ a Blob-pillanatképekről.

Az alábbi mintakód lekéri a blobot egy tárolóból, és pillanatképet hoz létre róla.

$blob = Get-AzStorageBlob -Container "manuscripts" -Blob "novels/fast-cars.docx" -Context $ctx
$blob.BlobClient.CreateSnapshot()

Blobszint beállítása

Amikor módosítja egy blob szintjét, áthelyezi a blobot és annak összes adatát a célszintre. A módosítás végrehajtásához kérjen le egy blobot a Get-AzStorageBlob parancsmaggal, és hívja meg a metódust BlobClient.SetAccessTier . Ezzel a módszerrel módosíthatja a réteget a gyakori elérésű, a ritka elérésű és az archiválás között.

A ritka elérésű vagy a gyakori elérésűrőlaz archív szintre való váltás szinte azonnal megtörténik. Miután a blob átkerül az archív szintre, offline állapotúnak minősül, és nem olvasható és nem módosítható. Mielőtt elolvashatja vagy módosíthatja egy archivált blob adatait, újra kell hidratálnia azokat egy online szintre. További információ a blobrehidratálásról az archív szintről.

Az alábbi mintakód a tárolóban lévő összes blob esetében forró szintre állítja a archive szintet.

$blobs = Get-AzStorageBlob -Container archive -Context $ctx
Foreach($blob in $blobs) {
    $blob.BlobClient.SetAccessTier("Hot")
}

Blobcímkéket használó műveletek

A blobindexcímkék megkönnyítik az adatkezelést és a felderítést. A blobindex-címkék felhasználó által definiált kulcs-érték index attribútumok, amelyeket a blobokra alkalmazhat. A konfigurálás után kategorizálhatja és megkeresheti az objektumokat egy adott tárolóban vagy az összes tárolóban. A bloberőforrások dinamikusan kategorizálhatók az indexcímkék frissítésével anélkül, hogy módosítást kellene igényelniük a tárolószervezetben. Az indexcímkék rugalmas módot kínálnak a változó adatkövetelmények kezelésére. Egyszerre használhat metaadat- és indexcímkéket is. További információ az indexcímkékről: Azure Blob-adatok kezelése és megkeresése blobindexcímkékkel.

Az alábbi példa bemutatja, hogyan adhat hozzá blobindexcímkéket blobok sorozatához. A példa adatokat olvas be egy XML-fájlból, és arra használja, hogy indexcímkéket hozzon létre több blobon. A mintakód használatához hozzon létre egy helyi blob-list.xml fájlt a C:\temp könyvtárban. Az XML-adatokat az alábbi példában adhatja meg.

<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>

A mintakód létrehoz egy kivonattáblát, és hozzá rendeli a $tags változót. Ezután a parancsmagok és Get-Data a Get-Content parancsmagok használatával hoz létre egy objektumot az XML-struktúra alapján. Ezután kulcs-érték párokat ad hozzá a címkeértékként használni kívánt kivonattáblához. Végül iterálja az XML-objektumot, és címkéket hoz létre az egyes File csomópontokhoz.

#Set variables
$filePath = "C:\temp\blob-list.xml"
$tags     = @{}

#Get data, set tag key-values
[xml]$data = Get-Content -Path $filepath
$tags.Add("VenueName", $data.Venue.Name)
$tags.Add("VenueType", $data.Venue.Type)
 
#Loop through files and add tag
$data.Venue.Files.ChildNodes | ForEach-Object {
    #break the path: container name, blob
    $path = $_.Path -split "/",2
   
    #set apply the blob tags
    Set-AzStorageBlobTag -Container $location[0] -Blob $location[1] -Tag $tags -Context $ctx
 }

Blobok törlése

A parancsmaggal Remove-AzStorageBlob egyetlen blobot vagy blobsorozatot is törölhet. Több blob törlésekor feltételes műveleteket, hurkokat vagy PowerShell-folyamatot használhat az alábbi példákban látható módon.

Figyelmeztetés:

Az alábbi példák futtatása véglegesen törölheti a blobokat. A Microsoft javasolja a tárolók helyreállítható törlésének engedélyezését a tárolók és blobok véletlen törlés elleni védelméhez. További információ: Tárolók helyreállítható törlése.

#Create variables
$containerName  = "mycontainer"
$blobName       = "demo-file.txt"
$prefixName     = "file"

#Delete a single, named blob
Remove-AzStorageBlob -Blob $blobName -Container $containerName -Context $ctx

#Iterate a loop, deleting blobs
for ($i = 1; $i -le 3; $i++) { 
    Remove-AzStorageBlob -Blob (-join($prefixName, $i, ".txt")) -Container $containerName -Context $ctx
} 

#Retrieve blob list, delete using a pipeline
Get-AzStorageBlob -Prefix $prefixName -Container $containerName -Context $ctx | Remove-AzStorageBlob

Bizonyos esetekben lehetséges a törölt blobok lekérése. Ha a tárfiók helyreállítható törlési adatvédelmi lehetősége engedélyezve van, a paraméter a -IncludeDeleted társított megőrzési időszakon belül törölt blobokat adja vissza. A helyreállítható törléssel kapcsolatos további információkért tekintse meg a blobok helyreállítható törléséről szóló cikket.

Az alábbi példában lekérheti a tárolóhoz társított megőrzési időszakon belül törölt blobok listáját. Az eredmény megjeleníti a legutóbb törölt blobok listáját.

#Retrieve a list of blobs including those recently deleted
Get-AzStorageBlob -Prefix $prefixName -IncludeDeleted -Context $ctx

AccountName: demostorageaccount, ContainerName: demo-container

Name       BlobType   Length  ContentType                LastModified          AccessTier    IsDeleted
----       --------   ------  -----------                ------------          ----------    ---------
file.txt   BlockBlob  22      application/octet-stream   2021-12-16 20:59:41Z  Cool          True
file2.txt  BlockBlob  22      application/octet-stream   2021-12-17 00:14:24Z  Cool          True
file3.txt  BlockBlob  22      application/octet-stream   2021-12-17 00:14:24Z  Cool          True
file4.txt  BlockBlob  22      application/octet-stream   2021-12-17 00:14:25Z  Cool          True

Törölt blob visszaállítása

A Blobok listája szakaszban leírtaknak megfelelően konfigurálhatja a helyreállítható törlési adatvédelmi beállítást a tárfiókban. Ha engedélyezve van, a kapcsolódó megőrzési időszakon belül törölt blobok visszaállíthatók. Verziószámozással is fenntarthatja a blobok korábbi verzióit minden helyreállításhoz és helyreállításhoz.

Ha a blob verziószámozása és a blob helyreállítható törlése is engedélyezve van, akkor a blobok módosítása, felülírása, törlése vagy visszaállítása automatikusan létrehoz egy új verziót. A törölt blobok visszaállításának módja attól függ, hogy engedélyezve van-e a verziószámozás a tárfiókban.

Az alábbi kódminta visszaállítja az összes helyreállíthatóan törölt blobot, vagy ha engedélyezve van a verziószámozás, visszaállítja a blob legújabb verzióját. Először meghatározza, hogy a verziószámozás engedélyezve van-e a Get-AzStorageBlobServiceProperty parancsmaggal.

Ha engedélyezve van a verziószámozás, a parancsmag lekéri az Get-AzStorageBlob összes egyedileg elnevezett blobverzió listáját. Ezután a lista blobverziói dátum szerint lesznek lekérve és rendezve. Ha az attribútumértékkel LatestVersion nem található verzió, a Copy-AzBlob parancsmag a legújabb verzió aktív másolatának készítésére szolgál.

Ha a verziószámozás le van tiltva, a rendszer a BlobBaseClient.Undelete tárolóban lévő összes helyreállíthatóan törölt blobot visszaállítja.

A példa követéséhez engedélyeznie kell a helyreállítható törlést vagy verziószámozást legalább egy tárfiókon.

Fontos

Az alábbi példa felsorolja a blobok egy csoportját, és a feldolgozás előtt tárolja őket a memóriában. Ha engedélyezve van a verziószámozás, a blobok is rendezve lesznek. A paraméter változóval való -ContinuationToken$maxCount használata korlátozza a csoporton belüli blobok számát az erőforrások megőrzéséhez. Ha egy tároló több millió blobból áll, ez rendkívül költséges lesz. Módosíthatja a $maxCount változó értékét, de ha egy tároló több millió blobból áll, a szkript lassan dolgozza fel a blobokat.

A helyreállítható törlés adatvédelmi beállításával kapcsolatos további információkért tekintse meg a blobok helyreállítható törléséről szóló cikket.

$accountName   ="myStorageAccount"
$groupName     ="myResourceGroup"
$containerName ="mycontainer"
$maxCount      = 1000
$token         = $null


$blobSvc = Get-AzStorageBlobServiceProperty `
    -StorageAccountName $accountName `
    -ResourceGroupName $groupName

# If soft delete is enabled
if($blobSvc.DeleteRetentionPolicy.Enabled)
{
    # If versioning is enabled
    if($blobSvc.IsVersioningEnabled -eq $true)
    {
        # Set context
        $ctx = New-AzStorageContext `
            -StorageAccountName $accountName `
            -UseConnectedAccount
        do
        {
            # Get all blobs and versions using -Unique 
            # to avoid processing duplicates/versions
            $blobs = Get-AzStorageBlob `
                -Container $containerName `
                -Context $ctx -IncludeVersion | `
                    Where-Object {$_.VersionId -ne $null} | `
                    Sort-Object -Property Name -Unique

            # Iterate the collection
            foreach ($blob in $blobs)
            {
                # Process versions
                if($blob.VersionId -ne $null)
                {
            
                    # Get all versions of the blob, newest to oldest
                    $delBlob = Get-AzStorageBlob `
                        -Container $containerName `
                        -Context $ctx `
                        -Prefix $blob.Name `
                        -IncludeDeleted -IncludeVersion  | `
                            Sort-Object -Property VersionId -Descending

                    # Verify that the newest version is NOT the latest (that the version is "deleted")
                    if (-Not $delBlob[0].IsLatestVersion)
                    {
                        $delBlob[0] | Copy-AzStorageBlob `
                            -DestContainer $containerName `
                            -DestBlob $delBlob[0].Name
                    }
                
                    #Dispose the temporary object
                    $delBlob = $null
                }
            }
            $token = $blobs[$blobs.Count -1].ContinuationToken;
        }
        while ($null -ne $token)
    }

    # Otherwise (if versioning is disabled)
    else
    {
        $blobs = Get-AzStorageBlob `
            -Container $containerName `
            -Context $ctx -IncludeDeleted | `
                Where-Object {$_.IsDeleted}
        foreach($blob in $blobs)
        {
            if($blob.IsDeleted) { $blob.BlobBaseClient.Undelete() }
        }
    }
}
else
{
    echo "Sorry, the delete retention policy is not enabled."
}

Következő lépések