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
Azure aboneliği. Bkz. Azure ücretsiz deneme sürümü alma.
Azure ile
Az
etkileşime geçiş için önerilen PowerShell modülü olan Azure PowerShell modülü. Az PowerShell modülünü kullanmaya başlamak için Azure PowerShell’i yükleyin.
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
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin