PowerShell ile blok bloblarını yönetme

Blob depolama blok blobları, ekleme bloblarını ve sayfa bloblarını destekler. Blok blobları, büyük miktarda veriyi verimli bir şekilde karşıya yüklemek için iyileştirilmiştir. Blok blobları görüntüleri, belgeleri ve rastgele okuma ve yazma işlemlerine tabi olmayan diğer veri türlerini depolamak için idealdir. Bu makalede blok bloblarıyla çalışma açıklanmaktadır.

Ön koşullar

Kimlik bilgilerini kapsüllemek için bağlam nesnesi yapılandırma

Azure Depolama'a yapılan her istek yetkilendirilmelidir. PowerShell'den yapılan bir isteği Microsoft Entra hesabınızla veya hesap erişim anahtarlarını kullanarak yetkilandırabilirsiniz. Bu makaledeki örneklerde bağlam nesneleriyle Microsoft Entra yetkilendirmesi kullanılır. Bağlam nesneleri Microsoft Entra kimlik bilgilerinizi kapsüller ve bunları sonraki veri işlemleri sırasında geçirir.

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 Azure bağlamını oluşturun. Microsoft Entra ID ile kimlik doğrulaması, varsayılan aboneliğiniz için otomatik olarak bir Azure bağlamı oluşturur. Bazı durumlarda, kimlik doğrulaması yaptıktan sonra farklı bir abonelikteki kaynaklara erişmeniz gerekebilir. Etkin oturum bağlamını değiştirerek geçerli Azure oturumunuzla ilişkili aboneliği değiştirebilirsiniz.

Varsayılan aboneliğinizi kullanmak için cmdlet'ini çağırarak bağlamı 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

Abonelikleri değiştirmek için Get-AzSubscription cmdlet'iyle bağlam nesnesini alın ve ardından Set-AzContext ile geçerli bağlamı değiştirin. Daha fazla bilgi için bkz . Etkin aboneliği değiştirme.

Kapsayıcı oluşturma

Tüm blob verileri kapsayıcılar içinde depolandığından, verileri karşıya yükleyebilmeniz için en az bir kapsayıcı kaynağına ihtiyacınız vardır. Gerekirse, depolama kapsayıcısı oluşturmak için aşağıdaki örneği kullanın. Daha fazla bilgi için bkz . PowerShell kullanarak blob kapsayıcılarını yönetme.

#Create a container object
$container = New-AzStorageContainer -Name "mycontainer" -Context $ctx

Aşağıdaki örnekleri kullandığınızda, köşeli ayraç içindeki yer tutucu değerlerini kendi değerlerinizle değiştirmeniz gerekir. PowerShell ile Azure'da oturum açma hakkında daha fazla bilgi için bkz . Azure PowerShell ile oturum açma.

Blobu karşıya yükleme

Bir dosyayı blok bloba yüklemek için gerekli parametre değerlerini cmdlet'ine Set-AzStorageBlobContent geçirin. yolu ve dosya adını parametresiyle -File ve kapsayıcının adını parametresiyle sağlayın -Container . Ayrıca parametresiyle -Context bağlam nesnesine bir başvuru sağlamanız gerekir.

Bu komut, yoksa blobu oluşturur veya varsa üzerine yazma onayı ister. parametresini cmdlet'ine geçirirseniz -Force , onay olmadan dosyanın üzerine yazabilirsiniz.

Aşağıdaki örnek, tek bir -File adlandırılmış dosyayı karşıya yüklemek için bir parametre değeri belirtir. Ayrıca, birden çok dosyayı karşıya yüklemek için PowerShell işlem hattı işlecinin ve Get-ChildItem cmdlet'in kullanımını gösterir. Get-ChildItem Cmdlet, C:\Temp\*.png belirtmek için parametresini kullanır-Path. Yıldız işareti (*) joker karakterinin eklenmesi, .png dosya adı uzantısına sahip tüm dosyaları belirtir. -Recurse parametresi Temp dizininde ve alt dizinlerde aramalar.

#Set variables
$path          = "C:\temp\" 
$containerName = "mycontainer"
$filename      = "demo-file.txt"
$imageFiles    = $path + "*.png"
$file          = $path + $filename

#Upload a single named file
Set-AzStorageBlobContent -File $file -Container $containerName -Context $ctx

#Upload multiple image files recursively
 Get-ChildItem -Path $imageFiles -Recurse | Set-AzStorageBlobContent -Container $containerName -Context $ctx

Sonuç, depolama hesabı adını, depolama kapsayıcı adını görüntüler ve karşıya yüklenen dosyaların listesini sağlar.

   AccountName: demostorageaccount, ContainerName: demo-container

Name              BlobType   Length  ContentType                LastModified          AccessTier  IsDeleted
----              --------   ------  -----------                ------------          ----------  ---------
demo-file.txt     BlockBlob  222     application/octet-stream   2021-12-14 01:38:03Z  Cool        False     
hello-world.png   BlockBlob  14709   application/octet-stream   2021-12-14 01:38:03Z  Cool        False
hello-world2.png  BlockBlob  12472   application/octet-stream   2021-12-14 01:38:03Z  Cool        False
hello-world3.png  BlockBlob  13537   application/octet-stream   2021-12-14 01:38:03Z  Cool        False

Blobları listeleme

Get-AzStorageBlob Cmdlet bir kapsayıcıda depolanan blobları listelemek için kullanılır. Aramanızın kapsamını tanımlamak için çeşitli yaklaşımlar kullanabilirsiniz. Bilinen bir kapsayıcı içindeki -Container belirli bir blobu listelemek için ve -Name parametresini kullanın. Belirli bir kapsayıcıdaki tüm blobların filtrelenmemiş bir listesini oluşturmak için parametresini -Container tek başına, değer -Name olmadan kullanın.

Depolama hesabının sahip olabileceği kapsayıcı veya blob sayısıyla ilgili bir kısıtlama yoktur. Binlerce blobun alınmasını önlemek için döndürülen veri miktarını sınırlamak iyi bir fikirdir. Birden çok blobu alırken, adları belirli bir dizeyle başlayan blobları belirtmek için parametresini kullanabilirsiniz -Prefix . Dosya adlarını veya türlerini belirtmek için parametresini joker karakterle de kullanabilirsiniz -Name .

parametresi, -MaxCount bir kapsayıcıdan döndürülen filtrelenmemiş blob sayısını sınırlamak için kullanılabilir. Tüm Azure kaynaklarına 5.000 hizmet sınırı uygulanır. Bu sınır, yönetilebilir miktarda verinin alınmasını ve performansın etkilenmemesini sağlar. Döndürülen blob sayısı değeri veya hizmet sınırını aşarsa -MaxCount , devam belirteci döndürülür. Bu belirteç, istediğiniz sayıda blobu almak için birden çok istek kullanmanıza olanak tanır. Blob kaynaklarını numaralandırma hakkında daha fazla bilgi sağlanır.

Aşağıdaki örnekte blobların listesini sağlamak için kullanılan çeşitli yaklaşımlar gösterilmektedir. İlk yaklaşımda belirli bir kapsayıcı kaynağı içindeki tek bir blob listelenir. İkinci yaklaşım, Louis ön ekine sahip tüm .jpg dosyaları listelemek için joker karakter kullanır. Arama, parametresi kullanılarak beş kapsayıcıyla -MaxCount sınırlıdır. Üçüncü yaklaşım, kapsayıcı içindeki tüm blobların alınmasını sınırlamak için ve -ContinuationToken parametrelerini kullanır-MaxCount.

#Set variables
$namedContainer  = "named-container"
$demoContainer   = "mycontainer"
$containerPrefix = "demo"

$maxCount = 1000
$total     = 0
$token     = $Null

#Approach 1: List all blobs in a named container
Get-AzStorageBlob -Container $namedContainer -Context $ctx

#Approach 2: Use a wildcard to list blobs in all containers
Get-AzStorageContainer -MaxCount 5 -Context $ctx | Get-AzStorageBlob -Blob "*louis*.jpg" 

#Approach 3: List batches of blobs using MaxCount and ContinuationToken parameters
Do
{
     #Retrieve blobs using the MaxCount parameter
     $blobs = Get-AzStorageBlob -Container $demoContainer `
         -MaxCount $maxCount `
         -ContinuationToken $token `
         -Context $ctx
     $blobCount = 1
     
     #Loop through the batch
     Foreach ($blob in $blobs)
     {
         #To-do: Perform some work on individual blobs here

         #Display progress bar
         $percent = $($blobCount/$maxCount*100)
         Write-Progress -Activity "Processing blobs" -Status "$percent% Complete" -PercentComplete $percent
         $blobCount++
     }

     #Update $total
     $total += $blobs.Count
      
     #Exit if all blobs processed
     If($blobs.Length -le 0) { Break; }
      
     #Set continuation token to retrieve the next batch
     $token = $blobs[$blobs.Count -1].ContinuationToken
 }
 While ($null -ne $token)
 Write-Host "`n`n   AccountName: $($ctx.StorageAccountName), ContainerName: $demoContainer `n"
 Write-Host "Processed $total blobs in $namedContainer."

İlk iki yaklaşım, depolama hesabı ve kapsayıcı adlarını ve alınan blobların listesini görüntüler. Üçüncü yaklaşım, adlandırılmış bir kapsayıcı içindeki blobların toplam sayısını görüntüler. Bloblar toplu olarak alınır ve durum çubuğu sayım sırasında ilerleme durumunu gösterir.

   AccountName: demostorageaccount, ContainerName: named-container

Name                 BlobType    Length    ContentType    LastModified          AccessTier    IsDeleted
----                 --------    ------    -----------    ------------          ----------    ---------
index.txt            BlockBlob   222       text/plain     2021-12-15 22:00:10Z  Cool          False
miles-davis.txt      BlockBlob   23454     text/plain     2021-12-15 22:17:59Z  Cool          False
cab-calloway.txt     BlockBlob   18419     text/plain     2021-12-15 22:17:59Z  Cool          False
benny-goodman.txt    BlockBlob   17726     text/plain     2021-12-15 22:17:59Z  Cool          False


   AccountName: demostorageaccount, ContainerName: demo-container

Name                 BlobType    Length    ContentType    LastModified          AccessTier    IsDeleted
----                 --------    ------    -----------    ------------          ----------    ---------
louis-armstrong.jpg  BlockBlob   211482    image/jpeg     2021-12-14 01:38:03Z  Cool          False
louis-jordan.jpg     BlockBlob   55766     image/jpeg     2021-12-14 01:38:03Z  Cool          False
louis-prima.jpg      BlockBlob   290651    image/jpeg     2021-12-14 01:38:03Z  Cool          False


   AccountName: demostorageaccount, ContainerName: demo-container

Processed 5257 blobs in demo-container.

Blobu indirme

Kullanım örneğinize bağlı olarak, Get-AzStorageBlobContent cmdlet tek veya birden çok blobu indirmek için kullanılabilir. Çoğu işlemde olduğu gibi her iki yaklaşım da bir bağlam nesnesi gerektirir.

Adlandırılmış tek bir blobu indirmek için cmdlet'ini doğrudan çağırabilir ve ve -Container parametreleri için -Blob değer sağlayabilirsiniz. Blob varsayılan olarak çalışan PowerShell dizinine indirilir, ancak alternatif bir konum belirtilebilir. Hedef konumu değiştirmek için parametresiyle -Destination geçerli, mevcut bir yol geçirilmelidir. İşlem bir hedef oluşturamadığından, belirtilen yolunuz yoksa hatayla başarısız olur.

Cmdlet ve PowerShell işlem hattı işleci birleştirilerek Get-AzStorageBlob birden çok blob indirilebilir. İlk olarak, cmdlet'iyle Get-AzStorageBlob bir blob listesi oluşturun. Ardından kapsayıcıdan blobları almak için işlem hattı işlecini ve Get-AzStorageBlobContent cmdlet'ini kullanın.

Aşağıdaki örnek kod, hem tek hem de birden çok indirme yaklaşımının bir örneğini sağlar. Ayrıca joker karakter kullanarak tüm kapsayıcılarda belirli dosyaları aramak için basitleştirilmiş bir yaklaşım sunar. Bazı ortamlarda yüz binlerce kaynak olabileceğinden parametresini -MaxCount kullanmanız önerilir.

#Set variables
$containerName = "mycontainer"
$path          = "C:\temp\downloads\"
$blobName      = "demo-file.txt"
$fileList      = "*.png"
$pipelineList  = "louis*"
$maxCount      = 10

#Download a single named blob
Get-AzStorageBlobContent -Container $containerName -Blob $blobName -Destination $path -Context $ctx

#Download multiple blobs using the pipeline
Get-AzStorageBlob -Container $containerName -Blob $fileList -Context $ctx | Get-AzStorageBlobContent

#Use wildcard to download blobs from all containers
Get-AzStorageContainer -MaxCount $maxCount `
     -Context $ctx | Get-AzStorageBlob `
     -Blob "louis*" | Get-AzStorageBlobContent

Sonuç, depolama hesabı ve kapsayıcı adlarını görüntüler ve indirilen dosyaların listesini sağlar.

   AccountName: demostorageaccount, ContainerName: demo-container

Name                 BlobType   Length  ContentType              LastModified          AccessTier  IsDeleted
----                 --------   ------  -----------              ------------          ----------  ---------
demo-file.txt        BlockBlob  222     application/octet-stream 2021-12-14 01:38:03Z  Unknown     False
hello-world.png      BlockBlob  14709   application/octet-stream 2021-12-14 01:38:03Z  Unknown     False
hello-world2.png     BlockBlob  12472   application/octet-stream 2021-12-14 01:38:03Z  Unknown     False
hello-world3.png     BlockBlob  13537   application/octet-stream 2021-12-14 01:38:03Z  Unknown     False

   AccountName: demostorageaccount, ContainerName: public-container

Name                 BlobType   Length  ContentType              LastModified          AccessTier  IsDeleted
----                 --------   ------  -----------              ------------          ----------  ---------
louis-armstrong.jpg  BlockBlob  211482  image/jpeg               2021-12-14 18:56:03Z  Unknown     False

   AccountName: demostorageaccount, ContainerName: read-only-container

Name                 BlobType   Length  ContentType              LastModified          AccessTier  IsDeleted
----                 --------   ------  -----------              ------------          ----------  ---------
louis-jordan.jpg     BlockBlob  55766   image/jpeg               2021-12-14 18:56:21Z  Unknown     False

   AccountName: demostorageaccount, ContainerName: hidden-container

Name                 BlobType   Length  ContentType              LastModified          AccessTier  IsDeleted
----                 --------   ------  -----------              ------------          ----------  ---------
louis-prima.jpg      BlockBlob  290651  image/jpeg               2021-12-14 18:56:45Z  Unknown     False

Blob özelliklerini ve meta verilerini yönetme

Kapsayıcı hem sistem özelliklerini hem de kullanıcı tanımlı meta verileri kullanıma sunar. Her Blob Depolama kaynağında sistem özellikleri vardır. 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. Bu değerleri kaynakla 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.

Blob özelliklerini okuma

Blob özelliklerini veya meta verilerini okumak için önce blobu hizmetten almanız gerekir. Bir blob'un Get-AzStorageBlob özelliklerini ve meta verilerini almak için cmdlet'ini kullanın, ancak içeriğini almayın. Ardından blob özelliklerini BlobClient.GetProperties getirmek için yöntemini kullanın. Daha sonra özellikler veya meta veriler gerektiği gibi okunabilir veya ayarlanabilir.

Aşağıdaki örnek bir blobu alır ve özelliklerini listeler.

$blob = Get-AzStorageBlob -Blob "blue-moon.mp3" -Container "mycontainer" -Context $ctx
$properties = $blob.BlobClient.GetProperties()
Echo $properties.Value

Sonuç, aşağıdaki örnekte gösterildiği gibi blobun özelliklerinin listesini görüntüler.

LastModified                         : 11/16/2021 3:42:07 PM +00:00
CreatedOn                            : 11/16/2021 3:42:07 PM +00:00
Metadata                             : {}
BlobType                             : Block
LeaseDuration                        : Infinite
LeaseState                           : Available
LeaseStatus                          : Unlocked
ContentLength                        : 2163298
ContentType                          : audio/mpeg
ETag                                 : 0x8D9C0AA9E0CBA78
IsServerEncrypted                    : True
AccessTier                           : Cool
IsLatestVersion                      : False
TagCount                             : 0
ExpiresOn                            : 1/1/0001 12:00:00 AM +00:00
LastAccessed                         : 1/1/0001 12:00:00 AM +00:00
HasLegalHold                         : False

Blob meta verilerini okuma ve yazma

Blob meta verileri, blobla ilişkilendirilmiş isteğe bağlı bir ad/değer çifti kümesidir. Önceki örnekte gösterildiği gibi, başlangıçta bir blobla ilişkilendirilmiş meta veri yoktur, ancak gerektiğinde eklenebilir. Blob meta verilerini güncelleştirmek için yöntemini kullanın BlobClient.UpdateMetadata . Bu yöntem yalnızca genel IDictionary bir nesnede depolanan anahtar-değer çiftlerini kabul eder. Daha fazla bilgi için bkz . BlobClient sınıf tanımı.

Aşağıdaki örnek önce bir blob'un meta verilerini güncelleştirir ve işler ve ardından alır. Meta verilerin bellek içi nesneden okunmadığından emin olmak için örnek blob bellekten temizlenir.

#Set variable
$container = "mycontainer"
$blobName  = "blue-moon.mp3"

#Retrieve blob
$blob = Get-AzStorageBlob -Blob $blobName -Container $container -Context $ctx

#Create IDictionary, add key-value metadata pairs to IDictionary
$metadata = New-Object System.Collections.Generic.Dictionary"[String,String]"
$metadata.Add("YearWritten","1934")
$metadata.Add("YearRecorded","1958")
$metadata.Add("Composer","Richard Rogers")
$metadata.Add("Lyricist","Lorenz Hart")
$metadata.Add("Artist","Tony Bennett")

#Update metadata
$blob.BlobClient.SetMetadata($metadata, $null)

#Flush blob from memory, retrieve updated blob, retrieve properties
$blob = $null
$blob = Get-AzStorageBlob -Blob $blobName -Container $container -Context $ctx
$properties = $blob.BlobClient.GetProperties()
 
#Display metadata
Echo $properties.Value.Metadata

Sonuç, aşağıdaki örnekte gösterildiği gibi blob'un yeni güncelleştirilen meta verilerini döndürür.

Key          Value         
---          -----         
YearWritten  1934          
YearRecorded 1958          
Composer     Richard Rogers
Lyricist     Lorenz Hart   
Artist       Tony Bennett

Bloblar için kopyalama işlemleri

Farklı türlerdeki blobların kopyalanabileceği birçok senaryo vardır. Bu makaledeki örnekler blok bloblarıyla sınırlıdır.

Kaynak blobu hedef bloba kopyalama

Aynı depolama hesabı içinde basitleştirilmiş bir kopyalama işlemi için cmdlet'ini Copy-AzStorageBlob kullanın. İşlem aynı depolama hesabı içindeki bir blobu kopyaladığı için zaman uyumlu bir işlemdir. Çapraz hesap işlemleri zaman uyumsuz.

Özellikle depolama hesapları arasında blob kopyalarken kolaylık ve performans için AzCopy kullanımını göz önünde bulundurmalısınız. AzCopy, bir depolama hesabına iki yönlü blob veya dosya kopyalama işlemi gerçekleştirmenizi sağlayan bir komut satırı yardımcı programıdır. AzCopy'yi kullanmaya başlama hakkında daha fazla bilgi edinin.

Aşağıdaki örnekte bannerphoto.png blobu fotoğraflar kapsayıcısından arşiv kapsayıcısı içindeki fotoğraflar klasörüne kopyalanır. Her iki kapsayıcı da aynı depolama hesabında bulunur. Sonuç, kopyalama işleminin başarısını doğrular.

$blobname = "bannerphoto.png"
Copy-AzStorageBlob -SrcContainer "photos" `
     -SrcBlob $blobname -DestContainer "archive" `
     -DestBlob $("photos/$blobname") -Context $ctx

AccountName: demostorageaccount, ContainerName: archive

Name                BlobType   Length  ContentType  LastModified          AccessTier  IsDeleted  VersionId
----                --------   ------  -----------  ------------          ----------  ---------  ---------
photos/bannerphoto  BlockBlob  12472   image/png    2021-11-27 23:11:43Z  Cool        False

parametresini -Force kullanarak hedefte aynı ada sahip mevcut blobun üzerine yazabilirsiniz. Bu işlem, hedef blobu etkili bir şekilde değiştirir. Ayrıca, kaydedilmemiş blokları kaldırır ve hedef blobun meta verilerinin üzerine yazar.

Bir anlık görüntüyü farklı bir adla hedef bloba kopyalama

Sonuçta elde edilen hedef blob, anlık görüntü değil yazılabilir bir blobdur.

Kopyalama işleminin kaynak blobu blok blobu, ekleme blobu, sayfa blobu veya anlık görüntü olabilir. Hedef blob zaten varsa, kaynak blob ile aynı blob türünde olmalıdır. Var olan hedef blobun üzerine yazılır.

Kopyalama işlemi devam ederken hedef blob değiştirilemez. Hedef blob yalnızca bir bekleyen kopyalama işlemine sahip olabilir. Başka bir deyişle blob, bekleyen birden çok kopyalama işlemi için hedef olamaz.

Aynı depolama hesabı içindeki bir blobu kopyaladığınızda, bu zaman uyumlu bir işlemdir. Çapraz hesap kopyalama işlemleri zaman uyumsuz.

Kaynak blob veya dosyanın tamamı her zaman kopyalanır. Bayt aralığının veya blok kümesinin kopyalanması desteklenmez.

Bir blob kopyalandığında sistem özellikleri hedef bloba aynı değerlerle kopyalanır.

Ayrıca zaman uyumsuz kopyalama işleminin nasıl durdurulacaklarını da gösterir.

Anlık görüntü blobları

Anlık görüntü, bir blobun belirli bir noktada alınan salt okunur bir sürümüdür. Blob anlık görüntüsü, URI'ye bir DateTime değeri eklenmesi dışında temel blobuyla aynıdır. Bu değer anlık görüntünün alındığı zamanı gösterir ve temel blob ile anlık görüntü arasındaki tek ayrımı sunar.

Temel blob ile ilişkili kiralar anlık görüntüyü etkilemez. Anlık görüntüde kiralama alamazsınız. Blob anlık görüntüleri hakkında daha fazla bilgi edinin.

Aşağıdaki örnek kod, depolama kapsayıcısından bir blob alır ve bunun anlık görüntüsünü oluşturur.

$blob = Get-AzStorageBlob -Container "manuscripts" -Blob "novels/fast-cars.docx" -Context $ctx
$blob.BlobClient.CreateSnapshot()

Blob katmanını ayarlama

Bir blobun katmanını değiştirdiğinizde, blobu ve tüm verilerini hedef katmana taşırsınız. Değişikliği yapmak için cmdlet'ini Get-AzStorageBlob içeren bir blob alın ve yöntemini çağırın BlobClient.SetAccessTier . Bu yaklaşım sık erişimli, seyrek erişimli ve arşiv katmanını değiştirmek için kullanılabilir.

Katmanları seyrek erişimli veya sık erişimlidenarşive değiştirme neredeyse hemen gerçekleşir. Bir blob arşiv katmanına taşındıktan sonra çevrimdışı olduğu kabul edilir ve okunamaz veya değiştirilemez. Arşivlenmiş blob verilerini okuyabilmeniz veya değiştirebilmeniz için önce bir çevrimiçi katmanda yeniden doldurmanız gerekir. Arşiv katmanından Blob yeniden doldurma hakkında daha fazla bilgi edinin.

Aşağıdaki örnek kod, kapsayıcı içindeki tüm bloblar için katmanı sık erişimliarchive olarak ayarlar.

$blobs = Get-AzStorageBlob -Container archive -Context $ctx
Foreach($blob in $blobs) {
    $blob.BlobClient.SetAccessTier("Hot")
}

Blob etiketlerini kullanan işlemler

Blob dizin etiketleri, veri yönetimini ve bulmayı kolaylaştırır. Blob dizini etiketleri, bloblarınıza uygulayabileceğiniz kullanıcı tanımlı anahtar-değer dizini öznitelikleridir. Yapılandırıldıktan sonra, tek bir kapsayıcı içindeki veya tüm kapsayıcılardaki nesneleri kategorilere ayırabilir ve bulabilirsiniz. Blob kaynakları, kapsayıcı kuruluşunda değişiklik gerektirmeden dizin etiketleri güncelleştirilerek dinamik olarak kategorilere ayırılabilir. Dizin etiketleri, değişen veri gereksinimleriyle başa çıkmak için esnek bir yol sunar. Hem meta verileri hem de dizin etiketlerini aynı anda kullanabilirsiniz. Dizin etiketleri hakkında daha fazla bilgi için bkz . Blob dizin etiketleriyle Azure Blob verilerini yönetme ve bulma.

Aşağıdaki örnekte blob dizini etiketlerinin bir dizi bloba nasıl ekleneceği gösterilmektedir. Örnek bir XML dosyasındaki verileri okur ve birkaç blobda dizin etiketleri oluşturmak için kullanır. Örnek kodu kullanmak için C:\temp dizininizde yerel bir blob-list.xml dosyası oluşturun. XML verileri aşağıdaki örnekte verilmiştir.

<Venue Name="House of Prime Rib" Type="Restaurant">
  <Files>
    <File path="transactions/12027121.csv" />
    <File path="campaigns/radio-campaign.docx" />
    <File path="photos/bannerphoto.png" />
    <File path="archive/completed/2020review.pdf" />
    <File path="logs/2020/01/01/logfile.txt" />
  </Files>
</Venue>

Örnek kod bir karma tablo oluşturur ve $tags değişkenini ona atar. Ardından ve Get-Data cmdlet'lerini kullanarak Get-Content XML yapısını temel alan bir nesne oluşturur. Ardından, etiket değerleri olarak kullanılacak karma tabloya anahtar-değer çiftleri ekler. Son olarak, XML nesnesi üzerinden yinelenir ve her File düğüm için etiketler oluşturur.

#Set variables
$filePath = "C:\temp\blob-list.xml"
$tags     = @{}

#Get data, set tag key-values
[xml]$data = Get-Content -Path $filepath
$tags.Add("VenueName", $data.Venue.Name)
$tags.Add("VenueType", $data.Venue.Type)
 
#Loop through files and add tag
$data.Venue.Files.ChildNodes | ForEach-Object {
    #break the path: container name, blob
    $path = $_.Path -split "/",2
   
    #set apply the blob tags
    Set-AzStorageBlobTag -Container $location[0] -Blob $location[1] -Tag $tags -Context $ctx
 }

Blob’ları silme

Cmdlet'iyle tek bir blobu veya bir dizi blobu Remove-AzStorageBlob silebilirsiniz. Birden çok blobu silerken, aşağıdaki örneklerde gösterildiği gibi koşullu işlemleri, döngüleri veya PowerShell işlem hattını kullanabilirsiniz.

Uyarı

Aşağıdaki örnekleri çalıştırmak blobları kalıcı olarak silebilir. Microsoft, kapsayıcıları ve blobları yanlışlıkla silinmeye karşı korumak için kapsayıcı geçici silmeyi etkinleştirmenizi önerir. Daha fazla bilgi için bkz . Kapsayıcılar için geçici silme.

#Create variables
$containerName  = "mycontainer"
$blobName       = "demo-file.txt"
$prefixName     = "file"

#Delete a single, named blob
Remove-AzStorageBlob -Blob $blobName -Container $containerName -Context $ctx

#Iterate a loop, deleting blobs
for ($i = 1; $i -le 3; $i++) { 
    Remove-AzStorageBlob -Blob (-join($prefixName, $i, ".txt")) -Container $containerName -Context $ctx
} 

#Retrieve blob list, delete using a pipeline
Get-AzStorageBlob -Prefix $prefixName -Container $containerName -Context $ctx | Remove-AzStorageBlob

Bazı durumlarda silinmiş blobları almak mümkündür. Depolama hesabınızın geçici silme veri koruma seçeneği etkinse, -IncludeDeleted parametre ilişkili saklama süresi içinde silinen blobları döndürür. Geçici silme hakkında daha fazla bilgi edinmek için Bloblar için geçici silme makalesine bakın.

Kapsayıcının ilişkili saklama süresi içinde silinen blobların listesini almak için aşağıdaki örneği kullanın. Sonuç, son silinen blobların listesini görüntüler.

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

AccountName: demostorageaccount, ContainerName: demo-container

Name       BlobType   Length  ContentType                LastModified          AccessTier    IsDeleted
----       --------   ------  -----------                ------------          ----------    ---------
file.txt   BlockBlob  22      application/octet-stream   2021-12-16 20:59:41Z  Cool          True
file2.txt  BlockBlob  22      application/octet-stream   2021-12-17 00:14:24Z  Cool          True
file3.txt  BlockBlob  22      application/octet-stream   2021-12-17 00:14:24Z  Cool          True
file4.txt  BlockBlob  22      application/octet-stream   2021-12-17 00:14:25Z  Cool          True

Silinen blobu geri yükleme

Blobları 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 blobları geri yüklemek mümkündür. Her kurtarma ve geri yükleme için bloblarınızın önceki sürümlerini korumak için sürüm oluşturma özelliğini de kullanabilirsiniz.

Blob sürümü oluşturma ve blob geçici silme etkinse, blobun değiştirilmesi, üzerine yazılması, silinmesi veya geri yüklenmesi otomatik olarak yeni bir sürüm oluşturur. Silinen blobu geri yüklemek için kullandığınız yöntem, depolama hesabınızda sürüm oluşturmanın etkinleştirilip etkinleştirilmediğine bağlıdır.

Aşağıdaki kod örneği, geçici olarak silinen tüm blobları geri yükler veya sürüm oluşturma etkinleştirilirse blobun en son sürümünü geri yükler. İlk olarak, cmdlet ile sürüm oluşturmanın Get-AzStorageBlobServiceProperty etkinleştirilip etkinleştirilmediğini belirler.

Sürüm oluşturma etkinleştirilirse, Get-AzStorageBlob cmdlet benzersiz olarak adlandırılmış tüm blob sürümlerinin listesini alır. Ardından listedeki blob sürümleri tarihe göre alınır ve sıralanır. Öznitelik değerine sahip LatestVersion sürüm bulunamazsa, Copy-AzBlob cmdlet en son sürümün etkin bir kopyasını oluşturmak için kullanılır.

Sürüm oluşturma devre dışı bırakılırsa, kapsayıcıdaki BlobBaseClient.Undelete geçici olarak silinen her blobu geri yüklemek için yöntemi kullanılır.

Bu örneği takip edebilmeniz için önce depolama hesaplarınızdan en az birinde geçici silmeyi veya sürüm oluşturmayı etkinleştirmeniz gerekir.

Önemli

Aşağıdaki örnek, bir grup blobu numaralandırır ve işlemeden önce bunları bellekte depolar. Sürüm oluşturma etkinse bloblar da sıralanır. parametresinin -ContinuationToken değişkenle $maxCount kullanılması, kaynaklardan tasarruf etmek için gruptaki blob sayısını sınırlar. Bir kapsayıcıda milyonlarca blob varsa, bu son derece pahalı olacaktır. Değişkenin $maxCount değerini ayarlayabilirsiniz, ancak bir kapsayıcıda milyonlarca blob varsa betik blobları yavaş işler.

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

$accountName   ="myStorageAccount"
$groupName     ="myResourceGroup"
$containerName ="mycontainer"
$maxCount      = 1000
$token         = $null


$blobSvc = Get-AzStorageBlobServiceProperty `
    -StorageAccountName $accountName `
    -ResourceGroupName $groupName

# If soft delete is enabled
if($blobSvc.DeleteRetentionPolicy.Enabled)
{
    # If versioning is enabled
    if($blobSvc.IsVersioningEnabled -eq $true)
    {
        # Set context
        $ctx = New-AzStorageContext `
            -StorageAccountName $accountName `
            -UseConnectedAccount
        do
        {
            # Get all blobs and versions using -Unique 
            # to avoid processing duplicates/versions
            $blobs = Get-AzStorageBlob `
                -Container $containerName `
                -Context $ctx -IncludeVersion | `
                    Where-Object {$_.VersionId -ne $null} | `
                    Sort-Object -Property Name -Unique

            # Iterate the collection
            foreach ($blob in $blobs)
            {
                # Process versions
                if($blob.VersionId -ne $null)
                {
            
                    # Get all versions of the blob, newest to oldest
                    $delBlob = Get-AzStorageBlob `
                        -Container $containerName `
                        -Context $ctx `
                        -Prefix $blob.Name `
                        -IncludeDeleted -IncludeVersion  | `
                            Sort-Object -Property VersionId -Descending

                    # Verify that the newest version is NOT the latest (that the version is "deleted")
                    if (-Not $delBlob[0].IsLatestVersion)
                    {
                        $delBlob[0] | Copy-AzStorageBlob `
                            -DestContainer $containerName `
                            -DestBlob $delBlob[0].Name
                    }
                
                    #Dispose the temporary object
                    $delBlob = $null
                }
            }
            $token = $blobs[$blobs.Count -1].ContinuationToken;
        }
        while ($null -ne $token)
    }

    # Otherwise (if versioning is disabled)
    else
    {
        $blobs = Get-AzStorageBlob `
            -Container $containerName `
            -Context $ctx -IncludeDeleted | `
                Where-Object {$_.IsDeleted}
        foreach($blob in $blobs)
        {
            if($blob.IsDeleted) { $blob.BlobBaseClient.Undelete() }
        }
    }
}
else
{
    echo "Sorry, the delete retention policy is not enabled."
}

Sonraki adımlar