Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
Egy Azure-előfizetés. Lásd: Ingyenes Azure-fiók létrehozása.
Azure PowerShell-modul
Az, amely az Azure-ral való interakcióhoz ajánlott PowerShell-modul. Az Az PowerShell-modul használatának megkezdéséhez tekintse meg Az Azure PowerShell-telepítése című témakört.
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 a Connect-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 -Context paraméter használatával a környezeti objektumra 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 paraméterrel határozza meg a C:\Temp\*.png útvonalat. A csillag (*) helyettesítő karakter felvétele az .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. A -Container és -Name paraméterek használatával listázhat egy adott blobot egy ismert tárolóban. 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 -Name paramétert helyettesítő karakterrel is használhatja, hogy fájlneveket vagy típusokat adjon meg.
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 token lehetővé teszi, hogy több kéréssel bármennyi blobot lekérjen. 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 vannak lekérve, és egy állapotsor megjeleníti a számlálás közbeni 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 -Blob és -Container 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 csak olvashatók, míg mások olvashatók 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 törlésre kerül a memóriából, hogy a metaadatok ne legyenek beolvasva a memóriába töltött 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.
A forrásblob másolása a 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 vagy fájlokat másolhat egy tárfiókba vagy tárfiókból. További információ az AzCopy használatának első lépéseiről.
Az alábbi példa átmásolja a bannerphoto.png blobot a fényképek tárolójából az archív tároló fényképek mappájába. 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. A meglévő célblob felülírásra kerül.
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épről nem lehet bérleti szerződést kötni. 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 megközelítéssel módosíthatja a szintet a gyakori elérésű, ritka elérésű és az archiválás között.
Az alacsony vagy magas hőmérsékleti szintről archív módra való átvá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 blob rehidratálásáról az archív szintről.
Az alábbi mintakód az összes blobot a forró szintre állítja a archive tárolón belül.
$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 Get-Content és Get-Data 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óért lásd: Tárolók lágy 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. A verziókezelés használatával megőrizheti a blobok korábbi verzióit minden helyreállításhoz és visszaá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 BlobBaseClient.Undelete metódus kerül alkalmazásra a tárolóban lévő összes lágyan törölt blob helyreállítására.
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.
-ContinuationToken paraméternek a $maxCount változóval való használata korlátozza a blobok számát a csoporton belül, hogy megőrizze az erőforrásokat. 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."
}