مشاركة عبر


إدارة حاويات كائن ثنائي كبير الحجم باستخدام PowerShell

يسمح لك تخزين كائن ثنائي كبير الحجم من Azure بتخزين كميات مهولة من بيانات الكائن غير المنظمة. يمكنك استخدام تخزين كائن ثنائي كبير الحجم لجمع الوسائط أو المحتوى أو بيانات التطبيق للمستخدمين أو عرضها. نظرًا لأن كافة بيانات كائن ثنائي كبير الحجم تُخزن داخل حاويات، فيجب إنشاء حاوية تخزين قبل أن تتمكن من بدء تحميل البيانات. لمعرفة المزيد حول تخزين كائن ثنائي كبير الحجم، اقرأ مقدمة لتخزين Azure Blob.

تشرح هذه المقالة الإرشادية كيفية العمل مع كلٍ من كائنات حاوية التخزين الفردية والمتعددة.

المتطلبات الأساسية

ستحتاج إلى الحصول على تخويل لاشتراك Azure قبل أن تتمكن من استخدام الأمثلة الواردة في هذه المقالة. يمكن أن يحدث التخويل عن طريق المصادقة باستخدام حساب Microsoft Entra أو باستخدام مفتاح مشترك. تستخدم الأمثلة في هذه المقالة مصادقة Microsoft Entra بالاقتران مع كائنات السياق. تغلف كائنات السياق بيانات اعتماد Microsoft Entra وتمريرها على عمليات البيانات اللاحقة، مما يلغي الحاجة إلى إعادة المصادقة.

لتسجيل الدخول إلى حساب Azure الخاص بك باستخدام حساب Microsoft Entra، افتح PowerShell واستدع الاتصال-AzAccount cmdlet.

# Connect to your Azure subscription
 Connect-AzAccount

بعد إنشاء الاتصال، بادر بإنشاء سياق حساب التخزين عن طريق استدعاء New-AzStorageContext cmdlet. قم بتضمين المعلمة -UseConnectedAccount بحيث يتم تنفيذ عمليات البيانات باستخدام بيانات اعتماد Microsoft Entra.

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

تذكَّر استبدال قيم العناصر النائبة في الأقواس بقيمك. لمزيد من المعلومات حول تسجيل الدخول في Azure باستخدام PowerShell، راجع تسجيل الدخول باستخدام Azure PowerShell.

إنشاء حاوية

لإنشاء حاويات باستخدام PowerShell، استدعِ New-AzStorageContainercmdlet. لا توجد حدود لعدد الكائنات الثنائية كبيرة الحجم أو الحاويات التي يمكن إنشاؤها داخل حساب تخزين. لا يمكن تضمين الحاويات داخل حاويات أخرى.

يوضح المثال التالي ثلاثة خيارات لإنشاء حاويات الكائنات الثنائية كبيرة الحجم باستخدام New-AzStorageContainer cmdlet. يُنشئ الأسلوب الأول حاويةً واحدةً بينما يستفيد الأسلوبان المتبقيان من عمليات PowerShell لأتمتة إنشاء الحاوية.

لاستخدام هذا المثال، بادر بتوفير قيم للمتغيرات وتأكد من إنشاء اتصال باشتراك Azure خاصتك. تذكَّر استبدال قيم العناصر النائبة في الأقواس بقيمك.

# Create variables
 $containerName  = "individual-container"
 $prefixName     = "loop"

# Approach 1: Create a container
 New-AzStorageContainer -Name $containerName -Context $ctx

# Approach 2: Create containers with a PowerShell loop
 for ($i = 1; $i -le 3; $i++) { 
     New-AzStorageContainer -Name (-join($prefixName, $i)) -Context $ctx
    } 

# Approach 3: Create containers using the PowerShell Split method
 "$($prefixName)4 $($prefixName)5 $($prefixName)6".split() | New-AzStorageContainer -Context $ctx

توفر النتيجة اسم حساب التخزين وتؤكد إنشاء الحاوية الجديدة.

Storage Account Name: demostorageaccount

Name                   PublicAccess   LastModified
----                   ------------   ------------
individual-container   Off            11/2/2021 4:09:05 AM +00:00
loop-container1        Off            11/2/2021 4:09:05 AM +00:00
loop-container2        Off            11/2/2021 4:09:05 AM +00:00
loop-container3        Off            11/2/2021 4:09:05 AM +00:00           
loop-container4        Off            11/2/2021 4:09:05 AM +00:00           
loop-container5        Off            11/2/2021 4:09:05 AM +00:00           
loop-container6        Off            11/2/2021 4:09:05 AM +00:00          

قائمة الحاويات

استخدم Get-AzStorageContainer cmdlet لاسترداد حاويات التخزين. لاسترداد حاوية واحدة، بادر بتضمين المعلمة -Name. لإرجاع قائمة بالحاويات التي تبدأ بسلسلة أحرف معينة، حدد قيمة للمعلمة -Prefix.

يسترد المثال التالي كلاً من حاوية فردية وقائمة موارد الحاويات.

# Create variables
 $containerName  = "individual-container"
 $prefixName     = "loop-"

# Approach 1: Retrieve an individual container
 Get-AzStorageContainer -Name $containerName -Context $ctx
 Write-Host

# Approach 2: Retrieve a list of containers
 Get-AzStorageContainer -Prefix $prefixName -Context $ctx

توفر النتيجة معرف URI لنقطة نهاية كائن ثنائي كبير الحجم وتدرج الحاويات التي تم استردادها بالاسم والبادئة.

   Storage Account Name: demostorageaccount

Name                 PublicAccess         LastModified                   IsDeleted  VersionId        
----                 ------------         ------------                   ---------  ---------        
individual-container                      11/2/2021 5:52:08 PM +00:00                                

loop-container1                           11/2/2021 12:22:00 AM +00:00                               
loop-container2                           11/2/2021 12:22:00 AM +00:00                               

loop-container1                           11/2/2021 12:22:00 AM +00:00                               
loop-container2                           11/2/2021 12:22:00 AM +00:00
loop-container3                           11/2/2021 12:22:00 AM +00:00   True       01D7E7129FDBD7D4
loop-container4                           11/2/2021 12:22:00 AM +00:00   True       01D7E8A5EF01C787 

قراءة خصائص الحاوية وبيانات التعريف

تعرض الحاوية كلاً من خصائص النظام وبيانات التعريف المعرفة من قبل المستخدم. توجد خصائص النظام على كل مورد من موارد تخزين كائن ثنائي كبير الحجم. بعض الخصائص للقراءة فقط، بينما يمكن قراءة خصائص أخرى أو تعيينها. تحت الأغلفة، تُعيّن بعض خصائص النظام إلى عناوين HTTP قياسية معينة.

تتكون بيانات التعريف المعرفة من قبل المستخدم من زوج واحد أو أكثر من أزواج اسم-قيمة التي تحددها لمورد تخزين كائن ثنائي كبير الحجم. يمكنك استخدام بيانات التعريف لتخزين قيم إضافية مع المورد. قيم بيانات التعريف هي لأغراضك فقط، ولا تؤثر على كيفية تصرف المورد.

خصائص الحاوية

بعد ذلك يسترد جميع الحاويات مع البادئة demo ويتكرر من خلالهم مع إدراج خصائصها.

# Create variable
 $prefix = "loop"

# Get containers
 $containers = Get-AzStorageContainer -Prefix $prefix -Context $ctx

# Iterate containers, display properties
 Foreach ($container in $containers) 
 {
    $containerProperties = $container.BlobContainerClient.GetProperties()
    Write-Host $container.Name "properties:"
    $containerProperties.Value
 }

تعرض النتائج جميع الحاويات التي تحتوي على تكرار البادئة وتدرج خصائصها.

loop-container1 properties:

LastModified                      : 12/7/2021 7:47:17 PM +00:00
LeaseStatus                       : Unlocked
LeaseState                        : Available
LeaseDuration                     : Infinite
PublicAccess                      : 
HasImmutabilityPolicy             : False
HasLegalHold                      : False
DefaultEncryptionScope            : $account-encryption-key
PreventEncryptionScopeOverride    : False
DeletedOn                         : 
RemainingRetentionDays            : 
ETag                              : 0x8D9B9BA602806DA
Metadata                          : {}
HasImmutableStorageWithVersioning : False

loop-container2 properties:
LastModified                      : 12/7/2021 7:47:18 PM +00:00
LeaseStatus                       : Unlocked
LeaseState                        : Available
LeaseDuration                     : Infinite
PublicAccess                      : 
HasImmutabilityPolicy             : False
HasLegalHold                      : False
DefaultEncryptionScope            : $account-encryption-key
PreventEncryptionScopeOverride    : False
DeletedOn                         : 
RemainingRetentionDays            : 
ETag                              : 0x8D9B9BA605996AE
Metadata                          : {}
HasImmutableStorageWithVersioning : False

قراءة بيانات تعريف الحاوية وكتابتها

يمكن للمستخدمين الذين لديهم عدة آلاف من العناصر داخل حساب التخزين خاصتهم تحديد مواقع حاويات معينة بسرعة استنادًا إلى بيانات تعريفهم. للوصول إلى بيانات التعريف، ستستخدم الكائن BlobContainerClient. يسمح لك هذا الكائن بالوصول إلى الحاويات والكائنات الثنائية كبيرة الحجم خاصتها ومعالجتها. لتحديث بيانات التعريف، ستحتاج إلى استدعاء الأسلوب SetMetadata(). يقبل هذا الأسلوب أزواج قيم المفاتيح المخزنة في كائن IDictionary عام فقط. لمزيدٍ من المعلومات، راجع تعريف فئة BlobContainerClient

يحدِّث المثال أدناه أولاً بيانات تعريف الحاوية وبعد ذلك استرداد بيانات تعريف الحاوية. يمسح المثال نموذج الحاوية من الذاكرة ويستردها مرةً أخرى لضمان عدم قراءة بيانات التعريف من الكائن الموجود في الذاكرة.

# Create variable
  $containerName = "individual-container"

# Retrieve container
 $container = Get-AzStorageContainer -Name $containerName -Context $ctx

# Create IDictionary, add key-value metadata pairs to IDictionary
 $metadata = New-Object System.Collections.Generic.Dictionary"[String,String]"
 $metadata.Add("CustomerName","Anthony Bennedetto")
 $metadata.Add("CustomerDOB","08/03/1926")
 $metadata.Add("CustomerBirthplace","Long Island City")

# Update metadata
  $container.BlobContainerClient.SetMetadata($metadata, $null)

# Flush container from memory, retrieve updated container
 $container = $null
 $container = Get-AzStorageContainer -Name $containerName -Context $ctx
 
# Display metadata
 $properties = $container.BlobContainerClient.GetProperties()
 Write-Host $container.Name "metadata:" 
 Write-Host $properties.Value.Metadata

تعرض النتائج بيانات التعريف الكاملة لحاوية.

individual-container metadata:

[CustomerName, Anthony Bennedetto] [CustomerDOB, 08/03/1926] [CustomerBirthplace, Long Island City]

الحصول على توقيع الوصول المشترك للحاوية

يوفر توقيع الوصول المشترك (SAS) الوصول المُفوض إلى موارد Azure. يمنحك توقيع الوصول المشترك تحكمًا دقيقًا في كيفية وصول العميل إلى بياناتك. على سبيل المثال، يمكنك تحديد الموارد المُتوفرة للعميل. يمكنك أيضاً تحديد أنواع العمليات التي يمكن للعميل تنفيذها، وتحديد مقدار الوقت الذي يمكن فيه اتخاذ الإجراءات.

يُشاع استخدام توقيع الوصول المشترك لتوفير وصول مؤقت وآمن إلى عميل لا يملك أذونات عادة. مثال على هذا السيناريو هو خدمة تسمح للمستخدمين بقراءة بياناتهم وكتابتها في حساب تخزينك.

يدعم Azure Storage ثلاثة أنواع من توقيعات الوصول المشتركة: تفويض المستخدم والخدمة وحساب SAS. لمزيدٍ من المعلومات عن توقيعات الوصول المشترك، راجع مقالة إنشاء خدمة SAS لحاوية أو نقطة.

تنبيه

يمكن لأي عميل يمتلك توقيع وصول مشترك صالح الوصول إلى البيانات في حساب التخزين خاصتك كما هو مسموح به من توقيع الوصول المشترك. من المهم حماية توقيع الوصول المشترك من الاستخدام الضار أو غير المقصود. استخدم التقدير في توزيع توقيع الوصول المشترك، وضع خطة لإلغاء توقيع الوصول المشترك المُخترق.

يوضح المثال التالي عملية تكوين خدمة توقيع الوصول المشترك لحاوية معينة باستخدام New-AzStorageContainerSASToken cmdlet. سيُكوّن المثال توقيع الوصول المشترك بأوقات البدء وانتهاء الصلاحية والبروتوكول. كما سيتم تحديد أذونات قراءة، و كتابة، و إدراج في توقيع الوصول المشترك باستخدام المعلمة -Permission. يمكنك الرجوع إلى الجدول الكامل للأذونات في المقالة إنشاء خدمة توقيع الوصول المشترك.

# Create variables
 $accountName   = "<storage-account>"
 $containerName = "individual-container"
 $startTime     = Get-Date
 $expiryTime    = $startTime.AddDays(7)
 $permissions   = "rwl"
 $protocol      = "HttpsOnly"

# Create a context object using Azure AD credentials, retrieve container
 $ctx = New-AzStorageContext -StorageAccountName $accountName -UseConnectedAccount
 
# Approach 1: Generate SAS token for a specific container
 $sas = New-AzStorageContainerSASToken `
 -Context $ctx `
 -Name $containerName `
 -StartTime $startTime `
 -ExpiryTime $expiryTime `
 -Permission $permissions `
 -Protocol $protocol

# Approach 2: Generate SAS tokens for a container list using pipeline
  Get-AzStorageContainer -Container $filterName -Context $ctx | New-AzStorageContainerSASToken `
 -Context $ctx `
 -StartTime $startTime `
 -ExpiryTime $expiryTime `
 -Permission $permissions `
 -Protocol $protocol | Write-Output

إشعار

لا يتضمن رمز SAS المميز الذي تم إرجاعه بواسطة Blob Storage حرف المحدد ('؟') لسلسلة استعلام URL. إذا كنت تقوم بإلحاق رمز SAS المميز بعنوان URL لمورد، فتذكر أيضا إلحاق حرف المحدد.

حذف الحاويات

استناداً إلى حالة الاستخدام خاصتك، يمكنك حذف حاوية واحدة أو مجموعة من الحاويات باستخدام Remove-AzStorageContainer cmdlet. عند حذف قائمة الحاويات، يمكنك الاستفادة من العمليات الشرطية أو التكرارات الحلقية أو البنية الأساسية لبرنامج ربط العمليات التجارية في PowerShell كما هو موضح في الأمثلة أدناه.

# Create variables
 $accountName    = "<storage-account>"
 $containerName  = "individual-container"
 $prefixName     = "loop-"

# Delete a single named container
 Remove-AzStorageContainer -Name $containerName -Context $ctx

# Iterate a loop, deleting containers
 for ($i = 1; $i -le 2; $i++) { 
     Remove-AzStorageContainer -Name (-join($containerPrefix, $i)) -Context $ctx
    } 

# Retrieve container list, delete using a pipeline
 Get-AzStorageContainer -Prefix $prefixName -Context $ctx | Remove-AzStorageContainer

في بعض الحالات، من الممكن استرداد الحاويات التي تم حذفها. إذا مُكّن خيار حماية بيانات الحذف المبدئي لحساب التخزين خاصتك، ستُرجه المعلمة -IncludeDeleted الحاويات المحذوفة خلال فترة الاستبقاء المُقترنة. لا يمكن استخدام المعلمة -IncludeDeleted إلا بالاقتران مع المعلمة -Prefix عند إرجاع قائمة الحاويات. لمعرفة المزيد حول الحذف المبدئي، راجع مقالة حذف مبدئي للحاويات.

استخدم المثال التالي لاسترداد قائمة الحاويات المحذوفة ضمن فترة الاستبقاء المُقترنة بحساب التخزين.

# Retrieve a list of containers including those recently deleted
 Get-AzStorageContainer -Prefix $prefixName -Context $ctx -IncludeDeleted

استعادة حاوية حُذفت مبدئيًا

كما هو مذكور في قسم قائمة الحاويات، يمكنك تكوين خيار حماية بيانات الحذف المبدئي على حساب التخزين خاصتك. عند التمكين، من الممكن استعادة الحاويات المحذوفة خلال فترة الاستبقاء المُقترنة.

تُوضح الأمثلة التالية كيفية استعادة حاوية حُذفت مبدئياً باستخدام Restore-AzStorageContainer cmdlet. قبل أن تتمكن من اتباع هذا المثال، ستحتاج إلى تمكين الحذف المبدئي وتكوينه على حساب تخزين واحد على الأقل.

لمعرفة المزيد حول خيار حماية بيانات الحذف المبدئي، راجع مقالة حذف مبدئي للحاويات.

# Create variables
 $accountName = "<storage-account>"
 $prefixName  = "loop-"

# Create a context object using Azure AD credentials
 $ctx = New-AzStorageContext -StorageAccountName $accountName -UseConnectedAccount

# Retrieve all containers, filter deleted containers, restore deleted containers
 Get-AzStorageContainer -Prefix $prefixName -IncludeDeleted `
    -Context $ctx | ? { $_.IsDeleted } | Restore-AzStorageContainer

تعرض النتائج جميع الحاويات التي تحتوي على عرض توضيحي للبادئة والتي تمت استعادتها.

    Storage Account Name: demostorageaccount

Name                 PublicAccess         LastModified                   IsDeleted  VersionId        
----                 ------------         ------------                   ---------  ---------        
loop-container3                                                                                       
loop-container4               

(راجع أيضًا )