-
Notifications
You must be signed in to change notification settings - Fork 0
/
Recover-AzDeletedStorageAccounts.ps1
91 lines (76 loc) · 2.67 KB
/
Recover-AzDeletedStorageAccounts.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#Requires -modules Az.Accounts
[CmdletBinding()]
param
(
[Parameter(Mandatory = $true)]
[string]$subscriptionId
)
function Recover-AzDeletedStorageAccounts
{
[CmdletBinding()]
param
(
[Parameter(Mandatory = $true)]
[string]$subscriptionId
)
# get bearer token
$token = $(Get-AzAccessToken -ResourceUrl "https://management.azure.com").Token
# api version for srp calls
$apiVersion = "2022-09-01"
# req headers
$headers = @{}
$headers.Add("Authorization", "Bearer $token")
$headers.Add("Content-Type", "application/json")
# list deleted accounts
$deletedAccountsUri = "https://management.azure.com/subscriptions/$($subscriptionId)/providers/Microsoft.Storage/deletedAccounts?api-version=$($apiVersion)"
try
{
$deletedAccountsRes = Invoke-WebRequest -Method GET -Uri $deletedAccountsUri -Headers $headers
$deletedAccounts = $($deletedAccountsRes.Content | ConvertFrom-Json).Value
}
catch
{
throw $_
}
if ($deletedAccounts)
{
# output
$recoveredAccounts = @()
class RecoveredStorageAccounts
{
[string]$StorageAccountName
}
# recover deleted accounts
foreach ($deletedAccount in $deletedAccounts)
{
$recoverAccountUri = "https://management.azure.com/subscriptions/$($deletedAccount.subscription)/resourceGroups/$($deletedAccount.resourceGroupName)/providers/Microsoft.Storage/storageAccounts/$($deletedAccount.name)?api-version=$($apiVersion)"
# req body
$body = @{}
$body.Add("location", $deletedAccount.location)
$body.Add("properties", @{
"deletedAccountCreationTime" = $deletedAccount.creationTime
})
$body = $body | ConvertTo-Json
try
{
$recoverAccountRes = Invoke-WebRequest -Method PUT -Uri $recoverAccountUri -Headers $headers -Body $body
}
catch
{
throw "Failed to recover storage account '$($deletedAccount.name)'. $_"
}
if ($recoverAccountRes.StatusCode -eq 202)
{
$recoveredStorageAccount = [RecoveredStorageAccounts]::new()
$recoveredStorageAccount.StorageAccountName = $deletedAccount.name
$recoveredAccounts += $recoveredStorageAccount
}
}
return $recoveredAccounts
}
else
{
Write-Warning "No deleted accounts were found for subscriptionId '$subscriptionId'."
}
}
Recover-AzDeletedStorageAccounts -subscriptionId $subscriptionId