Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här skriptet hjälper dig att återskapa en filresurs om du har tagit bort den av misstag. Med mjuk borttagning kan du återställa en borttagen filresurs inom 14 dagar och återställa dess innehåll, ögonblicksbilder och återställningspunkter. Läs mer om mjuk borttagning.
Exempelskript för att ta bort en filresurs
#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
Förutsättningar
Innan du kör skriptet kontrollerar du att följande krav uppfylls:
Installera de senaste Azure PowerShell Az-modulerna från den här länken innan du kör skriptet.
Ha följande information till hands eftersom du behöver ange dem som värden för olika parametrar i skriptet.
- -SubscriptionId – ID för prenumerationen där filresursen finns.
 - -ResourceGroupName – resursgrupp för lagringskontot som är värd för filresursen.
 - -StorageAccountName – namnet på lagringskontot som är värd för filresursen.
 - -FileShareName – Namnet på filresursen som ska tas bort
 
Kör skriptet för att återställa en fildelning
Du kan köra skriptet i följande scenarier:
- Det finns inga flera borttagna versioner med samma namn som den filresurs som du försöker ta bort.
 - Flera borttagna versioner med samma namn som den filresurs som du försöker ta bort.
 
För att köra skriptet för att återställa en fildelning, följ dessa steg:
- Spara föregående skript på datorn med ett valfritt namn. I det här exemplet sparade vi det som Undelete.ps1
 - Kör skriptet enligt det scenario som passar dina krav.
 
Scenario 1: Inga flera borttagna versioner
Det finns inga flera borttagna versioner med samma namn som den filresurs som du försöker ta bort.
I följande exempel tas filresursen share1 bort som finns i lagringskontot afsshare.
   .\UnDelete.ps1 -ResourceGroupName afsshare -StorageAccountName afsshare -SubscriptionId aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e -FileShareName share1
Utdata ska visa meddelandet Completed:Restore File Share
Scenario 2: Flera borttagna versioner
Det finns flera borttagna versioner med samma namn som den filresurs som du försöker ta bort.
När du har sparat skriptet återställer du en version av filresurs share1 genom att följa dessa steg:
Kör skriptet på följande sätt genom att ange filresursnamnet.
.\UnDelete.ps1 -ResourceGroupName afsshare -StorageAccountName afsshare -SubscriptionId aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e -FileShareName share1Completed: 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.Välj den version från utdata från steg 1 som du vill ta bort och skicka den som ett värde för parametern -DeletedShareVersion .
I följande exempel tas 01D5D7F77ACC7864-versionen av share1-filresursen bort.
.\UnDelete.ps1 -ResourceGroupName afsshare-StorageAccountName afsshare -SubscriptionId aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e -FileShareName share1 -DeletedShareVersion 01D5D7F77ACC7864