Sdílet prostřednictvím


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

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."
}

Další kroky