PowerShell kullanarak blob kapsayıcılarını yönetme

Azure blob depolama, büyük miktarlarda yapılandırılmamış nesne verilerini depolamanıza olanak tanır. Blob depolamayı medya, içerik veya uygulama verilerini kullanıcılara toplamak veya kullanıma açmak için kullanabilirsiniz. Tüm blob verileri kapsayıcılar içinde depolandığından, verileri karşıya yüklemeye başlamadan önce bir depolama kapsayıcısı oluşturmanız gerekir. Blob depolama hakkında daha fazla bilgi edinmek için Bkz . Azure Blob depolamaya giriş.

Bu nasıl yapılır makalesinde hem bireysel hem de birden çok depolama kapsayıcısı nesnesiyle nasıl çalışabilirsiniz açıklanmaktadır.

Ön koşullar

Bu makaledeki örnekleri kullanabilmek için önce bir Azure aboneliği için yetkilendirme almanız gerekir. Yetkilendirme, Bir Microsoft Entra hesabıyla kimlik doğrulaması yaparak veya paylaşılan bir anahtar kullanarak gerçekleşebilir. Bu makaledeki örneklerde bağlam nesneleriyle birlikte Microsoft Entra kimlik doğrulaması kullanılabilecek. Bağlam nesneleri Microsoft Entra kimlik bilgilerinizi kapsüller ve bunları sonraki veri işlemlerine geçirerek yeniden kimlik doğrulama gereksinimini ortadan kaldırır.

Azure hesabınızda bir Microsoft Entra hesabıyla oturum açmak için PowerShell'i açın ve Bağlan-AzAccount cmdlet'ini çağırın.

# Connect to your Azure subscription
 Connect-AzAccount

Bağlantı kurulduktan sonra cmdlet'ini çağırarak depolama hesabı bağlamını New-AzStorageContext oluşturun. Veri işlemlerinin -UseConnectedAccount Microsoft Entra kimlik bilgileriniz kullanılarak gerçekleştirilmesi için parametresini ekleyin.

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

Köşeli ayraç içindeki yer tutucu değerlerini kendi değerlerinizle değiştirmeyi unutmayın. PowerShell ile Azure'da oturum açma hakkında daha fazla bilgi için bkz . Azure PowerShell ile oturum açma.

Kapsayıcı oluşturma

PowerShell ile kapsayıcı oluşturmak için New-Az Depolama Container cmdlet'ini çağırın. Depolama hesabı içinde oluşturulabilecek blob veya kapsayıcı sayısıyla ilgili bir sınır yoktur. Kapsayıcılar diğer kapsayıcıların içinde iç içe yerleştirilemez.

Aşağıdaki örnekte, cmdlet'i ile blob kapsayıcıları oluşturmaya yönelik üç seçenek gösterilmektedir New-AzStorageContainer . İlk yaklaşım tek bir kapsayıcı oluştururken, kalan iki yaklaşım da kapsayıcı oluşturmayı otomatikleştirmek için PowerShell işlemlerinden yararlanır.

Bu örneği kullanmak için değişkenler için değerler sağlayın ve Azure aboneliğinizle bağlantı oluşturduğunuzdan emin olun. Köşeli ayraç içindeki yer tutucu değerlerini kendi değerlerinizle değiştirmeyi unutmayın.

# 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

Sonuç, depolama hesabının adını sağlar ve yeni kapsayıcının oluşturulmasını onaylar.

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          

Kapsayıcıları listeleme

Depolama kapsayıcılarını Get-AzStorageContainer almak için cmdlet'ini kullanın. Tek bir kapsayıcıyı almak için parametresini -Name ekleyin. Belirli bir karakter dizesiyle başlayan kapsayıcıların listesini döndürmek için -Prefix parametresi için bir değer belirtin.

Aşağıdaki örnek hem tek bir kapsayıcıyı hem de kapsayıcı kaynaklarının listesini alır.

# 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

Sonuç, blob uç noktasının URI'sini sağlar ve ad ve ön ek ile alınan kapsayıcıları listeler.

   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 

Kapsayıcı özelliklerini ve meta verilerini okuma

Kapsayıcı hem sistem özelliklerini hem de kullanıcı tanımlı meta verileri kullanıma sunar. Sistem özellikleri her blob depolama kaynağında bulunur. Bazı özellikler salt okunurken, diğerleri okunabilir veya ayarlanabilir. Bazı sistem özellikleri, kapakların altında belirli standart HTTP üst bilgileriyle eşleniyor.

Kullanıcı tanımlı meta veriler, blob depolama kaynağı için belirttiğiniz bir veya daha fazla ad-değer çiftini içerir. Kaynakla birlikte ek değerleri depolamak için meta verileri kullanabilirsiniz. Meta veri değerleri yalnızca sizin amaçlarınıza yöneliktir ve kaynağın davranışını etkilemez.

Kapsayıcı özellikleri

Aşağıdaki örnek, tanıtım ön ekiyle tüm kapsayıcıları alır ve özelliklerini listeleyerek bunlar arasında yinelenir.

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

Sonuçlar, ön ek döngüsüne sahip tüm kapsayıcıları görüntüler ve özelliklerini listeler.

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

Kapsayıcı meta verilerini okuma ve yazma

Depolama hesabı içinde binlerce nesnesi olan kullanıcılar, meta verilerine göre belirli kapsayıcıları hızla bulabilir. Meta verilere erişmek için nesnesini kullanacaksınız BlobContainerClient . Bu nesne, kapsayıcılara ve bloblarına erişmenizi ve bunları işlemenizi sağlar. Meta verileri güncelleştirmek için yöntemini çağırmanız SetMetadata() gerekir. yöntemi yalnızca genel IDictionary bir nesnede depolanan anahtar-değer çiftlerini kabul eder. Daha fazla bilgi için bkz . BlobContainerClient sınıfı

Aşağıdaki örnek önce kapsayıcının meta verilerini güncelleştirir ve ardından kapsayıcının meta verilerini alır. Örnek, meta verilerin bellekteki nesneden okunmamasını sağlamak için örnek kapsayıcıyı bellekten temizler ve yeniden alır.

# 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

Sonuçlar bir kapsayıcının tüm meta verilerini görüntüler.

individual-container metadata:

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

Kapsayıcı için paylaşılan erişim imzası alma

Paylaşılan erişim imzası (SAS), Azure kaynaklarına temsilci erişimi sağlar. SAS, bir istemcinin verilerinize nasıl erişebileceği üzerinde ayrıntılı denetim sağlar. Örneğin, istemcinin kullanabileceği kaynakları belirtebilirsiniz. Ayrıca, istemcinin gerçekleştirebileceği işlem türlerini sınırlayabilir ve eylemlerin gerçekleştirilebileceği süreyi belirtebilirsiniz.

SAS genellikle normalde izinleri olmayan bir istemciye geçici ve güvenli erişim sağlamak için kullanılır. Bu senaryoya örnek olarak kullanıcıların kendi verilerini okumasına ve depolama hesabınıza yazmasına olanak tanıyan bir hizmet gösterilebilir.

Azure Depolama üç tür paylaşılan erişim imzası destekler: kullanıcı temsilcisi, hizmet ve hesap SAS'ı. Paylaşılan erişim imzaları hakkında daha fazla bilgi için Kapsayıcı veya blob için hizmet SAS'i oluşturma makalesine bakın.

Dikkat

Geçerli bir SAS'ye sahip olan tüm istemciler, bu SAS'nin izin verdiği şekilde depolama hesabınızdaki verilere erişebilir. SAS'yi kötü amaçlı veya istenmeyen kullanıma karşı korumak önemlidir. SAS dağıtmak için isteğe bağlılığı kullanın ve güvenliği aşılmış SAS'yi iptal etmek için bir planınız var.

Aşağıdaki örnekte, cmdlet'ini kullanarak belirli bir kapsayıcı için hizmet SAS'sini yapılandırma işlemi gösterilmektedir New-AzStorageContainerSASToken . Örnek SAS'yi başlangıç ve süre sonu süreleri ile bir protokolle yapılandıracaktır. Ayrıca parametresini kullanarak -Permission SAS'deki okuma, yazma ve listeleme izinlerini de belirtir. İzinlerin tam tablosuna Hizmet SAS'i oluşturma makalesinde başvurabilirsiniz.

# 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

Dekont

Blob Depolama tarafından döndürülen SAS belirteci, URL sorgu dizesi için sınırlayıcı karakteri ('?') içermez. SAS belirtecini bir kaynak URL'sine ekliyorsanız sınırlayıcı karakterini de eklemeyi unutmayın.

Kapsayıcıları silme

Kullanım örneğinize bağlı olarak, cmdlet'iyle Remove-AzStorageContainer bir kapsayıcıyı veya kapsayıcı listesini silebilirsiniz. Kapsayıcı listesini silerken, aşağıdaki örneklerde gösterildiği gibi koşullu işlemlerden, döngülerden veya PowerShell işlem hattından yararlanabilirsiniz.

# 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

Bazı durumlarda, silinmiş kapsayıcıları almak mümkündür. Depolama hesabınızın geçici silme veri koruma seçeneği etkinse, -IncludeDeleted parametresi ilişkili saklama süresi içinde silinen kapsayıcıları döndürür. -IncludeDeleted parametresi yalnızca kapsayıcı listesini döndürürken parametresiyle -Prefix birlikte kullanılabilir. Geçici silme hakkında daha fazla bilgi edinmek için Kapsayıcılar için geçici silme makalesine bakın.

Depolama hesabının ilişkili saklama süresi içinde silinen kapsayıcıların listesini almak için aşağıdaki örneği kullanın.

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

Geçici olarak silinen kapsayıcıyı geri yükleme

Kapsayıcıları listeleme bölümünde belirtildiği gibi, depolama hesabınızda geçici silme veri koruma seçeneğini yapılandırabilirsiniz. Etkinleştirildiğinde, ilişkili saklama süresi içinde silinen kapsayıcıları geri yüklemek mümkündür.

Aşağıdaki örnekte, cmdlet'iyle geçici olarak silinmiş bir kapsayıcının Restore-AzStorageContainer nasıl geri yükleneceği açıklanmaktadır. Bu örneği takip edebilmeniz için önce geçici silmeyi etkinleştirmeniz ve depolama hesaplarınızdan en az birinde yapılandırmanız gerekir.

Geçici silme veri koruma seçeneği hakkında daha fazla bilgi edinmek için Kapsayıcılar için geçici silme makalesine bakın.

# 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

Sonuçlar, geri yüklenen ön ek tanıtımına sahip tüm kapsayıcıları görüntüler.

    Storage Account Name: demostorageaccount

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

Ayrıca bkz.