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
Azure aboneliği. Bkz. Azure ücretsiz deneme sürümü alma.
Azure ile etkileşime geçiş için önerilen PowerShell modülü olan Azure PowerShell modülü Az. Az PowerShell modülünü kullanmaya başlamak için Azure PowerShell’i yükleyin.
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