Sdílet prostřednictvím


Správa objektů blob bloku pomocí PowerShellu

Ú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

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

Další kroky