Zarządzanie blokowymi obiektami blob za pomocą programu PowerShell
Usługa Blob Storage obsługuje blokowe, uzupełnialne i stronicowe obiekty blob. Blokowe obiekty blob są zoptymalizowane pod kątem wydajnego przekazywania dużych ilości danych. Blokowe obiekty blob są idealne do przechowywania obrazów, dokumentów i innych typów danych, które nie podlegają losowym operacjom odczytu i zapisu. W tym artykule wyjaśniono, jak pracować z blokowymi obiektami blob.
Wymagania wstępne
Subskrypcja platformy Azure. Zobacz Uzyskiwanie bezpłatnej wersji próbnej platformy Azure.
Moduł
Az
Azure PowerShell , który jest zalecanym modułem programu PowerShell do interakcji z platformą Azure. Aby rozpocząć pracę z modułem Azure PowerShell, zobacz Instalowanie programu Azure PowerShell.
Konfigurowanie obiektu kontekstu w celu hermetyzacji poświadczeń
Każde żądanie do usługi Azure Storage musi być autoryzowane. Możesz autoryzować żądanie wykonane z programu PowerShell przy użyciu konta Microsoft Entra lub przy użyciu kluczy dostępu do konta. W przykładach w tym artykule użyto autoryzacji entra firmy Microsoft z obiektami kontekstu. Obiekty kontekstowe hermetyzują poświadczenia firmy Microsoft Entra i przekazują je podczas kolejnych operacji danych.
Aby zalogować się do konta platformy Azure przy użyciu konta Microsoft Entra, otwórz program PowerShell i wywołaj polecenie cmdlet Połączenie-AzAccount.
#Connect to your Azure subscription
Connect-AzAccount
Po nawiązaniu połączenia utwórz kontekst platformy Azure. Uwierzytelnianie przy użyciu identyfikatora Entra firmy Microsoft automatycznie tworzy kontekst platformy Azure dla subskrypcji domyślnej. W niektórych przypadkach może być konieczne uzyskanie dostępu do zasobów w innej subskrypcji po uwierzytelnieniu. Subskrypcję skojarzona z bieżącą sesją platformy Azure można zmienić, modyfikując aktywny kontekst sesji.
Aby użyć domyślnej subskrypcji, utwórz kontekst, wywołując New-AzStorageContext
polecenie cmdlet . Uwzględnij parametr , -UseConnectedAccount
aby operacje na danych były wykonywane przy użyciu poświadczeń firmy Microsoft Entra.
#Create a context object using Azure AD credentials
$ctx = New-AzStorageContext -StorageAccountName <storage account name> -UseConnectedAccount
Aby zmienić subskrypcje, pobierz obiekt kontekstu za pomocą polecenia cmdlet Get-AzSubscription , a następnie zmień bieżący kontekst na Set-AzContext. Aby uzyskać więcej informacji, zobacz Zmienianie aktywnej subskrypcji.
Tworzenie kontenera
Wszystkie dane obiektów blob są przechowywane w kontenerach, więc przed przekazaniem danych potrzebne są co najmniej jeden zasób kontenera. W razie potrzeby użyj poniższego przykładu, aby utworzyć kontener magazynu. Aby uzyskać więcej informacji, zobacz Zarządzanie kontenerami obiektów blob przy użyciu programu PowerShell.
#Create a container object
$container = New-AzStorageContainer -Name "mycontainer" -Context $ctx
W przypadku użycia poniższych przykładów należy zastąpić wartości symboli zastępczych w nawiasach własnymi wartościami. Aby uzyskać więcej informacji na temat logowania się do platformy Azure przy użyciu programu PowerShell, zobacz Logowanie się przy użyciu programu Azure PowerShell.
Przekazywanie obiektu blob
Aby przekazać plik do blokowego obiektu blob, przekaż wymagane wartości parametrów Set-AzStorageBlobContent
do polecenia cmdlet. Podaj ścieżkę i nazwę pliku z parametrem -File
oraz nazwę kontenera z parametrem -Container
. Należy również podać odwołanie do obiektu kontekstu za pomocą parametru -Context
.
To polecenie tworzy obiekt blob, jeśli nie istnieje, lub monituje o potwierdzenie zastąpienia, jeśli istnieje. Możesz zastąpić plik bez potwierdzenia, jeśli przekażesz -Force
parametr do polecenia cmdlet.
W poniższym przykładzie określono wartość parametru -File
w celu przekazania pojedynczego, nazwanego pliku. Demonstruje również użycie operatora potoku programu PowerShell i Get-ChildItem
polecenia cmdlet do przekazania wielu plików. Polecenie Get-ChildItem
cmdlet używa parametru -Path
do określenia C:\Temp\*.png. Dołączenie gwiazdki (*
) wieloznacznych określa wszystkie pliki z rozszerzeniem pliku PNG . Parametr -Recurse
przeszukuje katalog Tymczasowy i jego podkatalogi.
#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
W wyniku zostanie wyświetlona nazwa konta magazynu, nazwa kontenera magazynu i zostanie wyświetlona lista przekazanych plików.
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
Wyświetlanie listy obiektów blob
Polecenie Get-AzStorageBlob
cmdlet służy do wyświetlania listy obiektów blob przechowywanych w kontenerze. Możesz użyć różnych podejść do zdefiniowania zakresu wyszukiwania. Użyj parametru -Container
i -Name
, aby wyświetlić listę określonego obiektu blob w znanym kontenerze. Aby wygenerować niefiltrowaną listę wszystkich obiektów blob w określonym kontenerze, użyj samego parametru -Container
bez -Name
wartości.
Nie ma żadnych ograniczeń dotyczących liczby kontenerów lub obiektów blob, które może mieć konto magazynu. Aby potencjalnie uniknąć pobierania tysięcy obiektów blob, warto ograniczyć ilość zwracanych danych. Podczas pobierania wielu obiektów blob można użyć parametru -Prefix
, aby określić obiekty blob, których nazwy zaczynają się od określonego ciągu. Można również użyć parametru -Name
z symbolem wieloznacznymi, aby określić nazwy plików lub typy.
Parametr -MaxCount
może służyć do ograniczania liczby niefiltrowanych obiektów blob zwracanych z kontenera. Limit usługi 5000 jest nakładany na wszystkie zasoby platformy Azure. Ten limit gwarantuje, że możliwe do zarządzania ilości danych są pobierane, a wydajność nie ma wpływu. Jeśli liczba zwracanych obiektów blob przekracza -MaxCount
wartość lub limit usługi, zwracany jest token kontynuacji. Ten token umożliwia pobranie dowolnej liczby obiektów blob przy użyciu wielu żądań. Więcej informacji można znaleźć w temacie Wyliczanie zasobów obiektów blob.
W poniższym przykładzie przedstawiono kilka podejść używanych do udostępniania listy obiektów blob. Pierwsze podejście zawiera listę pojedynczego obiektu blob w ramach określonego zasobu kontenera. Drugie podejście używa symbolu wieloznakowego, aby wyświetlić listę wszystkich .jpg
plików z prefiksem Louis. Wyszukiwanie jest ograniczone do pięciu kontenerów przy użyciu parametru -MaxCount
. Trzecie podejście używa -MaxCount
parametrów i -ContinuationToken
w celu ograniczenia pobierania wszystkich obiektów blob w kontenerze.
#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."
Pierwsze dwa podejścia zawierają nazwy konta magazynu i kontenera oraz listę pobranych obiektów blob. Trzecie podejście wyświetla łączną liczbę obiektów blob w nazwanym kontenerze. Obiekty blob są pobierane w partiach, a pasek stanu pokazuje postęp podczas liczby.
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.
Pobieranie obiektu blob
W zależności od przypadku Get-AzStorageBlobContent
użycia polecenie cmdlet może służyć do pobierania pojedynczych lub wielu obiektów blob. Podobnie jak w przypadku większości operacji, obie metody wymagają obiektu kontekstu.
Aby pobrać pojedynczy nazwany obiekt blob, możesz wywołać polecenie cmdlet bezpośrednio i podać wartości parametrów -Blob
i -Container
. Obiekt blob jest domyślnie pobierany do roboczego katalogu programu PowerShell, ale można określić alternatywną lokalizację. Aby zmienić lokalizację docelową, należy przekazać prawidłową istniejącą ścieżkę z parametrem -Destination
. Ponieważ operacja nie może utworzyć miejsca docelowego, kończy się niepowodzeniem z powodu błędu, jeśli określona ścieżka nie istnieje.
Wiele obiektów blob można pobrać, łącząc Get-AzStorageBlob
polecenie cmdlet i operator potoku programu PowerShell. Najpierw utwórz listę obiektów blob za Get-AzStorageBlob
pomocą polecenia cmdlet . Następnie użyj operatora potoku i Get-AzStorageBlobContent
polecenia cmdlet, aby pobrać obiekty blob z kontenera.
Poniższy przykładowy kod zawiera przykład podejścia zarówno do pojedynczego, jak i wielokrotnego pobierania. Oferuje również uproszczone podejście do wyszukiwania wszystkich kontenerów dla określonych plików przy użyciu symbolu wieloznakowego. Ponieważ niektóre środowiska mogą mieć setki tysięcy zasobów, zaleca się użycie parametru -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
W wyniku zostaną wyświetlone nazwy konta magazynu i kontenera oraz lista pobranych plików.
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
Zarządzanie właściwościami i metadanymi obiektów blob
Kontener uwidacznia zarówno właściwości systemu, jak i metadane zdefiniowane przez użytkownika. Właściwości systemu istnieją w każdym zasobie usługi Blob Storage. Niektóre właściwości są tylko do odczytu, podczas gdy inne mogą być odczytywane lub ustawiane. Pod osłonami niektóre właściwości systemu są mapowanie na niektóre standardowe nagłówki HTTP.
Metadane zdefiniowane przez użytkownika składają się z co najmniej jednej pary nazwa-wartość określonej dla zasobu usługi Blob Storage. Za pomocą metadanych można przechowywać te wartości za pomocą zasobu. Wartości metadanych są przeznaczone tylko do własnych celów i nie mają wpływu na zachowanie zasobu.
Odczytywanie właściwości obiektu blob
Aby odczytać właściwości obiektu blob lub metadane, musisz najpierw pobrać obiekt blob z usługi. Get-AzStorageBlob
Użyj polecenia cmdlet , aby pobrać właściwości i metadane obiektu blob, ale nie jego zawartość. Następnie użyj BlobClient.GetProperties
metody , aby pobrać właściwości obiektu blob. Właściwości lub metadane można następnie odczytywać lub ustawiać zgodnie z potrzebami.
Poniższy przykład pobiera obiekt blob i wyświetla jego właściwości.
$blob = Get-AzStorageBlob -Blob "blue-moon.mp3" -Container "mycontainer" -Context $ctx
$properties = $blob.BlobClient.GetProperties()
Echo $properties.Value
W wyniku zostanie wyświetlona lista właściwości obiektu blob, jak pokazano w poniższym przykładzie.
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
Odczytywanie i zapisywanie metadanych obiektu blob
Metadane obiektu blob to opcjonalny zestaw par nazw/wartości skojarzonych z obiektem blob. Jak pokazano w poprzednim przykładzie, początkowo nie ma żadnych metadanych skojarzonych z obiektem blob, ale można go dodać w razie potrzeby. Aby zaktualizować metadane obiektu blob, użyj BlobClient.UpdateMetadata
metody . Ta metoda akceptuje tylko pary klucz-wartość przechowywane w obiekcie ogólnym IDictionary
. Aby uzyskać więcej informacji, zobacz definicję klasy BlobClient .
Poniższy przykład najpierw aktualizuje, a następnie zatwierdza metadane obiektu blob, a następnie pobiera je. Przykładowy obiekt blob jest opróżniany z pamięci, aby upewnić się, że metadane nie są odczytywane z obiektu w pamięci.
#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
Wynik zwraca nowo zaktualizowane metadane obiektu blob, jak pokazano w poniższym przykładzie.
Key Value
--- -----
YearWritten 1934
YearRecorded 1958
Composer Richard Rogers
Lyricist Lorenz Hart
Artist Tony Bennett
Operacje kopiowania dla obiektów blob
Istnieje wiele scenariuszy, w których można skopiować obiekty blob różnych typów. Przykłady w tym artykule są ograniczone do blokowych obiektów blob.
Kopiowanie źródłowego obiektu blob do docelowego obiektu blob
Aby uzyskać uproszczoną operację kopiowania na tym samym koncie magazynu, użyj Copy-AzStorageBlob
polecenia cmdlet . Ponieważ operacja kopiuje obiekt blob na tym samym koncie magazynu, jest to operacja synchroniczna. Operacje między kontami są asynchroniczne.
Należy rozważyć użycie narzędzia AzCopy w celu ułatwienia i wydajności, zwłaszcza podczas kopiowania obiektów blob między kontami magazynu. AzCopy to narzędzie wiersza polecenia, przy użyciu którego można kopiować obiekty blob lub pliki do lub z konta magazynu. Dowiedz się więcej na temat rozpoczynania pracy z narzędziem AzCopy.
Poniższy przykład kopiuje obiekt blob bannerphoto.png z kontenera photos do folderu photos w kontenerze archiwum . Oba kontenery istnieją na tym samym koncie magazynu. Wynik weryfikuje powodzenie operacji kopiowania.
$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
Możesz użyć parametru -Force
, aby zastąpić istniejący obiekt blob o tej samej nazwie w miejscu docelowym. Ta operacja skutecznie zastępuje docelowy obiekt blob. Usuwa również wszystkie niezatwierdzone bloki i zastępuje metadane docelowego obiektu blob.
Kopiowanie migawki do docelowego obiektu blob o innej nazwie
Wynikowy docelowy obiekt blob jest zapisywalnym obiektem blob, a nie migawką.
Źródłowy obiekt blob operacji kopiowania może być blokowym obiektem blob, uzupełnianym obiektem blob, stronicowym obiektem blob lub migawką. Jeśli docelowy obiekt blob już istnieje, musi mieć ten sam typ obiektu blob co źródłowy obiekt blob. Istniejący docelowy obiekt blob jest zastępowany.
Nie można zmodyfikować docelowego obiektu blob, gdy trwa operacja kopiowania. Docelowy obiekt blob może mieć tylko jedną zaległą operację kopiowania. Innymi słowy, obiekt blob nie może być miejscem docelowym dla wielu oczekujących operacji kopiowania.
Podczas kopiowania obiektu blob na tym samym koncie magazynu jest to operacja synchroniczna. Operacje kopiowania między kontami są asynchroniczne.
Cały źródłowy obiekt blob lub plik jest zawsze kopiowany. Kopiowanie zakresu bajtów lub zestawu bloków nie jest obsługiwane.
Po skopiowaniu obiektu blob jego właściwości systemowe są kopiowane do docelowego obiektu blob z tymi samymi wartościami.
Pokazano również, jak przerwać operację kopiowania asynchronicznego.
Migawki obiektów blob
Migawka to wersja obiektu blob tylko do odczytu wykonywana w danym momencie. Migawka obiektu blob jest identyczna z podstawowym obiektem blob, z tą różnicą, że wartość DateTime jest dołączana do identyfikatora URI. Ta wartość wskazuje czas, w którym migawka została wykonana, i oferuje jedyne rozróżnienie między podstawowym obiektem blob a migawką.
Wszystkie dzierżawy skojarzone z podstawowym obiektem blob nie mają wpływu na migawkę. Nie można uzyskać dzierżawy migawki. Przeczytaj więcej na temat migawek obiektów blob.
Poniższy przykładowy kod pobiera obiekt blob z kontenera magazynu i tworzy jego migawkę.
$blob = Get-AzStorageBlob -Container "manuscripts" -Blob "novels/fast-cars.docx" -Context $ctx
$blob.BlobClient.CreateSnapshot()
Ustawianie warstwy obiektu blob
Podczas zmiany warstwy obiektu blob przenosisz obiekt blob i wszystkie jego dane do warstwy docelowej. Aby wprowadzić zmianę, pobierz obiekt blob za pomocą Get-AzStorageBlob
polecenia cmdlet i wywołaj metodę BlobClient.SetAccessTier
. Tego podejścia można użyć do zmiany warstwy między gorącą, chłodną i archiwum.
Zmiana warstw z chłodnej lub gorącej na archiwum odbywa się niemal natychmiast. Po przeniesieniu obiektu blob do warstwy Archiwum jest uważany za offline i nie można go odczytać ani zmodyfikować. Zanim będzie można odczytać lub zmodyfikować zarchiwizowane dane obiektu blob, należy przywrócić je do warstwy online. Przeczytaj więcej na temat ponownego wypełniania obiektów blob z warstwy Archiwum.
Poniższy przykładowy kod ustawia warstwę na gorącą dla wszystkich obiektów blob w kontenerze archive
.
$blobs = Get-AzStorageBlob -Container archive -Context $ctx
Foreach($blob in $blobs) {
$blob.BlobClient.SetAccessTier("Hot")
}
Operacje przy użyciu tagów obiektów blob
Tagi indeksu obiektów blob ułatwiają zarządzanie danymi i odnajdywanie. Tagi indeksu obiektów blob to atrybuty indeksu klucz-wartość zdefiniowane przez użytkownika, które można zastosować do obiektów blob. Po skonfigurowaniu można kategoryzować i znajdować obiekty w pojedynczym kontenerze lub we wszystkich kontenerach. Zasoby obiektów blob można dynamicznie kategoryzować, aktualizując tagi indeksów bez konieczności zmiany organizacji kontenerów. Tagi indeksów oferują elastyczny sposób radzenia sobie ze zmieniającymi się wymaganiami dotyczącymi danych. Jednocześnie można używać tagów metadanych i indeksów. Aby uzyskać więcej informacji na temat tagów indeksu, zobacz Zarządzanie danymi obiektów blob platformy Azure i znajdowanie ich za pomocą tagów indeksu obiektów blob.
Poniższy przykład ilustruje sposób dodawania tagów indeksu obiektów blob do serii obiektów blob. Przykład odczytuje dane z pliku XML i używa go do tworzenia tagów indeksu w kilku obiektach blob. Aby użyć przykładowego kodu, utwórz lokalny plik blob-list.xml w katalogu C:\temp . Dane XML są udostępniane w poniższym przykładzie.
<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>
Przykładowy kod tworzy tabelę skrótów i przypisuje do niej zmienną $tags . Następnie użyje poleceń Get-Content
cmdlet i Get-Data
do utworzenia obiektu na podstawie struktury XML. Następnie dodaje pary klucz-wartość do tabeli skrótów, które mają być używane jako wartości tagów. Na koniec iteruje za pośrednictwem obiektu XML i tworzy tagi dla każdego File
węzła.
#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
}
Usuwać obiekty blob
Za pomocą polecenia cmdlet można usunąć pojedynczy obiekt blob lub serię Remove-AzStorageBlob
obiektów blob. Podczas usuwania wielu obiektów blob można użyć operacji warunkowych, pętli lub potoku programu PowerShell, jak pokazano w poniższych przykładach.
Ostrzeżenie
Uruchomienie poniższych przykładów może trwale usunąć obiekty blob. Firma Microsoft zaleca włączenie usuwania nietrwałego kontenera w celu ochrony kontenerów i obiektów blob przed przypadkowym usunięciem. Aby uzyskać więcej informacji, zobacz Usuwanie nietrwałe dla kontenerów.
#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
W niektórych przypadkach można pobrać obiekty blob, które zostały usunięte. Jeśli opcja ochrony danych usuwania nietrwałego konta magazynu jest włączona, -IncludeDeleted
parametr zwraca obiekty blob usunięte w skojarzonym okresie przechowywania. Aby dowiedzieć się więcej na temat usuwania nietrwałego, zapoznaj się z artykułem Usuwanie nietrwałe dla obiektów blob.
Skorzystaj z poniższego przykładu, aby pobrać listę obiektów blob usuniętych w skojarzonym okresie przechowywania kontenera. W wyniku zostanie wyświetlona lista ostatnio usuniętych obiektów blob.
#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
Przywracanie usuniętego obiektu blob
Jak wspomniano w sekcji Lista obiektów blob , możesz skonfigurować opcję ochrony danych usuwania nietrwałego na koncie magazynu. Po włączeniu można przywrócić obiekty blob usunięte w skojarzonym okresie przechowywania. Możesz również użyć przechowywania wersji do obsługi poprzednich wersji obiektów blob dla każdego odzyskiwania i przywracania.
Jeśli obsługa wersji obiektów blob i usuwanie nietrwałe obiektów blob są włączone, modyfikowanie, zastępowanie, usuwanie lub przywracanie obiektu blob automatycznie tworzy nową wersję. Metoda używana do przywracania usuniętego obiektu blob zależy od tego, czy obsługa wersji jest włączona na koncie magazynu.
Poniższy przykładowy kod przywraca wszystkie nietrwałe obiekty blob lub, jeśli włączono przechowywanie wersji, przywraca najnowszą wersję obiektu blob. Najpierw określa, czy obsługa wersji jest włączona za pomocą Get-AzStorageBlobServiceProperty
polecenia cmdlet .
Jeśli obsługa wersji jest włączona, Get-AzStorageBlob
polecenie cmdlet pobiera listę wszystkich unikatowo nazwanych wersji obiektów blob. Następnie wersje obiektów blob na liście są pobierane i uporządkowane według daty. Jeśli nie znaleziono wersji z wartością atrybutu LatestVersion
, Copy-AzBlob
polecenie cmdlet służy do tworzenia aktywnej kopii najnowszej wersji.
Jeśli przechowywanie wersji jest wyłączone, BlobBaseClient.Undelete
metoda służy do przywracania każdego obiektu blob usuniętego nietrwale w kontenerze.
Zanim będzie można skorzystać z tego przykładu, musisz włączyć usuwanie nietrwałe lub przechowywanie wersji na co najmniej jednym z kont magazynu.
Ważne
Poniższy przykład wylicza grupę obiektów blob i przechowuje je w pamięci przed ich przetworzeniem. Jeśli obsługa wersji jest włączona, obiekty blob są również sortowane. Użycie parametru -ContinuationToken
ze zmienną $maxCount
ogranicza liczbę obiektów blob w grupie w celu zaoszczędzenia zasobów. Jeśli kontener ma miliony obiektów blob, będzie to bardzo kosztowne. Można dostosować wartość zmiennej $maxCount
, jednak jeśli kontener ma miliony obiektów blob, skrypt będzie przetwarzać obiekty blob powoli.
Aby dowiedzieć się więcej na temat opcji ochrony danych usuwania nietrwałego, zapoznaj się z artykułem Usuwanie nietrwałe dla obiektów 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."
}