Delen via


Blobcontainers beheren met Behulp van PowerShell

Met Azure Blob Storage kunt u grote hoeveelheden ongestructureerde objectgegevens opslaan. U kunt blobopslag gebruiken om media, inhoud of toepassingsgegevens te verzamelen of beschikbaar te maken voor gebruikers. Omdat alle blobgegevens worden opgeslagen in containers, moet u een opslagcontainer maken voordat u gegevens kunt uploaden. Lees de inleiding tot Azure Blob Storage voor meer informatie over blobopslag.

In dit artikel wordt uitgelegd hoe u kunt werken met zowel afzonderlijke als meerdere opslagcontainerobjecten.

Vereisten

U moet autorisatie verkrijgen voor een Azure-abonnement voordat u de voorbeelden in dit artikel kunt gebruiken. Autorisatie kan plaatsvinden door verificatie met een Microsoft Entra-account of met behulp van een gedeelde sleutel. In de voorbeelden in dit artikel wordt Microsoft Entra-verificatie gebruikt in combinatie met contextobjecten. Contextobjecten bevatten uw Microsoft Entra-referenties en geven deze door aan volgende gegevensbewerkingen, waardoor de noodzaak om opnieuw te verifiëren niet meer hoeft te worden geverifieerd.

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 context van het opslagaccount door de New-AzStorageContext cmdlet aan te roepen. Neem de -UseConnectedAccount parameter op zodat gegevensbewerkingen worden uitgevoerd met uw Microsoft Entra-referenties.

# Create a context object using Azure AD credentials
 $ctx = New-AzStorageContext -StorageAccountName <storage account name> -UseConnectedAccount

Vergeet niet om de tijdelijke aanduidingen tussen vierkante haken te vervangen door uw eigen waarden. Zie Aanmelden met Azure PowerShell voor meer informatie over aanmelden bij Azure met PowerShell.

Een container maken

Als u containers wilt maken met PowerShell, roept u de cmdlet New-AzStorageContainer aan. Er zijn geen limieten voor het aantal blobs of containers dat kan worden gemaakt binnen een opslagaccount. Containers kunnen niet worden genest binnen andere containers.

In het volgende voorbeeld ziet u drie opties voor het maken van blobcontainers met de New-AzStorageContainer cmdlet. Met de eerste benadering wordt één container gemaakt, terwijl de resterende twee benaderingen gebruikmaken van PowerShell-bewerkingen om het maken van containers te automatiseren.

Als u dit voorbeeld wilt gebruiken, geeft u waarden op voor de variabelen en zorgt u ervoor dat u een verbinding met uw Azure-abonnement hebt gemaakt. Vergeet niet om de tijdelijke aanduidingen tussen vierkante haken te vervangen door uw eigen waarden.

# Create variables
 $containerName  = "individual-container"
 $prefixName     = "loop"

# Approach 1: Create a container
 New-AzStorageContainer -Name $containerName -Context $ctx

# Approach 2: Create containers with a PowerShell loop
 for ($i = 1; $i -le 3; $i++) { 
     New-AzStorageContainer -Name (-join($prefixName, $i)) -Context $ctx
    } 

# Approach 3: Create containers using the PowerShell Split method
 "$($prefixName)4 $($prefixName)5 $($prefixName)6".split() | New-AzStorageContainer -Context $ctx

Het resultaat bevat de naam van het opslagaccount en bevestigt het maken van de nieuwe container.

Storage Account Name: demostorageaccount

Name                   PublicAccess   LastModified
----                   ------------   ------------
individual-container   Off            11/2/2021 4:09:05 AM +00:00
loop-container1        Off            11/2/2021 4:09:05 AM +00:00
loop-container2        Off            11/2/2021 4:09:05 AM +00:00
loop-container3        Off            11/2/2021 4:09:05 AM +00:00           
loop-container4        Off            11/2/2021 4:09:05 AM +00:00           
loop-container5        Off            11/2/2021 4:09:05 AM +00:00           
loop-container6        Off            11/2/2021 4:09:05 AM +00:00          

Containers weergeven

Gebruik de Get-AzStorageContainer cmdlet om opslagcontainers op te halen. Als u één container wilt ophalen, neemt u de -Name parameter op. Als u een lijst met containers wilt retourneren die beginnen met een bepaalde tekenreeks, geeft u een waarde op voor de parameter -Voorvoegsel.

In het volgende voorbeeld worden zowel een afzonderlijke container als een lijst met containerbronnen opgehaald.

# Create variables
 $containerName  = "individual-container"
 $prefixName     = "loop-"

# Approach 1: Retrieve an individual container
 Get-AzStorageContainer -Name $containerName -Context $ctx
 Write-Host

# Approach 2: Retrieve a list of containers
 Get-AzStorageContainer -Prefix $prefixName -Context $ctx

Het resultaat bevat de URI van het blob-eindpunt en vermeldt de containers die zijn opgehaald op naam en voorvoegsel.

   Storage Account Name: demostorageaccount

Name                 PublicAccess         LastModified                   IsDeleted  VersionId        
----                 ------------         ------------                   ---------  ---------        
individual-container                      11/2/2021 5:52:08 PM +00:00                                

loop-container1                           11/2/2021 12:22:00 AM +00:00                               
loop-container2                           11/2/2021 12:22:00 AM +00:00                               

loop-container1                           11/2/2021 12:22:00 AM +00:00                               
loop-container2                           11/2/2021 12:22:00 AM +00:00
loop-container3                           11/2/2021 12:22:00 AM +00:00   True       01D7E7129FDBD7D4
loop-container4                           11/2/2021 12:22:00 AM +00:00   True       01D7E8A5EF01C787 

Containereigenschappen en metagegevens lezen

Een container bevat zowel systeemeigenschappen als door de gebruiker gedefinieerde metagegevens. Er bestaan systeemeigenschappen op elke blobopslagresource. 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 blobopslagresource. U kunt metagegevens gebruiken om extra 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.

Eigenschappen van de container

In het volgende voorbeeld worden alle containers opgehaald met het demovoorvoegsel en doorlopen ze, waarbij hun eigenschappen worden vermeld.

# Create variable
 $prefix = "loop"

# Get containers
 $containers = Get-AzStorageContainer -Prefix $prefix -Context $ctx

# Iterate containers, display properties
 Foreach ($container in $containers) 
 {
    $containerProperties = $container.BlobContainerClient.GetProperties()
    Write-Host $container.Name "properties:"
    $containerProperties.Value
 }

In de resultaten worden alle containers met de voorvoegsellus weergegeven en worden hun eigenschappen weergegeven.

loop-container1 properties:

LastModified                      : 12/7/2021 7:47:17 PM +00:00
LeaseStatus                       : Unlocked
LeaseState                        : Available
LeaseDuration                     : Infinite
PublicAccess                      : 
HasImmutabilityPolicy             : False
HasLegalHold                      : False
DefaultEncryptionScope            : $account-encryption-key
PreventEncryptionScopeOverride    : False
DeletedOn                         : 
RemainingRetentionDays            : 
ETag                              : 0x8D9B9BA602806DA
Metadata                          : {}
HasImmutableStorageWithVersioning : False

loop-container2 properties:
LastModified                      : 12/7/2021 7:47:18 PM +00:00
LeaseStatus                       : Unlocked
LeaseState                        : Available
LeaseDuration                     : Infinite
PublicAccess                      : 
HasImmutabilityPolicy             : False
HasLegalHold                      : False
DefaultEncryptionScope            : $account-encryption-key
PreventEncryptionScopeOverride    : False
DeletedOn                         : 
RemainingRetentionDays            : 
ETag                              : 0x8D9B9BA605996AE
Metadata                          : {}
HasImmutableStorageWithVersioning : False

Containermetagegevens lezen en schrijven

Gebruikers met veel duizenden objecten in hun opslagaccount kunnen snel specifieke containers vinden op basis van hun metagegevens. Voor toegang tot de metagegevens gebruikt u het BlobContainerClient object. Met dit object kunt u containers en hun blobs openen en bewerken. Als u metagegevens wilt bijwerken, moet u de SetMetadata() methode aanroepen. De methode accepteert alleen sleutel-waardeparen die zijn opgeslagen in een algemeen IDictionary object. Zie de klasse BlobContainerClient voor meer informatie

In het onderstaande voorbeeld worden eerst de metagegevens van een container bijgewerkt en daarna worden de metagegevens van een container opgehaald. In het voorbeeld wordt de voorbeeldcontainer uit het geheugen leeggemaakt en opnieuw opgehaald om ervoor te zorgen dat metagegevens niet worden gelezen uit het object in het geheugen.

# Create variable
  $containerName = "individual-container"

# Retrieve container
 $container = Get-AzStorageContainer -Name $containerName -Context $ctx

# Create IDictionary, add key-value metadata pairs to IDictionary
 $metadata = New-Object System.Collections.Generic.Dictionary"[String,String]"
 $metadata.Add("CustomerName","Anthony Bennedetto")
 $metadata.Add("CustomerDOB","08/03/1926")
 $metadata.Add("CustomerBirthplace","Long Island City")

# Update metadata
  $container.BlobContainerClient.SetMetadata($metadata, $null)

# Flush container from memory, retrieve updated container
 $container = $null
 $container = Get-AzStorageContainer -Name $containerName -Context $ctx
 
# Display metadata
 $properties = $container.BlobContainerClient.GetProperties()
 Write-Host $container.Name "metadata:" 
 Write-Host $properties.Value.Metadata

In de resultaten worden de volledige metagegevens voor een container weergegeven.

individual-container metadata:

[CustomerName, Anthony Bennedetto] [CustomerDOB, 08/03/1926] [CustomerBirthplace, Long Island City]

Een handtekening voor gedeelde toegang voor een container ophalen

Een Shared Access Signature (SAS) biedt gedelegeerde toegang tot Azure-resources. Een SAS geeft u gedetailleerde controle over hoe een client toegang heeft tot uw gegevens. U kunt bijvoorbeeld opgeven welke resources beschikbaar zijn voor de client. U kunt ook de typen bewerkingen beperken die de client kan uitvoeren en de hoeveelheid tijd opgeven waarvoor de acties kunnen worden uitgevoerd.

Een SAS wordt vaak gebruikt om tijdelijke en veilige toegang te bieden tot een client die normaal gesproken niet over machtigingen beschikt. Een voorbeeld van dit scenario is een service waarmee gebruikers hun eigen gegevens kunnen lezen en schrijven naar uw opslagaccount.

Azure Storage ondersteunt drie typen handtekeningen voor gedeelde toegang: sas voor gebruikersdelegering, service en account. Zie het artikel Een service-SAS maken voor een container of blob voor meer informatie over handtekeningen voor gedeelde toegang.

Let op

Elke client die een geldige SAS heeft, heeft toegang tot gegevens in uw opslagaccount, zoals toegestaan door die SAS. Het is belangrijk om een SAS te beschermen tegen schadelijk of onbedoeld gebruik. Gebruik discretie bij het distribueren van een SAS en een plan voor het intrekken van een gecompromitteerde SAS.

In het volgende voorbeeld ziet u het proces voor het configureren van een service-SAS voor een specifieke container met behulp van de New-AzStorageContainerSASToken cmdlet. In het voorbeeld wordt de SAS geconfigureerd met begin- en verlooptijden en een protocol. Ook worden de lees-, schrijf- en lijstmachtigingen in de SAS opgegeven met behulp van de -Permission parameter. U kunt verwijzen naar de volledige tabel met machtigingen in het artikel Een service-SAS maken.

# Create variables
 $accountName   = "<storage-account>"
 $containerName = "individual-container"
 $startTime     = Get-Date
 $expiryTime    = $startTime.AddDays(7)
 $permissions   = "rwl"
 $protocol      = "HttpsOnly"

# Create a context object using Azure AD credentials, retrieve container
 $ctx = New-AzStorageContext -StorageAccountName $accountName -UseConnectedAccount
 
# Approach 1: Generate SAS token for a specific container
 $sas = New-AzStorageContainerSASToken `
 -Context $ctx `
 -Name $containerName `
 -StartTime $startTime `
 -ExpiryTime $expiryTime `
 -Permission $permissions `
 -Protocol $protocol

# Approach 2: Generate SAS tokens for a container list using pipeline
  Get-AzStorageContainer -Container $filterName -Context $ctx | New-AzStorageContainerSASToken `
 -Context $ctx `
 -StartTime $startTime `
 -ExpiryTime $expiryTime `
 -Permission $permissions `
 -Protocol $protocol | Write-Output

Notitie

Het SAS-token dat door Blob Storage wordt geretourneerd, bevat geen scheidingsteken ('?') voor de URL-queryreeks. Als u het SAS-token toevoegt aan een resource-URL, moet u ook het scheidingsteken toevoegen.

Containers verwijderen

Afhankelijk van uw use-case kunt u een container of lijst met containers met de Remove-AzStorageContainer cmdlet verwijderen. Wanneer u een lijst met containers verwijdert, kunt u gebruikmaken van voorwaardelijke bewerkingen, lussen of de PowerShell-pijplijn, zoals wordt weergegeven in de onderstaande voorbeelden.

# Create variables
 $accountName    = "<storage-account>"
 $containerName  = "individual-container"
 $prefixName     = "loop-"

# Delete a single named container
 Remove-AzStorageContainer -Name $containerName -Context $ctx

# Iterate a loop, deleting containers
 for ($i = 1; $i -le 2; $i++) { 
     Remove-AzStorageContainer -Name (-join($containerPrefix, $i)) -Context $ctx
    } 

# Retrieve container list, delete using a pipeline
 Get-AzStorageContainer -Prefix $prefixName -Context $ctx | Remove-AzStorageContainer

In sommige gevallen is het mogelijk om containers op te halen die zijn verwijderd. Als de optie voor gegevensbeveiliging voor voorlopig verwijderen van uw opslagaccount is ingeschakeld, retourneert de -IncludeDeleted parameter containers die zijn verwijderd binnen de bijbehorende bewaarperiode. De -IncludeDeleted parameter kan alleen worden gebruikt in combinatie met de parameter bij het -Prefix retourneren van een lijst met containers. Raadpleeg het artikel Voorlopig verwijderen voor containers voor meer informatie over voorlopig verwijderen.

Gebruik het volgende voorbeeld om een lijst met containers op te halen die zijn verwijderd binnen de gekoppelde bewaarperiode van het opslagaccount.

# Retrieve a list of containers including those recently deleted
 Get-AzStorageContainer -Prefix $prefixName -Context $ctx -IncludeDeleted

Een voorlopig verwijderde container herstellen

Zoals vermeld in de sectie Lijstcontainers , kunt u de optie voor gegevensbeveiliging voor voorlopig verwijderen configureren in uw opslagaccount. Wanneer deze optie is ingeschakeld, is het mogelijk om containers te herstellen die zijn verwijderd binnen de bijbehorende bewaarperiode.

In het volgende voorbeeld wordt uitgelegd hoe u een voorlopig verwijderde container herstelt met de Restore-AzStorageContainer cmdlet. Voordat u dit voorbeeld kunt volgen, moet u voorlopig verwijderen inschakelen en configureren voor ten minste één van uw opslagaccounts.

Raadpleeg het artikel Voorlopig verwijderen voor containers voor meer informatie over de optie voor gegevensbescherming voor voorlopig verwijderen.

# Create variables
 $accountName = "<storage-account>"
 $prefixName  = "loop-"

# Create a context object using Azure AD credentials
 $ctx = New-AzStorageContext -StorageAccountName $accountName -UseConnectedAccount

# Retrieve all containers, filter deleted containers, restore deleted containers
 Get-AzStorageContainer -Prefix $prefixName -IncludeDeleted `
    -Context $ctx | ? { $_.IsDeleted } | Restore-AzStorageContainer

In de resultaten worden alle containers weergegeven met het voorvoegseldemo die is hersteld.

    Storage Account Name: demostorageaccount

Name                 PublicAccess         LastModified                   IsDeleted  VersionId        
----                 ------------         ------------                   ---------  ---------        
loop-container3                                                                                       
loop-container4               

Zie ook