Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Этот скрипт помогает отменить удаление общей папки, если вы случайно удалили ее. С помощью мягкого удаления можно восстановить удаленное файловое хранилище в течение 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 из этой ссылки перед запуском скрипта.
Следите за следующими сведениями, так как их необходимо передать в качестве значений для различных параметров скрипта:
- -SubscriptionId — идентификатор подписки, в которой находится файловый ресурс.
- -ResourceGroupName — группа ресурсов учетной записи хранения, в которой размещен файловый ресурс для совместного использования.
- -StorageAccountName — имя учетной записи хранения, в котором размещен общий файловый ресурс.
- -FileShareName — имя общей папки для отмены
Запустите скрипт для восстановления файлового ресурса
Скрипт можно выполнить в следующих сценариях:
- Нет нескольких удаленных версий с тем же именем, что и файловый ресурс, который вы пытаетесь восстановить.
- Несколько удаленных версий с тем же именем, что и общее хранилище данных, которое вы пытаетесь восстановить.
Чтобы выполнить скрипт для восстановления общей папки, выполните следующие действия.
- Сохраните предыдущий скрипт на компьютере с выбранным именем. В этом примере мы сохранили его как Undelete.ps1
- Запустите скрипт в соответствии с сценарием, который соответствует вашим требованиям.
Сценарий 1. Нет нескольких удаленных версий
Нет нескольких удалённых версий с тем же именем, что и файл общего доступа, который вы пытаетесь восстановить.
В следующем примере восстанавливается общий доступ к папке share1, находящейся в учетной записи хранилища afsshare.
.\UnDelete.ps1 -ResourceGroupName afsshare -StorageAccountName afsshare -SubscriptionId aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e -FileShareName share1
Выходные данные должны отображать сообщение Completed:Restore File Share
Сценарий 2. Несколько удаленных версий
Существует несколько удаленных версий с тем же именем, что и совместно используемая папка, которую вы пытаетесь восстановить.
После сохранения скрипта восстановите версию файлового ресурса share1, выполнив следующие действия:
Выполните скрипт следующим образом, указав имя общей папки.
.\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.Выберите версию из выходных данных шага 1, которую вы хотите отменить и передать ее в качестве значения для параметра -DeletedShareVersion .
В следующем примере восстанавливается версия 01D5D7F77ACC7864 файловой службы share1.
.\UnDelete.ps1 -ResourceGroupName afsshare-StorageAccountName afsshare -SubscriptionId aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e -FileShareName share1 -DeletedShareVersion 01D5D7F77ACC7864