Blok-blobs beheren met PowerShell
Blob-opslag ondersteunt blok-blobs, toevoeg-blobs en pagina-blobs. Blok-blobs zijn geoptimaliseerd voor het efficiënt uploaden van grote hoeveelheden gegevens. Blok-blobs zijn ideaal voor het opslaan van afbeeldingen, documenten en andere typen gegevens die niet worden onderworpen aan willekeurige lees- en schrijfbewerkingen. In dit artikel wordt uitgelegd hoe u met blok-blobs kunt werken.
Vereisten
Een Azure-abonnement. Zie Gratis proefversie van Azure ophalen.
Azure PowerShell-module, de aanbevolen PowerShell-module
Az
voor interactie met Azure. Raadpleeg Azure PowerShell installeren om aan de slag te gaan met de Az PowerShell-module.
Een contextobject configureren voor het inkapselen van referenties
Elke aanvraag bij Azure Storage moet worden geautoriseerd. U kunt een aanvraag van PowerShell autoriseren met uw Microsoft Entra-account of met behulp van de toegangssleutels voor het account. In de voorbeelden in dit artikel wordt Microsoft Entra-autorisatie gebruikt met contextobjecten. Contextobjecten kapselen uw Microsoft Entra-referenties in en geven deze door tijdens volgende gegevensbewerkingen.
Als u zich wilt aanmelden bij uw Azure-account met een Microsoft Entra-account, opent u PowerShell en roept u de cmdlet Verbinding maken-AzAccount aan.
#Connect to your Azure subscription
Connect-AzAccount
Nadat de verbinding tot stand is gebracht, maakt u de Azure-context. Bij verificatie met Microsoft Entra-id wordt automatisch een Azure-context voor uw standaardabonnement gemaakt. In sommige gevallen moet u na verificatie mogelijk toegang krijgen tot resources in een ander abonnement. U kunt het abonnement dat is gekoppeld aan uw huidige Azure-sessie wijzigen door de context van de actieve sessie te wijzigen.
Als u uw standaardabonnement wilt gebruiken, maakt u de context door de New-AzStorageContext
cmdlet aan te roepen. Neem de -UseConnectedAccount
parameter op zodat gegevensbewerkingen worden uitgevoerd met behulp van uw Microsoft Entra-referenties.
#Create a context object using Azure AD credentials
$ctx = New-AzStorageContext -StorageAccountName <storage account name> -UseConnectedAccount
Als u abonnementen wilt wijzigen, haalt u het contextobject op met de Cmdlet Get-AzSubscription en wijzigt u vervolgens de huidige context met de Set-AzContext. Zie Het actieve abonnement wijzigen voor meer informatie.
Een container maken
Alle blobgegevens worden opgeslagen in containers, dus u hebt ten minste één containerresource nodig voordat u gegevens kunt uploaden. Gebruik zo nodig het volgende voorbeeld om een opslagcontainer te maken. Zie Blobcontainers beheren met Behulp van PowerShell voor meer informatie.
#Create a container object
$container = New-AzStorageContainer -Name "mycontainer" -Context $ctx
Wanneer u de volgende voorbeelden gebruikt, moet u de tijdelijke aanduidingen tussen haakjes vervangen door uw eigen waarden. Zie Aanmelden met Azure PowerShell voor meer informatie over aanmelden bij Azure met PowerShell.
Blob uploaden
Als u een bestand wilt uploaden naar een blok-blob, geeft u de vereiste parameterwaarden door aan de Set-AzStorageBlobContent
cmdlet. Geef het pad en de bestandsnaam op met de -File
parameter en de naam van de container met de -Container
parameter. U moet ook een verwijzing naar het contextobject opgeven met de -Context
parameter.
Met deze opdracht wordt de blob gemaakt als deze niet bestaat of wordt u gevraagd om bevestiging te overschrijven als deze bestaat. U kunt het bestand zonder bevestiging overschrijven als u de -Force
parameter doorgeeft aan de cmdlet.
In het volgende voorbeeld wordt een -File
parameterwaarde opgegeven voor het uploaden van één benoemd bestand. Het toont ook het gebruik van de PowerShell-pijplijnoperator en Get-ChildItem
cmdlet voor het uploaden van meerdere bestanden. De Get-ChildItem
cmdlet gebruikt de -Path
parameter om C:\Temp\*.png op te geven. De opname van het sterretje (*
) jokerteken geeft alle bestanden met de extensie .png bestandsnaam. De -Recurse
parameter doorzoekt de map Temp en de bijbehorende submappen.
#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
In het resultaat worden de naam van het opslagaccount, de naam van de opslagcontainer en een lijst weergegeven met de bestanden die zijn geüpload.
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
Blobs vermelden
De Get-AzStorageBlob
cmdlet wordt gebruikt om blobs weer te geven die zijn opgeslagen in een container. U kunt verschillende benaderingen gebruiken om het bereik van uw zoekopdracht te definiëren. Gebruik de -Container
en -Name
parameter om een specifieke blob in een bekende container weer te geven. Als u een niet-gefilterde lijst met alle blobs in een specifieke container wilt genereren, gebruikt u alleen de -Container
parameter, zonder een -Name
waarde.
Er is geen beperking voor het aantal containers of blobs dat een opslagaccount kan hebben. Om te voorkomen dat duizenden blobs worden opgehaald, is het een goed idee om de hoeveelheid geretourneerde gegevens te beperken. Bij het ophalen van meerdere blobs kunt u de -Prefix
parameter gebruiken om blobs op te geven waarvan de namen beginnen met een specifieke tekenreeks. U kunt ook de -Name
parameter met een jokerteken gebruiken om bestandsnamen of -typen op te geven.
De -MaxCount
parameter kan worden gebruikt om het aantal niet-gefilterde blobs te beperken dat wordt geretourneerd vanuit een container. Er wordt een servicelimiet van 5000 opgelegd voor alle Azure-resources. Deze limiet zorgt ervoor dat beheerbare hoeveelheden gegevens worden opgehaald en dat de prestaties niet worden beïnvloed. Als het aantal geretourneerde blobs de -MaxCount
waarde of de servicelimiet overschrijdt, wordt een vervolgtoken geretourneerd. Met dit token kunt u meerdere aanvragen gebruiken om een willekeurig aantal blobs op te halen. Meer informatie is beschikbaar over het inventariseren van blobresources.
In het volgende voorbeeld ziet u verschillende methoden die worden gebruikt om een lijst met blobs te bieden. De eerste benadering bevat één blob binnen een specifieke containerresource. De tweede benadering gebruikt een jokerteken om alle .jpg
bestanden met een voorvoegsel van Louis weer te geven. De zoekopdracht is beperkt tot vijf containers met behulp van de -MaxCount
parameter. De derde benadering gebruikt -MaxCount
en -ContinuationToken
parameters om het ophalen van alle blobs in een container te beperken.
#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."
De eerste twee benaderingen geven de namen van het opslagaccount en de container weer en een lijst met de opgehaalde blobs. In de derde benadering wordt het totale aantal blobs in een benoemde container weergegeven. De blobs worden opgehaald in batches en op een statusbalk wordt de voortgang tijdens het aantal weergegeven.
AccountName: demostorageaccount, ContainerName: named-container
Name BlobType Length ContentType LastModified AccessTier IsDeleted
---- -------- ------ ----------- ------------ ---------- ---------
index.txt BlockBlob 222 text/plain 2021-12-15 22:00:10Z Cool False
miles-davis.txt BlockBlob 23454 text/plain 2021-12-15 22:17:59Z Cool False
cab-calloway.txt BlockBlob 18419 text/plain 2021-12-15 22:17:59Z Cool False
benny-goodman.txt BlockBlob 17726 text/plain 2021-12-15 22:17:59Z Cool False
AccountName: demostorageaccount, ContainerName: demo-container
Name BlobType Length ContentType LastModified AccessTier IsDeleted
---- -------- ------ ----------- ------------ ---------- ---------
louis-armstrong.jpg BlockBlob 211482 image/jpeg 2021-12-14 01:38:03Z Cool False
louis-jordan.jpg BlockBlob 55766 image/jpeg 2021-12-14 01:38:03Z Cool False
louis-prima.jpg BlockBlob 290651 image/jpeg 2021-12-14 01:38:03Z Cool False
AccountName: demostorageaccount, ContainerName: demo-container
Processed 5257 blobs in demo-container.
Blob downloaden
Afhankelijk van uw use-case kan de Get-AzStorageBlobContent
cmdlet worden gebruikt om één of meerdere blobs te downloaden. Net als bij de meeste bewerkingen hebben beide benaderingen een contextobject nodig.
Als u één benoemde blob wilt downloaden, kunt u de cmdlet rechtstreeks aanroepen en waarden opgeven voor de -Blob
en -Container
parameters. De blob wordt standaard gedownload naar de werkende PowerShell-map, maar er kan een alternatieve locatie worden opgegeven. Als u de doellocatie wilt wijzigen, moet een geldig, bestaand pad worden doorgegeven met de -Destination
parameter. Omdat de bewerking geen bestemming kan maken, mislukt deze met een fout als uw opgegeven pad niet bestaat.
U kunt meerdere blobs downloaden door de Get-AzStorageBlob
cmdlet en de PowerShell-pijplijnoperator te combineren. Maak eerst een lijst met blobs met de Get-AzStorageBlob
cmdlet. Gebruik vervolgens de pijplijnoperator en de Get-AzStorageBlobContent
cmdlet om de blobs op te halen uit de container.
De volgende voorbeeldcode biedt een voorbeeld van een enkele en meerdere downloadmethoden. Het biedt ook een vereenvoudigde benadering voor het doorzoeken van alle containers naar specifieke bestanden met behulp van een jokerteken. Omdat sommige omgevingen mogelijk honderdduizenden resources hebben, wordt het gebruik van de -MaxCount
parameter aanbevolen.
#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
Het resultaat geeft de namen van het opslagaccount en de container weer en bevat een lijst met de gedownloade bestanden.
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
Blob-eigenschappen en -metagegevens beheren
Een container bevat zowel systeemeigenschappen als door de gebruiker gedefinieerde metagegevens. Er bestaan systeemeigenschappen op elke Blob Storage-resource. Sommige eigenschappen zijn alleen-lezen, terwijl andere kunnen worden gelezen of ingesteld. Onder de covers zijn sommige systeemeigenschappen toegewezen aan bepaalde standaard HTTP-headers.
Door de gebruiker gedefinieerde metagegevens bestaan uit een of meer naam-waardeparen die u opgeeft voor een Blob Storage-resource. U kunt metagegevens gebruiken om deze waarden op te slaan met de resource. Metagegevenswaarden zijn alleen bedoeld voor uw eigen doeleinden en hebben geen invloed op het gedrag van de resource.
Blob-eigenschappen lezen
Als u blobeigenschappen of metagegevens wilt lezen, moet u eerst de blob ophalen uit de service. Gebruik de Get-AzStorageBlob
cmdlet om de eigenschappen en metagegevens van een blob op te halen, maar niet de inhoud ervan. Gebruik vervolgens de methode om de BlobClient.GetProperties
eigenschappen van de blob op te halen. De eigenschappen of metagegevens kunnen vervolgens indien nodig worden gelezen of ingesteld.
In het volgende voorbeeld wordt een blob opgehaald en worden de eigenschappen ervan vermeld.
$blob = Get-AzStorageBlob -Blob "blue-moon.mp3" -Container "mycontainer" -Context $ctx
$properties = $blob.BlobClient.GetProperties()
Echo $properties.Value
In het resultaat wordt een lijst met de eigenschappen van de blob weergegeven, zoals wordt weergegeven in het volgende voorbeeld.
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
Blobmetagegevens lezen en schrijven
Blobmetagegevens is een optionele set naam-/waardeparen die zijn gekoppeld aan een blob. Zoals in het vorige voorbeeld wordt weergegeven, zijn er in eerste instantie geen metagegevens gekoppeld aan een blob, maar deze kunnen indien nodig worden toegevoegd. Gebruik de methode om blobmetagegevens bij te BlobClient.UpdateMetadata
werken. Deze methode accepteert alleen sleutel-waardeparen die zijn opgeslagen in een algemeen IDictionary
object. Zie de blobClient-klassedefinitie voor meer informatie.
In het onderstaande voorbeeld worden eerst de metagegevens van een blob bijgewerkt en vervolgens opgehaald. De voorbeeld-blob wordt uit het geheugen leeggemaakt om ervoor te zorgen dat de metagegevens niet worden gelezen uit het in-memory object.
#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
Het resultaat retourneert de zojuist bijgewerkte metagegevens van de blob, zoals wordt weergegeven in het volgende voorbeeld.
Key Value
--- -----
YearWritten 1934
YearRecorded 1958
Composer Richard Rogers
Lyricist Lorenz Hart
Artist Tony Bennett
Kopieerbewerkingen voor blobs
Er zijn veel scenario's waarin blobs van verschillende typen kunnen worden gekopieerd. Voorbeelden in dit artikel zijn beperkt tot blok-blobs.
Een bron-blob kopiëren naar een doel-blob
Gebruik de Copy-AzStorageBlob
cmdlet voor een vereenvoudigde kopieerbewerking binnen hetzelfde opslagaccount. Omdat de bewerking een blob kopieert binnen hetzelfde opslagaccount, is dit een synchrone bewerking. Bewerkingen tussen accounts zijn asynchroon.
Overweeg het gebruik van AzCopy voor gemak en prestaties, met name bij het kopiëren van blobs tussen opslagaccounts. AzCopy is een opdrachtregelprogramma dat u kunt gebruiken om blobs of bestanden te kopiëren vanuit of naar een opslagaccount. Meer informatie over hoe u aan de slag gaat met AzCopy.
In het onderstaande voorbeeld wordt de bannerphoto.png-blob gekopieerd van de container foto's naar de map foto's in de archiefcontainer . Beide containers bevinden zich in hetzelfde opslagaccount. Het resultaat controleert het succes van de kopieerbewerking.
$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
U kunt de -Force
parameter gebruiken om een bestaande blob met dezelfde naam op de bestemming te overschrijven. Met deze bewerking wordt de doel-blob effectief vervangen. Ook worden eventuele niet-doorgevoerde blokken verwijderd en worden de metagegevens van de doel-blob overschreven.
Een momentopname kopiëren naar een doel-blob met een andere naam
De resulterende doel-blob is een beschrijfbare blob en geen momentopname.
De bron-blob voor een kopieerbewerking kan een blok-blob, een toevoeg-blob, een pagina-blob of een momentopname zijn. Als de doel-blob al bestaat, moet deze van hetzelfde blobtype zijn als de bron-blob. Een bestaande doel-blob wordt overschreven.
De doel-blob kan niet worden gewijzigd terwijl er een kopieerbewerking wordt uitgevoerd. Een doel-blob kan slechts één uitstekende kopieerbewerking hebben. Met andere woorden, een blob kan niet de bestemming zijn voor meerdere in behandeling zijnde kopieerbewerkingen.
Wanneer u een blob in hetzelfde opslagaccount kopieert, is dit een synchrone bewerking. Kopieerbewerkingen voor meerdere accounts zijn asynchroon.
De volledige bron-blob of het hele bestand wordt altijd gekopieerd. Het kopiëren van een bereik van bytes of een set blokken wordt niet ondersteund.
Wanneer een blob wordt gekopieerd, worden de systeemeigenschappen gekopieerd naar de doel-blob met dezelfde waarden.
Ook ziet u hoe u een asynchrone kopieerbewerking kunt afbreken.
Momentopname-blobs
Een momentopname is een alleen-lezen versie van een blob die op een bepaald moment wordt gemaakt. Een blobmomentopname is identiek aan de basis-blob, behalve dat een Datum/tijd-waarde wordt toegevoegd aan de URI. Deze waarde geeft het tijdstip aan waarop de momentopname is gemaakt en biedt het enige onderscheid tussen de basis-blob en de momentopname.
Leases die zijn gekoppeld aan de basis-blob, hebben geen invloed op de momentopname. U kunt geen lease verkrijgen voor een momentopname. Lees meer over Blob-momentopnamen.
Met de volgende voorbeeldcode wordt een blob opgehaald uit een opslagcontainer en wordt er een momentopname van gemaakt.
$blob = Get-AzStorageBlob -Container "manuscripts" -Blob "novels/fast-cars.docx" -Context $ctx
$blob.BlobClient.CreateSnapshot()
Bloblaag instellen
Wanneer u de laag van een blob wijzigt, verplaatst u de blob en alle bijbehorende gegevens naar de doellaag. Als u de wijziging wilt aanbrengen, haalt u een blob op met de Get-AzStorageBlob
cmdlet en roept u de methode aan BlobClient.SetAccessTier
. Deze methode kan worden gebruikt om de laag te wijzigen tussen dynamisch, statisch en archief.
Het wijzigen van lagen van statisch of dynamisch naar archief vindt vrijwel onmiddellijk plaats. Nadat een blob is verplaatst naar de archieflaag , wordt deze beschouwd als offline en kan deze niet worden gelezen of gewijzigd. Voordat u de gegevens van een gearchiveerde blob kunt lezen of wijzigen, moet u deze reactiveren naar een onlinelaag. Lees meer over rehydratatie van blobs vanuit de archieflaag.
Met de volgende voorbeeldcode wordt de laag ingesteld op dynamisch voor alle blobs in de archive
container.
$blobs = Get-AzStorageBlob -Container archive -Context $ctx
Foreach($blob in $blobs) {
$blob.BlobClient.SetAccessTier("Hot")
}
Bewerkingen met blobtags
Blob-indextags maken gegevensbeheer en detectie eenvoudiger. Blob-indextags zijn door de gebruiker gedefinieerde indexkenmerken die u op uw blobs kunt toepassen. Zodra deze is geconfigureerd, kunt u objecten in een afzonderlijke container of in alle containers categoriseren en zoeken. Blob-resources kunnen dynamisch worden gecategoriseerd door hun indextags bij te werken zonder dat er een wijziging in de containerorganisatie nodig is. Indextags bieden een flexibele manier om te voldoen aan veranderende gegevensvereisten. U kunt zowel metagegevens als indextags tegelijk gebruiken. Zie Azure Blob-gegevens beheren en zoeken met blobindextags voor meer informatie over indextags.
In het volgende voorbeeld ziet u hoe u blobindextags toevoegt aan een reeks blobs. In het voorbeeld worden gegevens uit een XML-bestand gelezen en gebruikt voor het maken van indextags op verschillende blobs. Als u de voorbeeldcode wilt gebruiken, maakt u een lokaal blob-list.xml-bestand in de map C:\temp . De XML-gegevens worden weergegeven in het volgende voorbeeld.
<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>
De voorbeeldcode maakt een hash-tabel en wijst de $tags variabele eraan toe. Vervolgens worden de Get-Content
en Get-Data
cmdlets gebruikt om een object te maken op basis van de XML-structuur. Vervolgens worden sleutel-waardeparen toegevoegd aan de hash-tabel die als tagwaarden moeten worden gebruikt. Ten slotte wordt het XML-object herhaald en worden tags voor elk File
knooppunt gemaakt.
#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
}
Blobs verwijderen
U kunt één blob of een reeks blobs verwijderen met de Remove-AzStorageBlob
cmdlet. Wanneer u meerdere blobs verwijdert, kunt u voorwaardelijke bewerkingen, lussen of de PowerShell-pijplijn gebruiken, zoals wordt weergegeven in de volgende voorbeelden.
Waarschuwing
Als u de volgende voorbeelden uitvoert, kunnen blobs definitief worden verwijderd. Microsoft raadt aan om voorlopig verwijderen van containers in te schakelen om containers en blobs te beschermen tegen onbedoelde verwijdering. Zie Voorlopig verwijderen voor containers voor meer informatie.
#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
In sommige gevallen is het mogelijk om blobs op te halen die zijn verwijderd. Als de optie voor gegevensbeveiliging voor voorlopig verwijderen van uw opslagaccount is ingeschakeld, retourneert de -IncludeDeleted
parameter blobs die zijn verwijderd binnen de bijbehorende bewaarperiode. Raadpleeg het artikel Voorlopig verwijderen voor blobs voor meer informatie over voorlopig verwijderen.
Gebruik het volgende voorbeeld om een lijst met blobs op te halen die zijn verwijderd binnen de gekoppelde bewaarperiode van de container. In het resultaat wordt een lijst met onlangs verwijderde blobs weergegeven.
#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
Een verwijderde blob herstellen
Zoals vermeld in de sectie Lijst-blobs , kunt u de optie voor gegevensbeveiliging voor voorlopig verwijderen configureren voor uw opslagaccount. Wanneer deze optie is ingeschakeld, is het mogelijk om blobs te herstellen die zijn verwijderd binnen de bijbehorende bewaarperiode. U kunt versiebeheer ook gebruiken om eerdere versies van uw blobs te onderhouden voor elk herstel en herstel.
Als versiebeheer van blobs en voorlopig verwijderen van blobs beide zijn ingeschakeld, wordt automatisch een nieuwe versie gemaakt door een blob te wijzigen, te overschrijven, te verwijderen of te herstellen. De methode die u gebruikt om een verwijderde blob te herstellen, is afhankelijk van of versiebeheer is ingeschakeld voor uw opslagaccount.
In het volgende codevoorbeeld worden alle voorlopig verwijderde blobs hersteld of, als versiebeheer is ingeschakeld, wordt de nieuwste versie van een blob hersteld. Eerst wordt bepaald of versiebeheer is ingeschakeld met de Get-AzStorageBlobServiceProperty
cmdlet.
Als versiebeheer is ingeschakeld, haalt de Get-AzStorageBlob
cmdlet een lijst op met alle unieke blobversies. Vervolgens worden de blobversies in de lijst opgehaald en gesorteerd op datum. Als er geen versies worden gevonden met de LatestVersion
kenmerkwaarde, wordt de Copy-AzBlob
cmdlet gebruikt om een actieve kopie van de nieuwste versie te maken.
Als versiebeheer is uitgeschakeld, wordt de BlobBaseClient.Undelete
methode gebruikt om elke voorlopig verwijderde blob in de container te herstellen.
Voordat u dit voorbeeld kunt volgen, moet u voorlopig verwijderen of versiebeheer inschakelen voor ten minste één van uw opslagaccounts.
Belangrijk
In het volgende voorbeeld wordt een groep blobs opgesomd en opgeslagen in het geheugen voordat ze worden verwerkt. Als versiebeheer is ingeschakeld, worden de blobs ook gesorteerd. Het gebruik van de -ContinuationToken
parameter met $maxCount
variabele beperkt het aantal blobs in de groep om resources te besparen. Als een container miljoenen blobs heeft, is dit zeer duur. U kunt de waarde van de $maxCount
variabele aanpassen, maar als een container miljoenen blobs bevat, worden de blobs langzaam verwerkt door het script.
Raadpleeg het artikel Voorlopig verwijderen voor blobs voor meer informatie over de optie voor gegevensbeveiliging voor voorlopig verwijderen.
$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."
}