Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Úložiště objektů blob podporuje blokové blob objekty, doplňovací blob objekty a stránkové blob objekty. Blokové objekty blob jsou navrženy pro efektivní nahrávání velkých objemů dat. Blokové objekty blob jsou ideální pro ukládání obrázků, dokumentů a jiných typů dat, které nejsou určeny pro náhodné operace čtení a zápisu. Tento článek vysvětluje, jak pracovat s objekty blob bloku.
Požadavky
Předplatné Azure. Viz Získání bezplatné zkušební verze Azure.
Modul
AzAzure 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.
Konfigurujte kontextový objekt 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 Connect-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 blob data jsou uložená v kontejnerech, takže před nahráním dat potřebujete alespoň jeden kontejner. 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í blobu
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 cmdletu, 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 potrubí PowerShellu a cmdletu Get-ChildItem k nahrání více souborů. Cmdlet Get-ChildItem používá parametr -Path k určení C:\Temp\*.png. Zahrnutí zástupného znaku hvězdičky (*) určuje všechny soubory s příponou názvu 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 blobů
Příkaz Get-AzStorageBlob cmdlet 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í parametrů -Container a -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.
Na 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 blobů, které jsou vráceny 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čí buď hodnotu -MaxCount nebo limit služby, vrátí se pokračovací token. Tento token vám umožňuje použít více požadavků k načtení libovolného počtu blobů. Další informace jsou k dispozici na Výčet prostředků objektů blob.
Následující příklad ukazuje několik přístupů používaných k zobrazení seznamu objektů blob. První přístup vypíše jeden datový blob v konkrétním 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 blobů. Třetí přístup zobrazuje celkový počet blobů v konkrétním kontejneru. Objekty blob se načítají v dávkách a stavový panel zobrazuje průběh během počítání.
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í blobu
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 a -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 blobů lze stáhnout pomocí kombinace příkazu Get-AzStorageBlob cmdlet a operátoru PowerShell pipeline. Nejprve pomocí rutiny Get-AzStorageBlob vytvořte seznam objektů blob. Dále pomocí operátoru pipeline a Get-AzStorageBlobContent cmdletu načtěte bloby 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 čteny nebo nastaveny. V zákulisí 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í metody BlobClient.GetProperties načtěte vlastnosti blobu. 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ý blob je vypsán z paměti, aby se zajistilo, že metadata nejsou čtena z paměťového objektu.
#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
Kopírování objektů blob
Existuje mnoho scénářů, kdy mohou být kopírovány objekty blob různých typů. Příklady v tomto článku jsou omezené na objekty blob bloku.
Zkopírujte zdrojový blob do cílového blobu
Pro zjednodušenou operaci kopírování ve stejném účtu úložiště použijte cmdlet 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 využití nástroje AzCopy pro snadnost a efektivitu, zvláště při kopírování blobů mezi účty úložiště. AzCopy je nástroj příkazového řádku, který můžete použít ke kopírování blobů nebo souborů 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 blobbannerphoto.png z kontejneru fotografií do složky photos v archivním kontejneru. Oba kontejnery existují ve stejném účtu pro ukládání. 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 -Force můžete použít k přepsání existujícího objektu blob se stejným názvem v cílovém úložišti. Tato operace efektivně nahradí cílový 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ý blob pro operaci kopírování může být blokový blob, připojovací blob, stránkový blob, 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ý datový objekt blob bude přepsán.
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 více probíhají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 bloku jen pro čtení, která byla pořízena v určitém časové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.
Nájemní smlouvy spojené se základním blobem neovlivňují snímek. Pronájem snímku nelze získat. Přečtěte si další informace o blobových snímcích.
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()
Nastavit vrstvu blobu
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 bloku blob, musíte ho převést do online vrstvy. Přečtěte si další informace o obnovení blobů z archivní úrovně.
Následující ukázkový kód nastaví úroveň na 'hot' pro všechny blob v kontejneru archive.
$blobs = Get-AzStorageBlob -Container archive -Context $ctx
Foreach($blob in $blobs) {
$blob.BlobClient.SetAccessTier("Hot")
}
Operace se značkami blobů
Značky indexu objektů blob usnadňují správu a zjišťování dat. Značky indexu blobů jsou uživatelsky definované atributy indexu klíč-hodnota, které můžete použít u svých 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 dokumentu Správa a vyhledání dat objektů blob v Azure pomocí značek indexu.
Následující příklad ukazuje, jak přidat označení indexu blob do řady 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í blob-list.xml soubor. 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 použije rutiny Get-Content a Get-Data k vytvoření objektu založeného na struktuře XML. Potom do tabulky hash přidá páry klíč-hodnota, které se použijí jako hodnoty značek. Nakonec prochází objekt XML a vytvoří značky pro každý uzel File.
#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 PowerShell pipeline, jak je znázorněno v následujících příkladech.
Výstraha
Spuštění následujících příkladů může trvale smazat datové objekty. Microsoft doporučuje povolit soft delete pro kontejnery k ochraně kontejnerů a datových objektů před náhodným odstraněním. Další informace naleznete v Měkké 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é obnovit smazané datové objekty. Pokud je povolena možnost měkkého mazání dat vašeho účtu úložiště, parametr -IncludeDeleted vrátí objekty blob odstraněné během přiděleného období 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 blobů odstraněných během přidružené doby uchování kontejneru. Výsledek zobrazí seznam naposledy odstraněných objektů typu 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 blobu
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í.
Pokud je povolené verzování blobů a měkké mazání blobů, pak při změně, přepsání, odstranění nebo obnovení objektu blob se automaticky vytvoří nová verze. 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 softwarově smazané bloby nebo, pokud je povoleno verzování, obnoví nejnovější verzi blobu. Nejprve zjistí, zda je v cmdletu Get-AzStorageBlobServiceProperty povolené verzování.
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á, použije se metoda BlobBaseClient.Undelete k obnovení každého měkce odstraněného blobu 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 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."
}