Dela via


Hantera blobcontainrar med PowerShell

Med Azure Blob Storage kan du lagra stora mängder ostrukturerade objektdata. Du kan använda bloblagring för att samla in eller exponera media, innehåll eller programdata för användare. Eftersom alla blobdata lagras i containrar måste du skapa en lagringscontainer innan du kan börja ladda upp data. Mer information om bloblagring finns i Introduktion till Azure Blob Storage.

Den här artikeln beskriver hur du arbetar med både enskilda och flera lagringscontainerobjekt.

Förutsättningar

Du måste få auktorisering för en Azure-prenumeration innan du kan använda exemplen i den här artikeln. Auktorisering kan ske genom autentisering med ett Microsoft Entra-konto eller med hjälp av en delad nyckel. Exemplen i den här artikeln använder Microsoft Entra-autentisering tillsammans med kontextobjekt. Kontextobjekt kapslar in dina Microsoft Entra-autentiseringsuppgifter och skickar dem på efterföljande dataåtgärder, vilket eliminerar behovet av att autentisera igen.

Om du vill logga in på ditt Azure-konto med ett Microsoft Entra-konto öppnar du PowerShell och anropar cmdleten Anslut-AzAccount.

# Connect to your Azure subscription
 Connect-AzAccount

När anslutningen har upprättats skapar du lagringskontokontexten genom att anropa cmdleten New-AzStorageContext . Inkludera parametern -UseConnectedAccount så att dataåtgärder utförs med dina Microsoft Entra-autentiseringsuppgifter.

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

Kom ihåg att ersätta platshållarvärdena inom hakparenteser med dina egna värden. Mer information om hur du loggar in på Azure med PowerShell finns i Logga in med Azure PowerShell.

Skapa en container

Om du vill skapa containrar med PowerShell anropar du cmdleten New-AzStorageContainer . Det finns inga gränser för antalet blobar eller containrar som kan skapas i ett lagringskonto. Containrar kan inte kapslas i andra containrar.

I följande exempel visas tre alternativ för att skapa blobcontainrar med cmdleten New-AzStorageContainer . Den första metoden skapar en enda container, medan de återstående två metoderna använder PowerShell-åtgärder för att automatisera skapandet av containrar.

Om du vill använda det här exemplet anger du värden för variablerna och ser till att du har skapat en anslutning till din Azure-prenumeration. Kom ihåg att ersätta platshållarvärdena inom hakparenteser med dina egna värden.

# 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

Resultatet ger namnet på lagringskontot och bekräftar skapandet av den nya containern.

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          

Visa en lista med containrar

Använd cmdleten Get-AzStorageContainer för att hämta lagringscontainrar. Om du vill hämta en enda container tar du med parametern -Name . Om du vill returnera en lista över containrar som börjar med en viss teckensträng anger du ett värde för parametern -Prefix.

I följande exempel hämtas både en enskild container och en lista över containerresurser.

# 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

Resultatet ger URI för blobslutpunkten och visar en lista över containrar som hämtats med namn och prefix.

   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 

Läsa containeregenskaper och metadata

En container exponerar både systemegenskaper och användardefinierade metadata. Systemegenskaper finns på varje bloblagringsresurs. Vissa egenskaper är skrivskyddade, medan andra kan läsas eller ställas in. Under täcket mappas vissa systemegenskaper till vissa standard-HTTP-huvuden.

Användardefinierade metadata består av ett eller flera namn/värde-par som du anger för en bloblagringsresurs. Du kan använda metadata för att lagra ytterligare värden med resursen. Metadatavärden är endast för dina egna syften och påverkar inte hur resursen beter sig.

Egenskaper för container

I följande exempel hämtas alla containrar med demoprefixet och itererar genom dem och visar deras egenskaper.

# 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
 }

Resultatet visar alla containrar med prefixloopen och visar deras egenskaper.

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

Läsa och skriva containermetadata

Användare som har tusentals objekt i sitt lagringskonto kan snabbt hitta specifika containrar baserat på deras metadata. Om du vill komma åt metadata använder du objektet BlobContainerClient . Med det här objektet kan du komma åt och manipulera containrar och deras blobar. Om du vill uppdatera metadata måste du anropa SetMetadata() metoden. Metoden accepterar endast nyckel/värde-par som lagras i ett allmänt IDictionary objekt. Mer information finns i klassen BlobContainerClient

Exemplet nedan uppdaterar först en containers metadata och hämtar därefter en containers metadata. Exemplet rensar exempelcontainern från minnet och hämtar den igen för att säkerställa att metadata inte läses från objektet i minnet.

# 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

Resultatet visar fullständiga metadata för en container.

individual-container metadata:

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

Hämta en signatur för delad åtkomst för en container

En signatur för delad åtkomst (SAS) ger delegerad åtkomst till Azure-resurser. En SAS ger dig detaljerad kontroll över hur en klient kan komma åt dina data. Du kan till exempel ange vilka resurser som är tillgängliga för klienten. Du kan också begränsa vilka typer av åtgärder som klienten kan utföra och ange hur lång tid åtgärderna kan utföras för.

En SAS används ofta för att ge tillfällig och säker åtkomst till en klient som normalt inte skulle ha behörighet. Ett exempel på det här scenariot är en tjänst som gör det möjligt för användare att läsa och skriva sina egna data till ditt lagringskonto.

Azure Storage har stöd för tre typer av signaturer för delad åtkomst: användardelegering, tjänst och konto-SAS. Mer information om signaturer för delad åtkomst finns i artikeln Skapa en tjänst-SAS för en container eller blob .

Varning

Alla klienter som har en giltig SAS kan komma åt data i ditt lagringskonto enligt sas-tillstånd. Det är viktigt att skydda en SAS från skadlig eller oavsiktlig användning. Använd diskretion när du distribuerar en SAS och ha en plan för att återkalla en komprometterad SAS.

I följande exempel visas hur du konfigurerar en tjänst-SAS för en specifik container med hjälp av cmdleten New-AzStorageContainerSASToken . Exemplet konfigurerar SAS med start- och utgångstider och ett protokoll. Den anger också läs-, skriv- och listbehörigheterna i SAS med hjälp av parametern -Permission . Du kan referera till den fullständiga behörighetstabellen i artikeln Skapa en tjänst-SAS .

# 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

Kommentar

SAS-token som returneras av Blob Storage innehåller inte avgränsarens tecken ('?') för URL-frågesträngen. Om du lägger till SAS-token till en resurs-URL, kom ihåg att även lägga till avgränsartecknet.

Ta bort containrar

Beroende på ditt användningsfall kan du ta bort en container eller en lista med containrar med cmdleten Remove-AzStorageContainer . När du tar bort en lista med containrar kan du använda villkorsstyrda åtgärder, loopar eller PowerShell-pipelinen enligt exemplen nedan.

# 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

I vissa fall är det möjligt att hämta containrar som har tagits bort. Om lagringskontots alternativ för mjuk borttagning av dataskydd är aktiverat returnerar parametern -IncludeDeleted containrar som tagits bort inom den associerade kvarhållningsperioden. Parametern -IncludeDeleted kan endast användas tillsammans med parametern -Prefix när du returnerar en lista med containrar. Mer information om mjuk borttagning finns i artikeln Mjuk borttagning för containrar .

Använd följande exempel för att hämta en lista över containrar som tagits bort inom lagringskontots associerade kvarhållningsperiod.

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

Återställa en mjuk borttagningscontainer

Som du nämnde i avsnittet Listcontainrar kan du konfigurera alternativet mjuk borttagning av dataskydd på ditt lagringskonto. När det är aktiverat går det att återställa containrar som tagits bort inom den associerade kvarhållningsperioden.

I följande exempel beskrivs hur du återställer en mjuk borttagningscontainer med cmdleten Restore-AzStorageContainer . Innan du kan följa det här exemplet måste du aktivera mjuk borttagning och konfigurera den på minst ett av dina lagringskonton.

Mer information om dataskyddsalternativet mjuk borttagning finns i artikeln Mjuk borttagning för containrar .

# 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

Resultatet visar alla containrar med prefixet demo som har återställts.

    Storage Account Name: demostorageaccount

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

Se även