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
En Azure-prenumeration. Se Hämta en kostnadsfri utvärderingsversion av Azure.
Azure PowerShell-modulen Az, som är den rekommenderade PowerShell-modulen för interaktion med Azure. För att komma igång med Az PowerShell kan du läsa artikeln om att installera Azure PowerShell.
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