مشاركة عبر


برنامج PowerShell النصي لإلغاء حذف مشاركة ملف محذوفة عن طريق الخطأ

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

نموذج نصي لإلغاء حذف مشاركة ملف

#Import-Module Az.Storage -MinimumVersion 1.7.0 -Scope Local
Param(
        [Parameter(Mandatory=$True)][System.String] $ResourceGroupName,
        [Parameter(Mandatory=$True)][System.String] $StorageAccountName,
        [Parameter(Mandatory=$True)][System.String] $FileShareName,
        [Parameter(Mandatory=$True)][System.String] $SubscriptionId,
        [Parameter(Mandatory=$False)][System.Boolean] $ListOption,
        [Parameter(Mandatory=$False)][System.String] $DeletedShareVersion
    )

Function Restore-DeletedFileShare
{
    Param(
        [Parameter(Mandatory=$True)][Microsoft.WindowsAzure.Commands.Common.Storage.LazyAzureStorageContext] $Context,
        [Parameter(Mandatory=$True)][System.String] $FileShareName,
        [Parameter(Mandatory=$False)][System.String] $DeletedShareVersion
        )

    if ([string]::IsNullOrWhiteSpace($FileShareName))
    {
        Write-Error "Please specify the required input parameter: FileShareName" -ErrorAction Stop
    }

    $FileShareName = $FileShareName.ToLowerInvariant()

    Write-Verbose "Restoring a file share with the name: $FileShareName" -Verbose


    Write-Information -MessageData "Started: Creating SASToken to List File Shares" -InformationAction Continue

    $listToken = New-AzStorageAccountSASToken -Context $Context -Service File -ResourceType Service -Permission "l" -Protocol HttpsOrHttp -StartTime (Get-Date).AddHours(-1) -ExpiryTime (Get-Date).AddHours(1)

    Write-Information -MessageData "Completed: Creating SASToken to List File Shares" -InformationAction Continue

    Write-Information -MessageData "Started: Listing File Shares to find the deleted file share" -InformationAction Continue

    $listSharesUrl = [string]::Concat($Context.FileEndPoint, "?include=metadata,deleted&comp=list&api-version=2019-10-10&", $listToken.Substring(1))

    $listSharesResponse = Invoke-WebRequest $listSharesUrl -Method "GET" -Verbose

    if ($listSharesResponse.StatusCode -ne 200)
    {
        Write-Error "Request to list file shares failed." -ErrorAction Stop
    }

    Write-Verbose $listSharesResponse.RawContent -Verbose

    $listSharesResponseContent = $listSharesResponse.Content.Substring(3)

    Write-Information -MessageData "Completed: Listing File Shares to find the deleted file share" -InformationAction Continue

    Write-Information -MessageData "Started: Search for a deleted file share with the specified name" -InformationAction Continue

    $deletedFileShares = Select-Xml -Content $listSharesResponseContent -XPath "/EnumerationResults/Shares/Share[Deleted=""true"" and Name=""$FileShareName""]"

    $matchedCount = 0
    $deletedShareVersions = New-Object System.Collections.Generic.List[string]

    foreach($share in $deletedFileShares)
    {
        if($matchedCount -eq 0)
        {
          Write-Verbose $share.Node.InnerXml -Verbose

          Write-Information -MessageData "Completed: Search for a deleted file share with the specified name And Found versions" -InformationAction Continue
        }

        $shareVer = $share.Node.Item("Version").InnerText
        $shareDelTime = $share.Node.Item("Properties").Item("DeletedTime").InnerText
        $retDays = $share.Node.Item("Properties").Item("RemainingRetentionDays").InnerText

        $deletedShareVersions.Add($share.Node.Item("Version").InnerText)

        Write-Information -MessageData "DeletedVersion: $shareVer, DeletedTime: $shareDelTime, RemainingRetentionDays: $retDays"  -InformationAction Continue

        $matchedCount++
    }

    if($ListOption -eq $True)
    {
       return;
    }

    if ($matchedCount -eq 0)
    {
        Write-Error "Deleted file share with the specified name was not found." -ErrorAction Stop
    }
    elseif($matchedCount -eq 1 -and ([string]::IsNullOrWhiteSpace($DeletedShareVersion) -or $deletedShareVersions.Contains($DeletedShareVersion)))
    {
      $DeletedShareVersion = $deletedShareVersions
    }
    elseif ($matchedCount -gt 1)
    {
      if ([string]::IsNullOrWhiteSpace($DeletedShareVersion) -or !$deletedShareVersions.Contains($DeletedShareVersion))
      {
        Write-Error "More than one share with the specified name was found. Please specify a valid DeletedShareVersion parameter from above possible values." -ErrorAction Stop
      }
    }

    Write-Information -MessageData "Completed: Search for a deleted file share with the specified name And Found version: $DeletedShareVersion" -InformationAction Continue

    Write-Information -MessageData "Started: Creating SASToken to Restore File Share" -InformationAction Continue

    $restoreToken = New-AzStorageAccountSASToken -Context $Context -Service File -ResourceType Container -Permission "w" -Protocol HttpsOrHttp -StartTime (Get-Date).AddHours(-1) -ExpiryTime (Get-Date).AddHours(1)

    Write-Information -MessageData "Completed: Creating SASToken to Restore File Share" -InformationAction Continue

    Write-Information -MessageData "Started: Restore File Share" -InformationAction Continue

 $restoreShareUrl = [string]::Concat($Context.FileEndPoint, $FileShareName, "?restype=share&comp=undelete&api-version=2019-10-10&", $restoreToken.Substring(1))

    $restoreHeaders = @{"x-ms-deleted-share-name" = $FileShareName; "x-ms-deleted-share-version" = $DeletedShareVersion}

    $restoreResponse = Invoke-WebRequest $restoreShareUrl -Headers $restoreHeaders -Method "PUT" -Verbose

    if ($restoreResponse.StatusCode -ne 201)
    {
        Write-Error "Request to restore a file share failed." -ErrorAction Stop
    }

    Write-Verbose $restoreResponse.RawContent -Verbose

    Write-Information -MessageData "Completed: Restore File Share" -InformationAction Continue
}

Connect-AzAccount
Select-AzSubscription -Subscription $SubscriptionId
$sa = Get-AzStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageAccountName


Restore-DeletedFileShare $sa.Context $FileShareName $DeletedShareVersion

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

قبل تشغيل البرنامج النصي، تأكد من استيفاء المتطلبات الأساسية التالية:

  • قم بتثبيت أحدث وحدات Azure PowerShell Az النمطية من هذا الارتباط قبل تشغيل البرنامج النصي.

  • احتفظ بالتفاصيل التالية في متناول يدك حيث تحتاج إلى تمريرها كقيم لمعلمات مختلفة من البرنامج النصي:

    • -معرف الاشتراك - معرف الاشتراك حيث توجد مشاركة الملف.
    • -ResourceGroupName - مجموعة موارد حساب التخزين الذي يستضيف مشاركة الملف.
    • -StorageAccountName - اسم حساب التخزين الذي يستضيف مشاركة الملف.
    • ·FileShareName - اسم مشاركة الملف المراد إلغاء حذفها

تنفيذ البرنامج النصي لإلغاء حذف مشاركة ملف

يمكنك تنفيذ البرنامج النصي في السيناريوهات التالية:

  • لا توجد إصدارات محذوفة متعددة تحمل نفس اسم مشاركة الملف التي تحاول إلغاء حذفها.
  • إصدارات متعددة محذوفة تحمل نفس اسم مشاركة الملف التي تحاول إلغاء حذفها.

لتنفيذ البرنامج النصي لإلغاء حذف مشاركة ملف، اتبع الخطوات التالية:

  1. احفظ البرنامج النصي السابق على جهازك باسم من اختيارك. في هذا المثال، حفظناه على النحوUndelete.ps1
  2. قم بتشغيل البرنامج النصي وفقا للسيناريو الذي يناسب متطلباتك.

السيناريو 1: لا توجد إصدارات محذوفة متعددة

لا توجد عدة إصدارات محذوفة تحمل نفس اسم مشاركة الملف التي تحاول إلغاء حذفها.

يلغي المثال التالي مشاركة الملف1 الموجودة في حساب التخزين afsshare.

   .\UnDelete.ps1 -ResourceGroupName afsshare -StorageAccountName afsshare -SubscriptionId aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e -FileShareName share1

يجب أن يعرض الإخراج الرسالة Completed:Restore File Share

السيناريو 2: إصدارات محذوفة متعددة

هناك العديد من الإصدارات المحذوفة التي تحمل نفس اسم مشاركة الملف التي تحاول إلغاء حذفها.

بعد حفظ البرنامج النصي، قم بإلغاء حذف إصدار مشاركة الملف1 باتباع الخطوات التالية:

  1. قم بتنفيذ البرنامج النصي على النحو التالي من خلال توفير اسم مشاركة الملف.

    .\UnDelete.ps1 -ResourceGroupName afsshare -StorageAccountName afsshare -SubscriptionId aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e -FileShareName share1
    
    Completed: Search for a deleted file share with the specified name and Found versions
    DeletedVersion: 01D5D7F77ACC7864, DeletedTime: Fri, 31 Jan 2020 05:30:33 GMT, RemainingRetentionDays: 14
    DeletedVersion: 01D5D7F7A76CAF42, DeletedTime: Fri, 31 Jan 2020 05:31:25 GMT, RemainingRetentionDays: 14
    Restore-DeletedFileShare : More than one share with the specified name was found. Please specify a valid DeletedShareVersion parameter from above possible values.
    
  2. اختر الإصدار من إخراج الخطوة 1 الذي تريد إلغاء حذفه وقم بتمريره كقيمة للمعلمة -DeletedShareVersion .

    يؤدي المثال التالي إلى إلغاء حذف إصدار 01D5D7F77ACC7864 من مشاركة ملف share1 .

    .\UnDelete.ps1 -ResourceGroupName afsshare-StorageAccountName afsshare -SubscriptionId aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e -FileShareName share1 -DeletedShareVersion 01D5D7F77ACC7864
    

الخطوات التالية