Správa objektů blob bloku pomocí PowerShellu
Úložiště objektů blob podporuje objekty blob bloku, doplňovací objekty blob a objekty blob stránky. Objekty blob bloku jsou optimalizované pro efektivní nahrávání velkých objemů dat. Objekty blob bloku jsou ideální pro ukládání obrázků, dokumentů a jiných typů dat, které nejsou předmětem náhodných operací čtení a zápisu. Tento článek vysvětluje, jak pracovat s objekty blob bloku.
Předpoklady
Předplatné Azure. Viz Získání bezplatné zkušební verze Azure.
Modul
Az
Azure PowerShellu, což je doporučený modul PowerShellu pro interakci s Azure. Pokud chcete začít s modulem Az PowerShell, projděte si téma věnované instalaci Azure PowerShellu.
Konfigurace kontextového objektu pro zapouzdření přihlašovacích údajů
Každá žádost o službu Azure Storage musí být autorizovaná. Žádost provedenou z PowerShellu můžete autorizovat pomocí účtu Microsoft Entra nebo pomocí přístupových klíčů účtu. Příklady v tomto článku používají autorizaci Microsoft Entra s kontextovými objekty. Kontextové objekty zapouzdřují vaše přihlašovací údaje Microsoft Entra a předávají je během následných operací s daty.
Pokud se chcete přihlásit ke svému účtu Azure pomocí účtu Microsoft Entra, otevřete PowerShell a zavolejte rutinu Připojení-AzAccount.
#Connect to your Azure subscription
Connect-AzAccount
Po vytvoření připojení vytvořte kontext Azure. Ověřování pomocí Id Microsoft Entra automaticky vytvoří kontext Azure pro vaše výchozí předplatné. V některých případech budete po ověření potřebovat přístup k prostředkům v jiném předplatném. Předplatné přidružené k aktuální relaci Azure můžete změnit úpravou kontextu aktivní relace.
Pokud chcete použít výchozí předplatné, vytvořte kontext voláním rutiny New-AzStorageContext
. -UseConnectedAccount
Zahrňte parametr tak, aby se datové operace prováděly pomocí vašich přihlašovacích údajů Microsoft Entra.
#Create a context object using Azure AD credentials
$ctx = New-AzStorageContext -StorageAccountName <storage account name> -UseConnectedAccount
Pokud chcete změnit předplatná, načtěte kontextový objekt pomocí rutiny Get-AzSubscription a pak změňte aktuální kontext pomocí Set-AzContext. Další informace najdete v tématu Změna aktivního předplatného.
Vytvoření kontejneru
Všechna data objektů blob jsou uložená v kontejnerech, takže před nahráním dat potřebujete alespoň jeden prostředek kontejneru. V případě potřeby vytvořte kontejner úložiště pomocí následujícího příkladu. Další informace najdete v tématu Správa kontejnerů objektů blob pomocí PowerShellu.
#Create a container object
$container = New-AzStorageContainer -Name "mycontainer" -Context $ctx
Při použití následujících příkladů je potřeba nahradit zástupné hodnoty v hranatých závorkách vlastními hodnotami. Další informace o přihlašování k Azure pomocí PowerShellu najdete v tématu Přihlášení pomocí Azure PowerShellu.
Nahrání objektu blob
Pokud chcete nahrát soubor do objektu blob bloku, předejte rutině Set-AzStorageBlobContent
požadované hodnoty parametrů. Zadejte cestu a název souboru s parametrem -File
a název kontejneru s parametrem -Container
. Musíte také poskytnout odkaz na kontextový objekt s parametrem -Context
.
Tento příkaz vytvoří objekt blob, pokud neexistuje, nebo zobrazí výzvu k potvrzení přepsání, pokud existuje. Pokud předáte -Force
parametr rutině, můžete soubor přepsat bez potvrzení.
Následující příklad určuje hodnotu parametru -File
pro nahrání jednoho pojmenovaného souboru. Ukazuje také použití operátoru kanálu PowerShellu a Get-ChildItem
rutiny k nahrání více souborů. Rutina Get-ChildItem
pomocí parametru -Path
určuje C:\Temp\*.png. Zahrnutí zástupného znaku hvězdičky (*
) určuje všechny soubory s příponou souboru .png . Parametr -Recurse
prohledá adresář Temp a jeho podadresáře.
#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
Výsledek zobrazí název účtu úložiště, název kontejneru úložiště a zobrazí seznam nahraných souborů.
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
Výpis objektů blob
Rutina Get-AzStorageBlob
slouží k výpisu objektů blob uložených v kontejneru. K definování rozsahu hledání můžete použít různé přístupy. Pomocí parametru -Container
můžete -Name
vypsat konkrétní objekt blob v rámci známého kontejneru. Pokud chcete vygenerovat nefiltrovaný seznam všech objektů blob v určitém kontejneru, použijte -Container
parametr samostatně bez -Name
hodnoty.
Počet kontejnerů nebo objektů blob, které může mít účet úložiště, neexistuje žádné omezení. Pokud se chcete vyhnout načítání tisíců objektů blob, je vhodné omezit množství vrácených dat. Při načítání více objektů blob můžete pomocí parametru -Prefix
určit objekty blob, jejichž názvy začínají konkrétním řetězcem. Parametr se zástupným znakem můžete použít -Name
také k zadání názvů nebo typů souborů.
Parametr -MaxCount
lze použít k omezení počtu nefiltrovaných objektů blob vrácených z kontejneru. Pro všechny prostředky Azure se ukládá limit služby 5 000. Tento limit zajišťuje, že se načtou spravovatelné objemy dat a nebude mít vliv na výkon. Pokud počet vrácených objektů blob překročí -MaxCount
hodnotu nebo limit služby, vrátí se token pro pokračování. Tento token umožňuje použít více požadavků k načtení libovolného počtu objektů blob. Další informace jsou k dispozici pro výčet prostředků objektů blob.
Následující příklad ukazuje několik přístupů používaných k poskytnutí seznamu objektů blob. První přístup vypíše jeden objekt blob v rámci konkrétního prostředku kontejneru. Druhý přístup používá zástupný znak k výpisu všech .jpg
souborů s předponou Louis. Hledání je omezeno na pět kontejnerů pomocí parametru -MaxCount
. Třetí přístup používá -MaxCount
a -ContinuationToken
parametry k omezení načítání všech objektů blob v rámci kontejneru.
#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."
První dva přístupy zobrazují názvy účtů úložiště a kontejnerů a seznam načtených objektů blob. Třetí přístup zobrazuje celkový počet objektů blob v pojmenovaném kontejneru. Objekty blob se načítají v dávkách a stavový řádek zobrazuje průběh během počtu.
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.
Stažení objektu blob
V závislosti na vašem případu použití můžete rutinu Get-AzStorageBlobContent
použít ke stažení jednoho nebo více objektů blob. Stejně jako u většiny operací vyžadují oba přístupy kontextový objekt.
Pokud chcete stáhnout jeden pojmenovaný objekt blob, můžete rutinu volat přímo a zadat hodnoty pro parametry-Blob
.-Container
Objekt blob se ve výchozím nastavení stáhne do funkčního adresáře PowerShellu, ale můžete zadat alternativní umístění. Chcete-li změnit cílové umístění, musí být předána platná existující cesta s parametrem -Destination
. Protože operace nemůže vytvořit cíl, selže s chybou, pokud zadaná cesta neexistuje.
Více objektů blob je možné stáhnout kombinací Get-AzStorageBlob
rutiny a operátoru kanálu PowerShellu. Nejprve pomocí rutiny Get-AzStorageBlob
vytvořte seznam objektů blob. Dále pomocí operátoru kanálu a Get-AzStorageBlobContent
rutiny načtěte objekty blob z kontejneru.
Následující ukázkový kód poskytuje příklad přístupu ke stažení s jedním i několika způsoby stažení. Nabízí také zjednodušený přístup k vyhledávání všech kontejnerů pro konkrétní soubory pomocí zástupných znaků. Vzhledem k tomu, že některá prostředí můžou mít stovky tisíc prostředků, doporučuje se použít -MaxCount
parametr.
#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
Výsledek zobrazí název účtu úložiště a kontejneru a zobrazí seznam stažených souborů.
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
Správa vlastností a metadat objektů blob
Kontejner zveřejňuje systémové vlastnosti i uživatelsky definovaná metadata. Pro každý prostředek blob Storage existují systémové vlastnosti. Některé vlastnosti jsou jen pro čtení, zatímco jiné můžou být jen pro čtení nebo nastavení. Pod popisky se některé systémové vlastnosti mapují na určité standardní hlavičky HTTP.
Uživatelsky definovaná metadata se skládají z jednoho nebo více dvojic název-hodnota, které zadáte pro prostředek blob Storage. K uložení těchto hodnot s prostředkem můžete použít metadata. Hodnoty metadat jsou určené jenom pro vaše vlastní účely a nemají vliv na chování prostředku.
Čtení vlastností objektu blob
Pokud chcete číst vlastnosti objektu blob nebo metadata, musíte nejprve načíst objekt blob ze služby. Pomocí rutiny Get-AzStorageBlob
můžete načíst vlastnosti a metadata objektu blob, ale ne jeho obsah. Dále pomocí BlobClient.GetProperties
metody načtěte vlastnosti objektu blob. Vlastnosti nebo metadata je pak možné podle potřeby přečíst nebo nastavit.
Následující příklad načte objekt blob a vypíše jeho vlastnosti.
$blob = Get-AzStorageBlob -Blob "blue-moon.mp3" -Container "mycontainer" -Context $ctx
$properties = $blob.BlobClient.GetProperties()
Echo $properties.Value
Výsledek zobrazí seznam vlastností objektu blob, jak je znázorněno v následujícím příkladu.
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
Čtení a zápis metadat objektů blob
Metadata objektů blob jsou volitelná sada dvojic názvů a hodnot přidružených k objektu blob. Jak je znázorněno v předchozím příkladu, nejsou k objektu blob zpočátku přidružena žádná metadata, i když je možné ho přidat v případě potřeby. K aktualizaci metadat objektů blob použijte metodu BlobClient.UpdateMetadata
. Tato metoda přijímá pouze páry klíč-hodnota uložené v obecném IDictionary
objektu. Další informace najdete v definici třídy BlobClient .
Následující příklad nejprve aktualizuje a pak potvrdí metadata objektu blob a pak ho načte. Ukázkový objekt blob se vyprázdní z paměti, aby se zajistilo, že se metadata nečtou z objektu v paměti.
#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
Výsledek vrátí nově aktualizovaná metadata objektu blob, jak je znázorněno v následujícím příkladu.
Key Value
--- -----
YearWritten 1934
YearRecorded 1958
Composer Richard Rogers
Lyricist Lorenz Hart
Artist Tony Bennett
Operace kopírování pro objekty blob
Existuje mnoho scénářů, ve kterých se můžou kopírovat objekty blob různých typů. Příklady v tomto článku jsou omezené na objekty blob bloku.
Zkopírování zdrojového objektu blob do cílového objektu blob
Pro zjednodušenou operaci kopírování ve stejném účtu úložiště použijte rutinu Copy-AzStorageBlob
. Protože operace kopíruje objekt blob ve stejném účtu úložiště, jedná se o synchronní operaci. Operace mezi účty jsou asynchronní.
Měli byste zvážit použití nástroje AzCopy pro usnadnění a výkon, zejména při kopírování objektů blob mezi účty úložiště. AzCopy je nástroj příkazového řádku, pomocí kterého můžete kopírovat objekty blob nebo soubory do nebo z účtu úložiště. Přečtěte si další informace o tom, jak začít používat AzCopy.
Následující příklad zkopíruje objekt blob bannerphoto.png z kontejneru fotografií do složky photos v archivním kontejneru. Oba kontejnery existují ve stejném účtu úložiště. Výsledek ověří úspěch operace kopírování.
$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
Parametr můžete použít -Force
k přepsání existujícího objektu blob se stejným názvem v cíli. Tato operace efektivně nahradí cílový objekt blob. Odebere také všechny nepotvrzené bloky a přepíše metadata cílového objektu blob.
Zkopírování snímku do cílového objektu blob s jiným názvem
Výsledný cílový objekt blob je zapisovatelný objekt blob, nikoli snímek.
Zdrojovým objektem blob operace kopírování může být objekt blob bloku, doplňovací objekt blob, objekt blob stránky nebo snímek. Pokud cílový objekt blob již existuje, musí mít stejný typ objektu blob jako zdrojový objekt blob. Existující cílový objekt blob se přepíše.
Cílový objekt blob nelze upravit, když probíhá operace kopírování. Cílový objekt blob může mít pouze jednu nevyřešenou operaci kopírování. Jinými slovy, objekt blob nemůže být cílem několika čekajících operací kopírování.
Když zkopírujete objekt blob ve stejném účtu úložiště, jedná se o synchronní operaci. Operace kopírování mezi účty jsou asynchronní.
Celý zdrojový objekt blob nebo soubor se vždy zkopíruje. Kopírování rozsahu bajtů nebo sady bloků se nepodporuje.
Při kopírování objektu blob se jeho systémové vlastnosti zkopírují do cílového objektu blob se stejnými hodnotami.
Ukazuje také, jak přerušit asynchronní operaci kopírování.
Objekty blob snímků
Snímek je verze objektu blob jen pro čtení, která se pořizuje v určitém okamžiku. Snímek objektu blob je shodný s jeho základním objektem blob s tím rozdílem, že hodnota DateTime se připojí k identifikátoru URI. Tato hodnota označuje čas pořízení snímku a nabízí jediný rozdíl mezi základním objektem blob a snímkem.
Všechna zapůjčení přidružená k základnímu objektu blob nemají vliv na snímek. Zapůjčení snímku není možné získat. Přečtěte si další informace o snímcích objektů blob.
Následující ukázkový kód načte objekt blob z kontejneru úložiště a vytvoří jeho snímek.
$blob = Get-AzStorageBlob -Container "manuscripts" -Blob "novels/fast-cars.docx" -Context $ctx
$blob.BlobClient.CreateSnapshot()
Nastavení úrovně objektu blob
Když změníte úroveň objektu blob, přesunete objekt blob a všechna její data do cílové úrovně. Pokud chcete provést změnu, načtěte objekt blob pomocí Get-AzStorageBlob
rutiny a zavolejte metodu BlobClient.SetAccessTier
. Tento přístup se dá použít ke změně úrovně mezi horkou, studenou a archivní úrovní.
Změna vrstev ze studené nebo horké na archivní probíhá téměř okamžitě. Po přesunutí objektu blob do archivní úrovně se považuje za offline a nedá se číst ani upravovat. Než budete moct číst nebo upravovat data archivovaného objektu blob, musíte je dosadit do online vrstvy. Přečtěte si další informace o dosazování objektů blob z archivní úrovně.
Následující ukázkový kód nastaví úroveň na horkou pro všechny objekty blob v kontejneru archive
.
$blobs = Get-AzStorageBlob -Container archive -Context $ctx
Foreach($blob in $blobs) {
$blob.BlobClient.SetAccessTier("Hot")
}
Operace s využitím značek objektů blob
Značky indexu objektů blob usnadňují správu a zjišťování dat. Značky indexu objektů blob jsou uživatelsky definované atributy indexu klíč-hodnota, které můžete použít u objektů blob. Po nakonfigurování můžete kategorizovat a vyhledávat objekty v rámci jednotlivého kontejneru nebo napříč všemi kontejnery. Prostředky objektů blob je možné dynamicky kategorizovat aktualizací jejich indexových značek bez nutnosti změny v organizaci kontejneru. Značky indexů nabízejí flexibilní způsob, jak se vypořádat s měnícími se požadavky na data. Současně můžete používat metadata i indexové značky. Další informace o značkách indexu najdete v tématu Správa a vyhledání dat objektů blob v Azure pomocí značek indexu objektů blob.
Následující příklad ukazuje, jak přidat značky indexu objektů blob do řady objektů blob. Příklad čte data ze souboru XML a používá je k vytvoření indexových značek na několika objektech blob. Pokud chcete použít ukázkový kód, vytvořte v adresáři C:\temp místní soubor blob-list.xml. Data XML jsou uvedena v následujícím příkladu.
<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>
Ukázkový kód vytvoří tabulku hash a přiřadí jí $tags proměnnou. Dále pomocí rutin Get-Content
a Get-Data
rutin vytvoří objekt založený na struktuře XML. Potom do tabulky hash přidá páry klíč-hodnota, které se použijí jako hodnoty značek. Nakonec iteruje objekt XML a vytvoří značky pro každý File
uzel.
#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
}
Odstraňovat objekty blob
Pomocí rutiny Remove-AzStorageBlob
můžete odstranit jeden objekt blob nebo řadu objektů blob. Při odstraňování více objektů blob můžete využít podmíněné operace, smyčky nebo kanál PowerShellu, jak je znázorněno v následujících příkladech.
Upozorňující
Spuštění následujících příkladů může trvale odstranit objekty blob. Microsoft doporučuje povolit obnovitelné odstranění kontejneru, aby chránil kontejnery a objekty blob před náhodným odstraněním. Další informace najdete v tématu Obnovitelné odstranění kontejnerů.
#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
V některých případech je možné načíst odstraněné objekty blob. Pokud je povolená možnost obnovitelného odstranění dat vašeho účtu úložiště, -IncludeDeleted
vrátí parametr odstraněné objekty blob v přidružené době uchovávání. Další informace o obnovitelném odstranění najdete v článku o obnovitelném odstranění objektů blob .
Pomocí následujícího příkladu načtěte seznam objektů blob odstraněných v rámci přidružené doby uchovávání dat kontejneru. Výsledek zobrazí seznam naposledy odstraněných objektů blob.
#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
Obnovení odstraněného objektu blob
Jak je uvedeno v části Seznam objektů blob , můžete u svého účtu úložiště nakonfigurovat možnost ochrany dat obnovitelného odstranění. Pokud je tato možnost povolená, je možné obnovit objekty blob odstraněné během přidružené doby uchovávání informací. Správu verzí můžete také použít k údržbě předchozích verzí objektů blob pro každé obnovení a obnovení.
Pokud jsou povolené správa verzí objektů blob i obnovitelné odstranění objektů blob, pak změny, přepsání, odstranění nebo obnovení objektu blob automaticky vytvoří novou verzi. Metoda, kterou použijete k obnovení odstraněného objektu blob, závisí na tom, jestli je ve vašem účtu úložiště povolená správa verzí.
Následující ukázka kódu obnoví všechny obnovitelně odstraněné objekty blob nebo pokud je povolená správa verzí, obnoví nejnovější verzi objektu blob. Nejprve určuje, jestli je v rutině Get-AzStorageBlobServiceProperty
povolená správa verzí.
Pokud je povolená správa verzí, Get-AzStorageBlob
rutina načte seznam všech jednoznačně pojmenovaných verzí objektů blob. V dalším kroku se verze objektů blob v seznamu načtou a seřadí podle data. Pokud nejsou nalezeny žádné verze s hodnotou atributu LatestVersion
, rutina Copy-AzBlob
se použije k vytvoření aktivní kopie nejnovější verze.
Pokud je správa verzí zakázaná, BlobBaseClient.Undelete
metoda se použije k obnovení každého obnovitelně odstraněného objektu blob v kontejneru.
Než budete moct postupovat podle tohoto příkladu, musíte u alespoň jednoho z vašich účtů úložiště povolit obnovitelné odstranění nebo správu verzí.
Důležité
Následující příklad vytvoří výčet skupiny objektů blob a před zpracováním je uloží do paměti. Pokud je povolená správa verzí, objekty blob se také seřadí. Použití parametru -ContinuationToken
s $maxCount
proměnnou omezuje počet objektů blob ve skupině, aby se ušetřily prostředky. Pokud kontejner obsahuje miliony objektů blob, bude to extrémně nákladné. Hodnotu $maxCount
proměnné ale můžete upravit, i když kontejner obsahuje miliony objektů blob, skript bude objekty blob zpracovávat pomalu.
Další informace o možnosti obnovitelného odstranění dat najdete v článku obnovitelného odstranění objektů blob .
$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."
}