PowerShell-skript för att ta bort en filresurs som tagits bort av misstag
Det här skriptet hjälper dig att ta bort en filresurs om du har tagit bort den av misstag. Säkerhetsfunktionen för mjuk borttagning för filresurser ger dig möjlighet att ta bort en filresurs inom kvarhållningsperioden på 14 dagar, vilket tillåter återställning av allt filresursinnehåll, ögonblicksbilder och återställningspunkter. Mer information om mjuk borttagning finns i den här länken.
Exempelskript
#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
Använda skriptet i olika scenarier
Förutsättningar
Installera de senaste Azure PowerShell Az-modulerna från den här länken innan du kör skriptet.
Se till att följande information är praktisk eftersom du behöver skicka 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örningssteg
- Spara skriptet ovan 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
Det finns inga flera borttagna versioner med samma namn som den filresurs som du försöker ta bort.
I följande exempel tas filresursresursen1 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
Det finns flera borttagna versioner med samma namn som den filresurs som du försöker ta bort.
I följande exempel tas en version av filresursresursen bort1
Steg 1
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 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.
Steg 2
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