-
Notifications
You must be signed in to change notification settings - Fork 2
/
Export-APIMDeveloperPortal.ps1
75 lines (59 loc) · 2.92 KB
/
Export-APIMDeveloperPortal.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
Param (
[Parameter(Mandatory = $true, HelpMessage = "Resource group of API MAnagement")]
[string] $ResourceGroupName,
[Parameter(Mandatory = $true, HelpMessage = "API Management Name")]
[string] $APIMName,
[Parameter(HelpMessage = "Export folder")]
[string] $ExportFolder = "$PSScriptRoot\Export"
)
$ErrorActionPreference = "Stop"
"Exporting Azure API Management Developer portal content to: $ExportFolder"
$mediaFolder = Join-Path -Path $ExportFolder -ChildPath "Media"
New-Item -ItemType "Directory" -Path $ExportFolder -Force
New-Item -ItemType "Directory" -Path $mediaFolder -Force
$ctx = Get-AzContext
$ctx.Subscription.Id
$baseUri = "subscriptions/$($ctx.Subscription.Id)/resourceGroups/$ResourceGroupName/providers/Microsoft.ApiManagement/service/$APIMName"
$baseUri
$contentItems = @{ }
$contentTypes = (Invoke-AzRestMethod -Path "$baseUri/contentTypes?api-version=2019-12-01" -Method GET).Content | ConvertFrom-Json
foreach ($contentTypeItem in $contentTypes.value) {
$contentTypeItem.id
$contentType = (Invoke-AzRestMethod -Path "$baseUri/$($contentTypeItem.id)/contentItems?api-version=2019-12-01" -Method GET).Content | ConvertFrom-Json
foreach ($contentItem in $contentType.value) {
$contentItem.id
$contentItems.Add($contentItem.id, $contentItem)
}
}
$contentItems
$contentItems | ConvertTo-Json -Depth 100 | Out-File -FilePath "$ExportFolder\data.json"
$storage = (Invoke-AzRestMethod -Path "$baseUri/portalSettings/mediaContent/listSecrets?api-version=2019-12-01" -Method POST).Content | ConvertFrom-Json
$containerSasUrl = [System.Uri] $storage.containerSasUrl
$storageAccountName = $containerSasUrl.Host.Split('.')[0]
$sasToken = $containerSasUrl.Query
$contentContainer = $containerSasUrl.GetComponents([UriComponents]::Path, [UriFormat]::SafeUnescaped)
$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -SasToken $sasToken
Set-AzCurrentStorageAccount -Context $storageContext
$totalFiles = 0
$continuationToken = $null
do {
$blobs = Get-AzStorageBlob -Container $contentContainer -MaxCount 1000 -ContinuationToken $continuationToken
"Found $($blobs.Count) files in current batch."
$blobs
$totalFiles += $blobs.Count
if (0 -eq $blobs.Length) {
break
}
foreach ($blob in $blobs) {
$targetFile = Join-Path -Path $mediaFolder -ChildPath $blob.Name
$targetFolder = Split-Path -Path $targetFile -Parent
if (-not (Test-Path -Path $targetFolder)) {
New-Item -ItemType "Directory" -Path $targetFolder -Force
}
Get-AzStorageBlobContent -Blob $blob.Name -Container $contentContainer -Destination $targetFile
}
$continuationToken = $blobs[$blobs.Count - 1].ContinuationToken;
}
while ($null -ne $continuationToken)
"Downloaded $totalFiles files from container $contentContainer"
"Export completed"