Aracılığıyla paylaş


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.

Önkoşullar

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

Azure Depolama'ya 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 Connect-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 New-AzStorageContext cmdlet'ini çağırarak bağlamı 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.

Bir blob yükleyin

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

Bu komut, blob mevcut değilse onu oluşturur; mevcutsa, üzerine yazma onayı ister. -Force parametresini cmdlet'e geçirirseniz, onay almadan 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. cmdlet'i Get-ChildItemC:\Temp\*.pngbelirtmek 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 belirli bir blobu listelemek için -Container ve -Name parametrelerini 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 amacıyla, geri dönen veri miktarını sınırlamak iyi bir yaklaşımdır. 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, -MaxCount parametresi aracılığıyla beş kapsayıcıyla sınırlıdır. Üçüncü yaklaşım, kapsayıcı içindeki tüm blobların alınmasını sınırlamak için -MaxCount ve -ContinuationToken parametrelerini kullanır.

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

Bir blob indir

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 -Blob ile -Container parametreleri için 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, -Destination parametresiyle geçerli ve mevcut bir yol belirtilmelidir. İşlem bir hedef oluşturamadığından, belirtilen yolunuz yoksa hatayla başarısız olur.

Get-AzStorageBlob cmdlet ve PowerShell işlem hattı işleci birleştirilerek 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ı operatörünü 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. Sistem özellikleri her Blob Depolama kaynağında bulunur. Bazı özellikler salt okunabilirken, 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. BlobClient.GetProperties yöntemini kullanarak blob özelliklerini alı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ünceller, ardından kaydeder ve sonra 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 eşzamansızdır.

Ö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, blobları veya dosyaları depolama hesabına veya depolama hesabından kopyalamak için kullanabileceğiniz bir komut satırı yardımcı programıdır. AzCopy'yi kullanmaya başlama hakkında daha fazla bilgi edinin.

Aşağıdaki örnek ,bannerphoto.png blobunu fotoğraflar kapsayıcısından arşiv kapsayıcısı içindeki fotoğraflar klasörüne kopyalar. 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

-Force parametresini, hedefte aynı ada sahip var olan bir blobun üzerine yazmak için kullanabilirsiniz. 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 tamamlanmamış 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 senkron bir işlemdir. Çapraz hesap kopyalama işlemleri eş zamansızdır.

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 sonlandırılacağı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 olan herhangi bir kira, anlık görüntüyü etkilemez. Bir anlık görüntü için kira sözleşmesi yapamazsı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 Get-AzStorageBlob cmdlet'i ile bir blob alın ve BlobClient.SetAccessTier yöntemini çağırın. Bu yaklaşım sık erişimli, seyrek erişimli ve arşiv katmanını değiştirmek için kullanılabilir.

Soğuk veya Sıcak katmanlardan arşiv katmanına değişim neredeyse anında 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ş bir blob'un verilerini okuyabilmeniz veya değiştirebilmeniz için önce onu çevrimiçi bir katmana yeniden etkinleştirmeniz gerekir. Arşiv katmanından Blob yeniden etkinleştirme hakkında daha fazla bilgi edinin.

Aşağıdaki örnek kod, archive kapsayıcısındaki tüm bloblar için katmanı sıcak 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, Get-Content ve Get-Data cmdlet'lerini kullanarak 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 ile 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 Kapsayıcılar için geçici silme bölümüne bkz.

#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. Yumuşak silme hakkında daha fazla bilgi edinmek için Bloblar için Yumuşak 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, bir 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 geçici olarak silinen her blobu geri yüklemek için BlobBaseClient.Undelete 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ümleme 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.

Yumuşak silme veri koruma seçeneği hakkında daha fazla bilgi edinmek için Bloblar için yumuşak 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