Gérer des objets blob de blocs avec PowerShell
Stockage Blob prend en charge les objets blob de blocs, d’ajout et de pages. Les objets blob de blocs sont optimisés pour charger efficacement de grandes quantités de données. Les objets blob de blocs sont parfaits pour stocker des images, des documents et d’autres types de données qui ne sont pas soumis à des opérations de lecture et d’écriture aléatoires. Cet article explique comment travailler avec des objets blob de blocs.
Prérequis
Un abonnement Azure. Consultez la page Obtention d’un essai gratuit d’Azure.
Le module Azure PowerShell
Az
est recommandé pour interagir avec Azure. Pour démarrer avec le module Az PowerShell, consulter Installer Azure PowerShell.
Configurer un objet de contexte pour encapsuler les informations d’identification
Chaque demande adressée au Stockage Azure doit être autorisée. Vous pouvez autoriser une requête effectuée depuis PowerShell avec votre compte Microsoft Entra ou en utilisant les clés d'accès au compte. Les exemples de cet article utilisent l’autorisation Microsoft Entra avec des objets contextuels. Les objets contextuels encapsulent vos informations d'identification Microsoft Entra et les transmettent lors des opérations de données ultérieures.
Pour vous connecter à votre compte Azure avec un compte Microsoft Entra, ouvrez PowerShell et appelez la cmdlet Connect-AzAccount.
#Connect to your Azure subscription
Connect-AzAccount
Une fois la connexion établie, créez le contexte Azure. L'authentification avec Microsoft Entra ID crée automatiquement un contexte Azure pour votre abonnement par défaut. Dans certains cas, vous devrez peut-être accéder à des ressources dans un autre abonnement après l’authentification. Vous pouvez changer l’abonnement associé à votre session Azure actuelle en modifiant le contexte de session active.
Pour utiliser votre abonnement par défaut, créez le contexte en appelant la cmdlet New-AzStorageContext
. Incluez le paramètre -UseConnectedAccount
afin que les opérations sur les données soient effectuées à l'aide de vos informations d'identification Microsoft Entra.
#Create a context object using Azure AD credentials
$ctx = New-AzStorageContext -StorageAccountName <storage account name> -UseConnectedAccount
Pour modifier les abonnements, récupérez l’objet de contexte à l’aide de la cmdlet Get-AzSubscription, puis modifiez le contexte actuel avec set-AzContext. Consultez Modifier l’abonnement actif pour plus d’informations.
Créez un conteneur.
Toutes les données blob sont stockées dans des conteneurs. Vous avez donc besoin d’au moins une ressource de conteneur avant de pouvoir charger des données. Si nécessaire, utilisez l’exemple suivant pour créer un conteneur de stockage. Pour plus d’informations, consultez Gestion des conteneurs de blobs à l’aide de PowerShell.
#Create a container object
$container = New-AzStorageContainer -Name "mycontainer" -Context $ctx
Si vous utilisez les exemples suivants, vous devez remplacer les valeurs d’espace réservé entre crochets par vos propres valeurs. Pour plus d’informations sur la connexion à Azure avec PowerShell, consultez Se connecter avec Azure PowerShell.
Charger un objet blob
Pour charger un fichier sur un objet blob de bloc, transmettez les valeurs de paramètres requises à la cmdlet Set-AzStorageBlobContent
. Fournissez le chemin d’accès et le nom du fichier avec le paramètre-File
et le nom du conteneur avec le paramètre -Container
. Vous devez également fournir une référence à l’objet de contexte à l’aide du paramètre -Context
.
Cette commande crée le blob s’il n’existe pas ou vous invite à remplacer la confirmation si elle existe. Vous pouvez remplacer le fichier sans confirmation si vous transmettez le paramètre -Force
à la cmdlet.
L’exemple suivant spécifie une valeur de paramètre -File
pour le téléchargement d’un fichier nommé unique. Elle illustre également l’utilisation de l’opérateur de pipeline PowerShell et de la cmdlet Get-ChildItem
pour charger plusieurs fichiers. La cmdlet Get-ChildItem
utilise le paramètre -Path
pour spécifier C:\Temp\*.png. L’inclusion du caractère générique astérisque (*
) spécifie tous les fichiers avec l’extension de nom de fichier .png. Le paramètre -Recurse
recherche dans le répertoire Temp et ses sous-répertoires.
#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
Le résultat affiche le nom du compte de stockage, le nom du conteneur de stockage et fournit une liste des fichiers chargés.
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
Liste des objets blob
La cmdlet Get-AzStorageBlob
sert à répertorier les blobs stockés dans un conteneur. Vous pouvez utiliser différentes approches pour définir l’étendue de votre recherche. Utilisez le paramètre -Container
et -Name
pour répertorier un blob spécifique au sein d’un conteneur connu. Pour générer une liste non filtrée de tous les blobs au sein d’un conteneur spécifique, utilisez le paramètre -Container
seul, sans valeur -Name
.
Il n’existe aucune restriction au nombre de conteneurs ou blobs qu’un compte de stockage peut avoir. Pour éviter éventuellement de récupérer des milliers de blobs, il est important de limiter la quantité de données renvoyées. Lorsque vous récupérez plusieurs blobs, vous pouvez utiliser le paramètre -Prefix
pour spécifier des blobs dont les noms commencent par une chaîne spécifique. Vous pouvez également utiliser le paramètre -Name
avec un caractère générique pour spécifier des noms ou des types de fichiers.
Le paramètre -MaxCount
peut être utilisé pour limiter le nombre de blobs non filtrés renvoyés à partir d’un conteneur. Une limite de service de 5 000 est imposée à toutes les ressources Azure. Cette limite garantit que des quantités gérables de données sont récupérées et que le niveau de performance n’est pas impacté. Si le nombre de blobs renvoyés dépasse la valeur -MaxCount
ou la limite de service, un jeton de continuation est renvoyé. Ce jeton vous permet d’utiliser plusieurs demandes pour récupérer n’importe quel membre de blobs. Des informations supplémentaires sont disponibles Énumération des ressources blob.
L’exemple suivant illustre plusieurs approches utilisées pour fournir une liste des blobs. La première approche répertorie un seul blob au sein d’une ressource de conteneur spécifique. La deuxième approche utilise un caractère générique pour lister tous les fichiers .jpg
comportant le préfixe louis. La recherche est limitée à cinq conteneurs à l’aide du paramètre -MaxCount
. La troisième approche utilise des paramètres -MaxCount
et -ContinuationToken
pour limiter la récupération de tous les blobs au sein d’un conteneur.
#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."
Les deux premières approches affichent les noms du compte de stockage et du conteneur, ainsi qu’une liste des blobs récupérés. La troisième approche affiche le nombre total de blobs dans un conteneur nommé. Les blobs sont récupérés par lots et une barre d’état affiche la progression au cours du nombre.
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.
Télécharger un objet blob
Selon votre cas d’utilisation, la cmdlet Get-AzStorageBlobContent
peut être utilisée pour télécharger un ou plusieurs blobs. Comme pour la plupart des opérations, les deux approches nécessitent un objet de contexte.
Pour télécharger un seul blob nommé, vous pouvez appeler directement la cmdlet et fournir les valeurs des paramètres -Blob
et -Container
. Le blob est téléchargé dans le répertoire PowerShell par défaut en cours de fonctionnement, mais un autre emplacement peut être spécifié. Pour modifier l’emplacement cible, un chemin d’accès valide existant doit être transmis avec le paramètre -Destination
. Étant donné que l’opération ne peut pas créer de destination, elle échouera avec une erreur si le chemin d’accès spécifié n’existe pas.
Vous pouvez télécharger plusieurs blobs en combinant la cmdlet Get-AzStorageBlob
et l’opérateur de pipeline PowerShell. Tout d’abord, créez une liste de blobs avec la cmdlet Get-AzStorageBlob
. Utilisez ensuite l’opérateur de pipeline et la cmdlet Get-AzStorageBlobContent
pour extraire les blobs du conteneur.
L’exemple de code suivant fournit un exemple d’approches de téléchargement unique et de téléchargement multiple. Il offre également une approche simplifiée de la recherche de fichiers spécifiques dans tous les conteneurs à l’aide d’un caractère générique. Étant donné que certains environnements peuvent avoir des centaines de milliers de ressources, l’utilisation du paramètre -MaxCount
est recommandée.
#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
Le résultat affiche le nom du compte de stockage et du conteneur et fournit la liste des fichiers téléchargés.
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
Gérer des propriétés et des métadonnées de blobs
Un conteneur expose à la fois les propriétés système et les métadonnées définies par l’utilisateur. Des propriétés système existent sur chaque ressource de Stockage Blob. Certaines propriétés sont en lecture seule, d’autres peuvent être lues ou définies. En arrière-plan, certaines propriétés système correspondent à certains en-têtes HTTP standard.
Ces métadonnées définies par l’utilisateur se composent d’une ou plusieurs paires nom-valeur que vous spécifiez pour une ressource de Stockage Blob. Vous pouvez utiliser des métadonnées pour stocker ces valeurs supplémentaires avec la ressource. Les valeurs de métadonnées sont destinées à votre usage personnel et n’affectent pas le comportement de la ressource.
Lecture des propriétés blob
Pour lire les propriétés ou métadonnées d’un blob, vous devez d’abord récupérer le blob à partir du service. Utilisez la cmdlet Get-AzStorageBlob
pour récupérer des propriétés et métadonnées d’un blob, mais pas son contenu. Utilisez ensuite la méthode BlobClient.GetProperties
pour extraire les propriétés d’un blob. Les propriétés ou métadonnées peuvent ensuite être lues ou définies selon vos besoins.
L’exemple suivant récupère un blob et répertorie ses propriétés.
$blob = Get-AzStorageBlob -Blob "blue-moon.mp3" -Container "mycontainer" -Context $ctx
$properties = $blob.BlobClient.GetProperties()
Echo $properties.Value
Le résultat affiche la liste des propriétés d’un blob, comme illustré dans l’exemple suivant.
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
Lire et écrire des métadonnées de blob
Les métadonnées de blob sont un ensemble facultatif de paires nom-valeur associés à un blob. Comme montré dans l’exemple précédent, aucune métadonnées n’est associée initialement à un blob, même si elle peut être ajoutée si nécessaire. Pour accéder aux métadonnées de blob, vous devez utiliser la méthode BlobClient.UpdateMetadata
. Cette méthode n’accepte que les paires clé-valeur stockées dans un objet générique IDictionary
. Pour plus d’informations, consultez la définition de classe BlobClient.
L’exemple ci-dessous met à jour et valide les métadonnées d’un blob, puis les récupère. L’exemple de blob est vidé de la mémoire pour s’assurer que les métadonnées ne sont pas lues à partir de l’objet en mémoire.
#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
Le résultat renvoie les métadonnées récemment mises à jour du blob, comme illustré dans l’exemple suivant.
Key Value
--- -----
YearWritten 1934
YearRecorded 1958
Composer Richard Rogers
Lyricist Lorenz Hart
Artist Tony Bennett
Opérations de copie de blobs
Il existe de nombreux scénarios où des blobs de différents types peuvent être copiés. Les exemples décrits dans cet article sont limités aux objets blob de blocs.
Copier un blob source vers un blob de destination
Pour simplifier l’opération de copie dans le même compte de stockage, utilisez la cmdlet Copy-AzStorageBlob
. Étant donné que l’opération copie un blob dans le même compte de stockage, il s’agit d’une opération synchrone. Les opérations entre comptes sont asynchrones.
Vous devez envisager l’utilisation d’AzCopy pour la simplicité et le niveau de performance, en particulier lors de la copie de blobs entre des comptes de stockage. AzCopy est un utilitaire de ligne de commande que vous pouvez utiliser pour copier des blobs ou des fichiers vers ou depuis un compte de stockage. En savoir plus sur Démarrage avec AzCopy.
L’exemple ci-dessous copie le blob bannerphoto.png du conteneur de photos vers le dossier photos dans le conteneur archive. Les deux conteneurs existent dans le même compte de stockage. Le résultat vérifie le succès de l’opération de copie.
$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
Vous pouvez utiliser le paramètre -Force
pour remplacer un blob existant du même nom dans la destination. Cette opération remplace efficacement le blob de destination. Cette opération supprime tous les blocs non validés et remplace les métadonnées du blob de destination.
Copiez un instantané sur un blob de destination avec un nom différent
L’objet blob de destination obtenu est un objet blob modifiable et non pas un instantané.
L’objet blob source d’une opération de copie peut être un objet blob de blocs, un objet blob d’ajout, un objet blob de pages ou un instantané. Si l’objet blob de destination existe déjà, il doit être du même type d’objet blob que l’objet blob source. Tout objet blob de destination existant est remplacé.
L’objet blob de destination ne peut pas être modifié pendant une opération de copie. Un objet blob de destination ne peut avoir qu’une seule opération de copie en attente. En d’autres termes, un objet blob ne peut pas être la destination de plusieurs opérations de copie en attente.
Lorsque vous copiez un objet blob dans le même compte de stockage, il s’agit d’une opération synchrone. Les opérations de copie entre comptes sont asynchrones.
L’intégralité du fichier ou de l’objet blob source est toujours copiée. La copie d’une plage d’octets ou d’un ensemble de blocs n’est pas prise en charge.
Lorsqu’un objet blob est copié, ses propriétés système sont copiées dans l’objet blob de destination avec les mêmes valeurs.
Il montre également comment abandonner une opération de copie asynchrone.
Blobs instantanés
Un instantané est une version en lecture seule d'un objet blob capturé à un instant donné. Un instantané d’objet blob est identique à son objet blob de base, sauf qu’une valeur DateTime est ajoutée à l’URI. Cette valeur indique l’heure à laquelle l’instantané a été pris et constitue la seule distinction entre l’objet blob de base et l’instantané.
Aucun bail associé à l’objet blob de base n’a d’incidence sur l’instantané. Vous ne pouvez pas acquérir de bail pour un instantané. En savoir plus sur les Instantanés de blobs.
L’exemple de code suivant extrait un blob d’un conteneur de stockage et crée un instantané de celui-ci.
$blob = Get-AzStorageBlob -Container "manuscripts" -Blob "novels/fast-cars.docx" -Context $ctx
$blob.BlobClient.CreateSnapshot()
Définir un niveau d’objet blob
Lorsque vous changez le niveau d’un blob, vous déplacez ce blob et toutes ses données dans le niveau cible. Pour apporter la modification, récupérez un objet blob avec l’applet de commande Get-AzStorageBlob
et appelez la méthode BlobClient.SetAccessTier
. Cette approche peut être utilisée pour modifier le niveau entre chaud, froid et archive.
Le changement de niveau de froid ou chaud à archive s'effectue presque immédiatement. Une fois qu’un objet blob est déplacé vers le niveau archive, il est considéré comme étant hors ligne et ne peut pas être lu ou modifié. Pour pouvoir lire ou modifier les données d’un blob archivé, vous devez le réhydrater à un niveau en ligne. En savoir plus sur la réhydratation des Blob à partir du niveau Archive.
L’exemple de code suivant définit le niveau sur chaud pour tous les blobs du conteneur archive
.
$blobs = Get-AzStorageBlob -Container archive -Context $ctx
Foreach($blob in $blobs) {
$blob.BlobClient.SetAccessTier("Hot")
}
Opérations à l’aide de balises blob
Les balises d’index blob facilitent la gestion et la découverte des données. Les balises d’index blob sont des attributs d’index clé-valeur définis par l’utilisateur que vous pouvez appliquer à vos blobs. Une fois configuré, vous pouvez catégoriser et rechercher des objets au sein d’un conteneur individuel ou de tous les conteneurs. Les ressources blob peuvent être catégorisés dynamiquement en mettant à jour leurs balises d’index sans modifier l’organisation des conteneurs. Grâce aux étiquettes d’index, vous disposez d’une certaine flexibilité pour changer les exigences en matière de données. Vous pouvez utiliser simultanément des métadonnées et des balises d’index. Pour plus d’informations sur les balises d'index, consultez Gérer et rechercher des données Blob Azure avec des balises d’index blob.
L’exemple suivant montre comment ajouter des balises d’index blob à une série de blobs. L’exemple lit les données d’un fichier XML et l’utilise pour créer des balises d’index sur plusieurs blobs. Pour utiliser l’exemple de code, créez un fichier blob-list.xml local dans votre répertoire C:\temp. Les données XML sont fournies dans l’exemple suivant.
<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>
L’exemple de code crée une table de hachage et y affecte la variable$tags. Ensuite, il utilise les cmdlets Get-Content
et Get-Data
pour créer un objet basé sur la structure XML. Il ajoute ensuite des paires clé-valeur à la table de hachage à utiliser comme valeurs de balise. Enfin, il itère par le biais de l’objet XML et crée des balises pour chaque nœud 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
}
Suppression d’objets blob
Vous pouvez supprimer un seul blob ou une série de blobs avec la cmdlet Remove-AzStorageBlob
. Lors de la suppression de plusieurs objets blob, vous pouvez utiliser les opérations conditionnelles, les boucles ou le pipeline PowerShell, comme le montrent les exemples suivants.
Avertissement
L’exécution des exemples suivants peut supprimer définitivement des objets blob. Microsoft recommande d’activer la suppression réversible de conteneurs afin de protéger les conteneurs et les blobs contre les suppressions accidentelles. Pour plus d’informations, consultez Suppression réversible de conteneurs.
#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
Dans certains cas, il est possible de récupérer des blobs qui ont été supprimés. Si l’option de protection des données avec la suppression réversible de votre compte de stockage est activée, le paramètre -IncludeDeleted
retourne les blobs supprimés pendant la période de rétention associée. Pour en savoir plus sur la surpression réversible, consultez l’article Suppression réversible pour les blobs.
Utilisez l’exemple suivant pour récupérer une liste de blobs supprimés pendant la période de rétention associée au conteneur. Le résultat affiche une liste de blobs récemment supprimés.
#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
Restaurer un objet blob supprimé
Comme indiqué dans la section Blobs de listes, vous pouvez configurer l’option de protection des données avec la suppression réversible sur votre compte de stockage. Lorsque vous l’activez, il est possible de restaurer des objets blob supprimés pendant la période de rétention associée. Vous pouvez également utiliser le contrôle de version afin de gérer les versions précédentes de vos objets blob pour la récupération et la restauration.
Si le contrôle de version des objets blob et la suppression réversible d’objets blob sont tous deux activés, alors la modification, le remplacement, la suppression ou la restauration d’un objet blob crée automatiquement une nouvelle version. La méthode que vous utilisez pour restaurer un objet blob supprimé varie selon que le contrôle de version est activé ou non sur votre compte de stockage.
L’exemple de code suivant restaure tous les objets blob supprimés de manière réversible ou, si le contrôle de version est activé, restaure la dernière version d’un objet blob. Il commence par déterminer si le contrôle de version est activé à l’aide de l’applet de commande Get-AzStorageBlobServiceProperty
.
Si le versioning est activé, l’applet de commande Get-AzStorageBlob
récupère la liste des versions d’objets blob dotés d’un nom unique. Ensuite, les versions d’objet blob figurant dans la liste sont récupérées et classées par date. Si aucune version n’est trouvée avec la valeur d’attribut LatestVersion
, l’applet de commande Copy-AzBlob
est utilisée pour effectuer une copie active de la dernière version.
Si le contrôle de version est désactivé, la méthode BlobBaseClient.Undelete
est utilisée pour restaurer chaque objet blob supprimé de manière réversible dans le conteneur.
Pour pouvoir suivre cet exemple, vous devez activer la suppression réversible ou le contrôle de version sur au moins un de vos comptes de stockage.
Important
L’exemple suivant énumère un groupe d’objets blob et les stocke en mémoire avant de les traiter. Si le contrôle de version est activé, les objets blob sont également triés. L’utilisation du paramètre -ContinuationToken
avec une variable $maxCount
limite le nombre d’objets blob au sein du groupe pour conserver les ressources. Si un conteneur contient des millions d’objets blob, cela sera extrêmement coûteux. Vous pouvez ajuster la valeur de la variable $maxCount
, mais si un conteneur contient des millions d’objets blob, le script traite les objets blob lentement.
Pour en savoir plus sur l’option de protection des données avec la suppression réversible, reportez-vous à l’article Suppression réversible pour les blobs.
$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."
}