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
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 lásd az Azure PowerShell telepítését ismertető szakaszt.
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."
}