Mengelola blob blok 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 ditentukan pada operasi baca dan tulis yang acak. Artikel ini menjelaskan cara bekerja menggunakan blokir blob.
Prasyarat
Langganan Azure. Lihat Mendapatkan uji coba gratis Azure.
Modul
Az
Azure PowerShell , yang merupakan modul PowerShell yang direkomendasikan untuk berinteraksi dengan Azure. Untuk mulai menggunakan modul Az PowerShell, lihat Menginstal Azure PowerShell.
Mengonfigurasi objek konteks untuk merangkum info masuk
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 Koneksi-AzAccount.
#Connect to your Azure subscription
Connect-AzAccount
Setelah koneksi tersambung, 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 cmdlet New-AzStorageContext
. 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, Anda perlu mengganti nilai tempat penampung dalam tanda kurung dengan nilai Anda sendiri. Untuk informasi selengkapnya tentang proses masuk ke Azure dengan PowerShell, lihat Masuk dengan Azure PowerShell.
Mengunggah blob
Untuk mengunggah file ke blob blok, berikan nilai parameter yang diperlukan ke cmdlet Set-AzStorageBlobContent
. Berikan jalur dan nama file dengan parameter -File
, dan nama kontainer dengan parameter -Container
. Anda juga perlu memberikan referensi ke objek konteks dengan -Context
parameter .
Perintah ini akan membuat blob jika tidak ada, atau meminta konfirmasi menimpa blob jika sudah ada. Anda bisa menimpa file tanpa konfirmasi jika Anda meneruskan parameter -Force
ke cmdlet.
Contoh berikut ini menentukan nilai parameter -File
untuk mengunggah satu file bernama. Cara ini juga menunjukkan penggunaan operator dan alur PowerShell cmdlet Get-ChildItem
untuk mengunggah beberapa file. Cmdlet Get-ChildItem
menggunakan parameter -Path
untuk menentukan C:\Temp\*.png. Penyertaan kartubebas 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
Cmdlet Get-AzStorageBlob
digunakan untuk mendaftarkan blob yang disimpan dalam kontainer. Anda bisa menggunakan berbagai pendekatan untuk menentukan cakupan pencarian Anda. Gunakan parameter -Container
dan -Name
untuk mendaftarkan blob tertentu dalam kontainer yang diketahui. Untuk membuat daftar semua blob yang tidak difilter dalam kontainer tertentu, gunakan parameter -Container
saja, tanpa nilai -Name
.
Tidak ada batasan jumlah kontainer atau blob yang dapat dimiliki akun penyimpanan. Untuk berpotensi menghindari pengambilan ribuan blob, sebaiknya batasi jumlah data yang dikembalikan. Ketika mengambil beberapa blob, Anda dapat menggunakan parameter -Prefix
untuk menentukan blob yang namanya dimulai dengan untai (karakter) tertentu. Anda juga dapat menggunakan -Name
parameter dengan kartubebas untuk menentukan nama atau jenis file.
Parameter -MaxCount
ini bisa 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 menggunakan beberapa permintaan untuk mengambil nomor blob apa pun. Informasi selengkapnya tersedia di Menghitung sumber daya blob.
Contoh berikut ini memperlihatkan beberapa pendekatan yang digunakan untuk menyediakan daftar blob. Pendekatan pertama mendaftarkan blob tunggal dalam sumber daya kontainer tertentu. Pendekatan kedua menggunakan kartubebas untuk mencantumkan semua .jpg
file dengan awalan Louis. Pencarian terbatas pada lima kontainer menggunakan parameter -MaxCount
. Pendekatan ketiga menggunakan parameter -MaxCount
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 batch, dan bilah status memperlihatkan 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 blob
Tergantung pada kasus penggunaan Anda, cmdlet Get-AzStorageBlobContent
dapat digunakan untuk mengunduh satu atau beberapa blob. Seperti kebanyakan operasi, kedua pendekatan membutuhkan objek konteks.
Untuk mengunduh blob tunggal bernama, 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 dengan 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 alur PowerShell. Pertama, buat daftar blob dengan cmdlet Get-AzStorageBlob
. Berikutnya, gunakan operator alur dan cmdlet Get-AzStorageBlobContent
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, disarankan menggunakan parameter -MaxCount
.
#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 nama akun penyimpanan dan kontainer serta 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 memperlihatkan baik properti sistem dan metadata yang ditentukan pengguna. Properti sistem ada pada setiap sumber daya Blob Storage. Beberapa properti bersifat baca-saja, sementara yang lain bisa dibaca atau diatur. Dibalik itu, beberapa properti sistem memetakan 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 mendapatkan metadata dan properti blob, tetapi tidak dengan kontennya. Berikutnya, gunakan metode BlobClient.GetProperties
untuk mengambil properti blob. Properti atau metadata selanjutnya bisa dibaca atau diatur sebagaimana diperlukan.
Contoh berikut mengambil blob dan mendaftarkan 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 IDictionary
umum. Untuk informasi selengkapnya, lihat definisi kelas BlobClient.
Contoh di bawah pertama-tama mempembarui lalu menerapkan metadata blob, lalu mengambilnya. Sampel blob dibersihkan 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
Terdapat banyak skenario di mana blob dengan jenis yang berbeda dapat disalin. Contoh dalam artikel ini terbatas untuk blob blok.
Menyalin blob sumber ke blob tujuan
Untuk operasi penyalinan sederhana di dalam akun penyimpanan yang sama, gunakan cmdlet Copy-AzStorageBlob
. Karena operasi tersebut menyalin blob dalam akun penyimpanan yang sama, ini adalah operasi sinkron. Operasi lintas akun adalah operasi asinkron.
Anda harus mempertimbangkan penggunaan AzCopy untuk kemudahan dan performa, khususnya 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 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 sudah ada dengan nama yang sama di tujuan. Operasi ini akan menggantikan blob tujuan secara efektif. Operasi ini juga menghapus blok yang tidak diterapkan dan menimpa metadata blob tujuan.
Salin salinan bayangan ke blob tujuan dengan nama yang berbeda
Blob tujuan yang dihasilkan adalah blob yang dapat ditulis dan bukan snapshot.
Blob sumber untuk operasi salinan mungkin adalah blob blok, blob pelengkap, blob halaman, atau snapshot. Jika blob tujuan sudah ada, itu harus berasal dari jenis blob yang sama dengan blob sumber. Blob tujuan yang ada ditimpa.
Blob tujuan tidak dapat dimodifikasi saat operasi salin sedang berlangsung. Blob tujuan hanya dapat memiliki satu operasi salinan yang luar biasa. Dengan kata lain, blob tidak dapat menjadi tujuan untuk beberapa operasi salinan yang tertunda.
Saat Anda menyalin blob dalam akun penyimpanan yang sama, itu adalah operasi sinkron. Operasi penyalinan lintas akun bersifat asinkron.
Keseluruhan blob sumber atau file selalu disalin. Menyalin rentang byte atau set blok tidak didukung.
Saat blob disalin, properti sistemnya disalin ke gumpalan tujuan dengan nilai yang sama.
Ini juga menunjukkan cara membatalkan operasi salinan asinkron.
Mengambil salinan bayangan blob
Salinan bayangan adalah versi baca-saja dari blob yang diambil pada suatu waktu. 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.
Setiap sewa yang terkait dengan blob dasar tidak memengaruhi snapshot. Anda tidak dapat memperoleh sewa pada rekam jepret. Baca selengkapnya tentang Salinan bayangan 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()
Set tingkat blob
Saat mengubah tingkat blob, Anda memindahkan blob tersebut dan semua datanya ke tingkat target. Untuk membuat perubahan, ambil blob dengan Get-AzStorageBlob
cmdlet, dan panggil BlobClient.SetAccessTier
metode . Pendekatan ini dapat digunakan untuk mengubah tingkat antara panas, dingin, dan arsip.
Mengubah tingkatan dari dingin atau panas ke arsip terjadi hampir segera. 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 tingkat online. Baca selengkapnya tentang rehidrasi 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 akan membuat tabel hash dan menetapkan variabel $tags pada tabel hash tersebut. Selanjutnya, kode sampel ini menggunakan cmdlet Get-Content
dan Get-Data
untuk membuat objek berdasarkan struktur XML. Kemudian, tambahkan pasangan nilai-kunci ke tabel hash untuk digunakan sebagai nilai tag. Terakhir, mengiterasi melalui 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 cmdlet Remove-AzStorageBlob
. 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 sementara untuk kontainer.
#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, pengambilan blob yang sudah dihapus dapat dilakukan. Jika opsi perlindungan data penghapusan sementara akun penyimpanan Anda diaktifkan, -IncludeDeleted
parameter mengembalikan blob yang dihapus dalam periode retensi terkait. Untuk mempelajari lebih lanjut tentang penghapusan sementara, lihat artikel Penghapusan sementara untuk blob.
Gunakan contoh berikut untuk mengambil daftar blob yang dihapus dalam periode retensi terkait penampung. 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 Mendaftarkan blob, Anda dapat mengonfigurasi opsi proteksi data penghapusan sementara pada akun penyimpanan Anda. Ketika diaktifkan, blob yang telah dihapus dalam periode retensi terkait dapat dipulihkan. Anda juga dapat menggunakan penerapan versi untuk mempertahankan versi blob sebelumnya untuk setiap pemulihan dan restorasi.
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 tergantung pada apakah penerapan versi diaktifkan di akun penyimpanan Anda.
Sampel kode berikut memulihkan semua blob yang dihapus sementara atau memulihkan versi terbaru blob jika penerapan versi diaktifkan. Ini pertama-tama menentukan apakah penerapan versi diaktifkan dengan cmdlet Get-AzStorageBlobServiceProperty
.
Jika penerapan versi diaktifkan, Get-AzStorageBlob
cmdlet mengambil daftar semua versi blob bernama unik. Selanjutnya, versi blob pada daftar diambil dan diurutkan menurut tanggal. Jika tidak ada versi yang ditemukan dengan nilai atribut LatestVersion
, cmdlet Copy-AzBlob
akan digunakan untuk membuat salinan aktif dari versi terbaru.
Jika penerapan 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 penerapan versi diaktifkan, 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 lebih lanjut tentang opsi proteksi data penghapusan sementara, lihat artikel Penghapusan sementara 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."
}