Bagikan melalui


Mengelola blok blob dengan PowerShell

Penyimpanan blob mendukung blob blok, blob penambahan, dan blob halaman. Blob blok dioptimalkan untuk mengunggah data dalam jumlah besar secara efisien. Blok blob sangat cocok untuk menyimpan gambar, dokumen, dan jenis data lain yang tidak digunakan dalam operasi baca dan tulis secara acak. Artikel ini menjelaskan cara bekerja menggunakan blokir blob.

Prasyarat

Mengonfigurasi objek konteks untuk merangkum kredensial

Setiap permintaan ke Azure Storage harus diotorisasi. Anda dapat mengotorisasi permintaan yang dibuat dari PowerShell dengan akun Microsoft Entra Anda atau dengan menggunakan kunci akses akun. Contoh dalam artikel ini menggunakan otorisasi Microsoft Entra dengan objek konteks. Objek konteks merangkum kredensial Microsoft Entra Anda dan meneruskannya selama operasi data berikutnya.

Untuk masuk ke akun Azure Anda dengan akun Microsoft Entra, buka PowerShell dan panggil cmdlet Connect-AzAccount .

#Connect to your Azure subscription
Connect-AzAccount

Setelah koneksi dibuat, buat konteks Azure. Mengautentikasi dengan MICROSOFT Entra ID secara otomatis membuat konteks Azure untuk langganan default Anda. Dalam beberapa kasus, Anda mungkin perlu mengakses sumber daya dalam langganan yang berbeda setelah mengautentikasi. Anda dapat mengubah langganan yang terkait dengan sesi Azure Anda saat ini dengan memodifikasi konteks sesi aktif.

Untuk menggunakan langganan default Anda, buat konteks dengan memanggil New-AzStorageContext cmdlet. Sertakan -UseConnectedAccount parameter sehingga operasi data dilakukan menggunakan kredensial Microsoft Entra Anda.

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

Untuk mengubah langganan, ambil objek konteks dengan cmdlet Get-AzSubscription , lalu ubah konteks saat ini dengan Set-AzContext. Untuk informasi selengkapnya, lihat Mengubah langganan aktif.

Membuat kontainer

Semua data blob disimpan dalam kontainer, jadi Anda memerlukan setidaknya satu sumber daya kontainer sebelum Dapat mengunggah data. Jika diperlukan, gunakan contoh berikut ini untuk membuat kontainer penyimpanan. Untuk informasi selengkapnya, lihat Mengelola kontainer blob menggunakan PowerShell.

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

Saat Anda menggunakan contoh berikut, ganti nilai di dalam tanda kurung dengan nilai Anda sendiri. Untuk informasi selengkapnya tentang masuk ke Azure dengan PowerShell, lihat Masuk dengan Azure PowerShell.

Mengunggah objek data (blob)

Untuk mengunggah file ke blob blok, teruskan nilai parameter yang diperlukan ke Set-AzStorageBlobContent cmdlet. Berikan jalur dan nama file dengan -File parameter , dan nama kontainer dengan -Container parameter . Anda juga perlu memberikan referensi ke objek konteks dengan -Context parameter .

Perintah ini membuat blob jika tidak ada, atau meminta konfirmasi penimpaan jika ada. Anda dapat menimpa file tanpa konfirmasi jika Anda meneruskan -Force parameter ke cmdlet.

Contoh berikut menentukan nilai parameter -File untuk mengunggah satu file tunggal yang diberi nama. Ini juga menunjukkan penggunaan operator alur PowerShell dan Get-ChildItem cmdlet untuk mengunggah beberapa file. Get-ChildItem Cmdlet menggunakan -Path parameter untuk menentukan C:\Temp\*.png. Penyertaan karakter wildcard tanda bintang (*) menentukan semua file dengan ekstensi nama file .png . Parameter -Recurse mencari direktori Temp dan subdirektorinya.

#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

Hasilnya menampilkan nama akun penyimpanan, nama kontainer penyimpanan, dan menyediakan daftar file yang diunggah.

   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

Daftar blob

Get-AzStorageBlob Cmdlet digunakan untuk mencantumkan blob yang disimpan dalam kontainer. Anda dapat menggunakan berbagai pendekatan untuk menentukan cakupan pencarian Anda. -Container Gunakan parameter dan -Name untuk mencantumkan blob tertentu dalam kontainer yang diketahui. Untuk menghasilkan daftar semua blob yang tidak difilter dalam kontainer tertentu, gunakan -Container parameter saja, tanpa -Name nilai.

Tidak ada batasan jumlah kontainer atau blob yang mungkin dimiliki akun penyimpanan. Untuk berpotensi menghindari pengambilan ribuan blob, sebaiknya batasi jumlah data yang dikembalikan. Saat mengambil beberapa blob, Anda dapat menggunakan -Prefix parameter untuk menentukan blob yang namanya dimulai dengan string tertentu. Anda juga dapat menggunakan -Name parameter dengan kartubebas untuk menentukan nama atau jenis file.

Parameter -MaxCount dapat digunakan untuk membatasi jumlah blob yang tidak difilter yang dikembalikan dari kontainer. Batas layanan sebesar 5.000 diberlakukan pada semua sumber daya Azure. Batas ini memastikan bahwa jumlah data yang dapat dikelola diambil dan performa tidak terpengaruh. Jika jumlah blob yang dikembalikan melebihi nilai -MaxCount atau batas layanan, token kelanjutan akan dikembalikan. Token ini memungkinkan Anda untuk membuat beberapa permintaan untuk mengambil sejumlah blob. Informasi selengkapnya tersedia di Menghitung sumber daya blob.

Contoh berikut ini memperlihatkan beberapa pendekatan yang digunakan untuk menyediakan daftar blob. Pendekatan pertama mencantumkan satu blob dalam sumber daya kontainer tertentu. Pendekatan kedua menggunakan wildcard untuk mencantumkan semua .jpg file yang berawalan Louis. Pencarian dibatasi hingga lima kontainer menggunakan -MaxCount parameter . Pendekatan ketiga menggunakan -MaxCount parameter dan -ContinuationToken untuk membatasi pengambilan semua blob dalam kontainer.

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

Dua pendekatan pertama menampilkan akun penyimpanan dan nama kontainer, dan daftar blob yang diambil. Pendekatan ketiga menampilkan jumlah total blob dalam kontainer bernama. Blob diambil dalam kelompok, dan bilah status menunjukkan kemajuan selama penghitungan.

   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.

Mengunduh objek data

Tergantung pada kasus penggunaan Anda, Get-AzStorageBlobContent cmdlet dapat digunakan untuk mengunduh blob tunggal atau beberapa. Seperti kebanyakan operasi, kedua pendekatan memerlukan objek konteks.

Untuk mengunduh blob yang bernama secara tunggal, Anda dapat memanggil cmdlet secara langsung dan menyediakan nilai untuk parameter -Blob dan -Container. Blob diunduh ke direktori PowerShell yang berfungsi secara default, tetapi lokasi alternatif dapat ditentukan. Untuk mengubah lokasi target, jalur yang valid dan sudah ada harus diteruskan melalui parameter -Destination. Karena operasi tidak dapat membuat tujuan, operasi gagal dengan kesalahan jika jalur yang Anda tentukan tidak ada.

Beberapa blob dapat diunduh dengan menggabungkan cmdlet Get-AzStorageBlob dan operator pipeline PowerShell. Pertama, buat daftar blob dengan Get-AzStorageBlob cmdlet. Selanjutnya, gunakan operator pipeline dan perintah Get-AzStorageBlobContent cmdlet untuk mengambil blob dari kontainer.

Contoh kode berikut ini memberikan contoh pendekatan pengunduhan tunggal dan pengunduhan beberapa kali. Alat ini juga menawarkan pendekatan yang lebih sederhana untuk mencari semua kontainer untuk file tertentu menggunakan kartubebas. Karena beberapa lingkungan mungkin memiliki ratusan ribu sumber daya, menggunakan -MaxCount parameter disarankan.

#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

Hasilnya menampilkan akun penyimpanan dan nama kontainer dan menyediakan daftar file yang diunduh.

   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

Mengelola properti blob dan metadata

Kontainer mengekspos properti sistem dan metadata yang ditentukan pengguna. Properti sistem ada pada setiap sumber daya Blob Storage. Beberapa properti hanya dapat dibaca, sementara yang lain bisa dibaca atau diatur. Secara internal, beberapa properti sistem dipetakan ke header HTTP standar tertentu.

Metadata yang ditentukan pengguna terdiri dari satu atau beberapa pasangan nama-nilai yang Anda tentukan untuk sumber daya Blob Storage. Anda dapat menggunakan metadata untuk menyimpan nilai-nilai ini dengan sumber daya. Nilai metadata hanya untuk tujuan Anda sendiri, dan tidak memengaruhi perilaku sumber daya.

Membaca properti blob

Untuk membaca properti blob atau metadata, Anda harus mengambil blob dari layanan terlebih dahulu. Gunakan cmdlet Get-AzStorageBlob untuk mengambil properti dan metadata blob, tetapi bukan kontennya. Selanjutnya, gunakan BlobClient.GetProperties metode untuk mengambil properti blob. Properti atau metadata kemudian dapat dibaca atau diatur sesuai kebutuhan.

Contoh berikut mengambil blob dan menampilkan propertinya.

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

Hasilnya menampilkan daftar properti blob seperti yang ditunjukkan dalam contoh berikut.

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

Membaca dan menulis metadata blob

Metadata blob adalah kumpulan pasangan nama/nilai opsional yang terkait dengan blob. Seperti yang diperlihatkan dalam contoh sebelumnya, pada awalnya tidak ada metadata yang terkait dengan blob, meskipun dapat ditambahkan ketika diperlukan. Untuk memperbarui metadata blob, gunakan BlobClient.UpdateMetadata metode . Metode ini hanya menerima pasangan kunci-nilai yang disimpan dalam objek generik IDictionary . Untuk informasi selengkapnya, lihat definisi kelas BlobClient .

Contoh di bawah pertama-tama mempembarui lalu menerapkan metadata blob, lalu mengambilnya. Blob sampel dihapus dari memori untuk memastikan metadata tidak dibaca dari objek dalam memori.

#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

Hasilnya mengembalikan metadata blob yang baru diperbarui seperti yang ditunjukkan dalam contoh berikut.

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

Operasi penyalinan untuk blob

Ada banyak skenario di mana blob dari berbagai jenis dapat disalin. Contoh dalam artikel ini terbatas pada blob blokir.

Menyalin blob sumber ke blob tujuan

Untuk operasi penyalinan yang disederhanakan dalam akun penyimpanan yang sama, gunakan Copy-AzStorageBlob cmdlet . Karena operasi menyalin blob dalam akun penyimpanan yang sama, ini adalah operasi sinkron. Operasi lintas akun bersifat asinkron.

Anda harus mempertimbangkan penggunaan AzCopy untuk kemudahan dan performa, terutama saat menyalin blob antar akun penyimpanan. AzCopy adalah utilitas baris perintah yang dapat Anda gunakan untuk menyalin gumpalan atau file ke atau dari akun penyimpanan. Cari tahu selengkapnya tentang cara Mulai menggunakan AzCopy.

Contoh di bawah ini menyalin blob bannerphoto.png dari kontainer foto ke folder foto dalam kontainer arsip . Kedua kontainer berada dalam akun penyimpanan yang sama. Hasil tersebut memverifikasi keberhasilan operasi penyalinan.

$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

Anda dapat menggunakan parameter -Force untuk menimpa blob yang ada dengan nama yang sama di lokasi tujuan. Operasi ini secara efektif menggantikan blob tujuan. Ini juga menghapus blok yang belum dikomit dan menimpa metadata blob tujuan.

Menyalin rekam jepret ke blob tujuan dengan nama yang berbeda

Blob tujuan yang dihasilkan adalah blob yang dapat ditulis dan bukan snapshot.

Blob sumber untuk operasi salin mungkin berupa blob blok, blob penambahan, blob halaman, atau rekam jepret. Jika blob tujuan sudah ada, blob harus dari jenis blob yang sama dengan blob sumber. Blob tujuan yang sudah ada akan ditimpa.

Blob tujuan tidak dapat dimodifikasi saat operasi penyalinan sedang berlangsung. Blob tujuan hanya dapat memiliki satu operasi penyalinan yang luar biasa. Dengan kata lain, blob tidak dapat menjadi tujuan untuk beberapa operasi penyalinan yang tertunda.

Saat Anda menyalin blob dalam akun penyimpanan yang sama, ini adalah operasi sinkron. Operasi penyalinan lintas akun bersifat asinkron.

Seluruh blob sumber atau file selalu disalin. Menyalin rentang byte maupun kumpulan blok tidak didukung.

Ketika blob disalin, properti sistemnya disalin ke blob tujuan dengan nilai yang sama.

Ini juga menunjukkan cara membatalkan operasi penyalinan asinkron.

Mengambil salinan bayangan blob

Cuplikan adalah versi hanya-baca dari blob yang diambil pada titik waktu tertentu. Rekam jepret blob identik dengan blob dasarnya, kecuali bahwa nilai DateTime ditambahkan ke URI. Nilai ini menunjukkan waktu pengambilan rekam jepret, dan menawarkan satu-satunya perbedaan antara blob dasar dan rekam jepret.

Penyewaan yang terkait dengan blob dasar tidak memengaruhi snapshot. Anda tidak dapat menyewa sebuah foto. Baca lebih lanjut tentang cuplikan Blob.

Sampel kode berikut mengambil blob dari kontainer penyimpanan dan membuat salinan bayangannya.

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

Atur tingkat blob

Saat mengubah tingkat blob, Anda memindahkan blob tersebut dan semua datanya ke tingkat target. Untuk membuat perubahan, ambil blob dengan cmdlet Get-AzStorageBlob, dan panggil metode BlobClient.SetAccessTier. Pendekatan ini dapat digunakan untuk mengubah tingkat antara panas, dingin, dan arsip.

Mengubah tingkatan dari dingin atau panas ke arsip terjadi hampir seketika. Setelah blob dipindahkan ke tingkat arsip , blob dianggap offline, dan tidak dapat dibaca atau dimodifikasi. Sebelum Anda dapat membaca atau memodifikasi data blob yang diarsipkan, Anda perlu merehidrasinya ke lapisan online. Baca selengkapnya tentang penghidratan ulang Blob dari tingkat arsip.

Kode sampel berikut mengatur tingkat ke panas untuk semua blob dalam archive kontainer.

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

Operasi menggunakan tag blob

Tag indeks blob memudahkan penemuan dan pengelolaan data. Tag indeks blob adalah atribut indeks nilai kunci yang ditentukan pengguna yang dapat Anda terapkan ke blob. Setelah dikonfigurasi, Anda dapat mengkategorikan dan menemukan objek dalam kontainer individual atau seluruh kontainer. Sumber daya blob dapat dikategorikan secara dinamis dengan memperbarui tag indeksnya tanpa memerlukan perubahan dalam organisasi kontainer. Tag indeks menawarkan cara yang fleksibel untuk mengatasi perubahan persyaratan data. Anda bisa menggunakan metadata dan tag indeks secara bersamaan. Untuk informasi selengkapnya tentang tag index, lihat Mengelola dan menemukan data Azure Blob dengan tag indeks blob.

Contoh berikut ini menggambarkan cara menambahkan tag indeks blob ke serangkaian blob. Contoh tersebut membaca data dari file XML dan menggunakannya untuk membuat tag indeks di beberapa blob. Untuk menggunakan kode sampel, buat file lokal blob-list.xml di direktori C:\temp. Data XML disediakan dalam contoh berikut.

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

Kode sampel membuat tabel hash dan menetapkan variabel $tags ke dalamnya. Selanjutnya, menggunakan Get-Content cmdlet dan Get-Data untuk membuat objek berdasarkan struktur XML. Kemudian menambahkan pasangan kunci-nilai ke tabel hash untuk digunakan sebagai nilai tag. Terakhir, melakukan iterasi pada objek XML dan membuat tag untuk setiap node File.

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

Hapus blob

Anda dapat menghapus satu blob atau serangkaian blob dengan Remove-AzStorageBlob cmdlet. Saat menghapus beberapa blob, Anda dapat menggunakan operasi bersyarat, perulangan, atau alur PowerShell seperti yang ditunjukkan dalam contoh berikut.

Peringatan

Menjalankan contoh berikut dapat menghapus blob secara permanen. Microsoft merekomendasikan Anda mengaktifkan penghapusan sementara kontainer untuk melindungi kontainer dan blob dari penghapusan yang tidak disengaja. Untuk informasi selengkapnya, lihat Penghapusan lembut untuk wadah.

#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

Dalam beberapa kasus, blob yang sudah dihapus dapat diambil kembali. Jika opsi perlindungan data penghapusan lunak pada akun penyimpanan Anda diaktifkan, parameter -IncludeDeleted akan mengembalikan blob yang dihapus dalam periode retensi terkait. Untuk mempelajari selengkapnya tentang soft delete, lihat artikel Soft delete untuk blob.

Gunakan contoh berikut untuk mengambil daftar blob yang dihapus dalam periode retensi yang terkait dengan kontainer. Hasilnya menampilkan daftar blob yang baru dihapus.

#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

Memulihkan blob yang dihapus

Seperti yang telah disebutkan di Daftar blob, Anda dapat mengonfigurasi opsi proteksi data hapus lembut pada akun penyimpanan Anda. Saat diaktifkan, dimungkinkan untuk memulihkan blob yang dihapus dalam periode retensi terkait. Anda juga dapat menggunakan sistem versisasi untuk mempertahankan versi blob sebelumnya untuk setiap pemulihan.

Jika penerapan versi blob dan penghapusan sementara blob diaktifkan, maka memodifikasi, menimpa, menghapus, atau memulihkan blob akan secara otomatis membuat versi yang baru. Metode yang Anda gunakan untuk memulihkan blob yang dihapus bergantung pada apakah pengelolaan versi diaktifkan di akun penyimpanan Anda.

Sampel kode berikut memulihkan semua blob yang dihapus sementara, atau memulihkan versi terbaru dari suatu blob jika fitur versi diaktifkan. Ini pertama-tama menentukan apakah pengelolaan versi diaktifkan menggunakan cmdlet Get-AzStorageBlobServiceProperty.

Jika versi diaktifkan, Get-AzStorageBlob cmdlet menampilkan daftar semua versi blob yang diberi nama secara unik. Selanjutnya, versi blob yang ada dalam daftar diambil dan diurutkan menurut tanggal. Jika tidak ada versi yang ditemukan dengan LatestVersion nilai atribut, Copy-AzBlob cmdlet digunakan untuk membuat salinan aktif dari versi terbaru.

Jika versi dinonaktifkan, metode BlobBaseClient.Undelete digunakan untuk memulihkan setiap blob yang dihapus sementara dalam kontainer.

Sebelum dapat mengikuti contoh ini, Anda perlu mengaktifkan penghapusan sementara atau penerapan versi pada setidaknya salah satu akun penyimpanan Anda.

Penting

Contoh berikut menghitung sekelompok blob dan menyimpannya dalam memori sebelum memprosesnya. Jika pengelolaan versi diaktifkan, file blob juga diurutkan. Penggunaan -ContinuationToken parameter dengan $maxCount variabel membatasi jumlah blob dalam grup untuk menghemat sumber daya. Jika kontainer memiliki jutaan blob, ini akan sangat mahal. Anda dapat menyesuaikan nilai $maxCount variabel, meskipun jika kontainer memiliki jutaan blob, skrip akan memproses blob secara perlahan.

Untuk mempelajari selengkapnya tentang opsi perlindungan data penghapusan lunak, lihat artikel Penghapusan lunak untuk blob.

$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."
}

Langkah berikutnya