scripts/Copy-PSBicepApiManagementApiWithGUI.ps1

function Copy-PSBicepApiManagementApiWithGUI()
{
    $ErrorActionPreference = 'Stop'

    try{
        Get-AzContext|Out-Null
    }
    catch{
        connect-azAccount|Out-Null
    }

    function Get-ApiManagement($env){
        Get-AzSubscription | Out-ConsoleGridView -Title "Select $env subscription" -OutputMode Single | Set-AzContext | Out-Null

        $apim = Get-AzApiManagement | ForEach-Object{
            $obj = "" |Select-Object Name,ResourceGroup, Apim
            $obj.Name = $_.Name
            $obj.ResourceGroup = $_.ResourceGroupName
            $obj.apim = $_
            $obj
        } | Out-ConsoleGridView -Title "Select $env Api Management" -OutputMode Single
        if($null -eq $apim)
        {
            throw "No api management service selected"
        }
        $apim.Apim
    }
    $SubscriptionIdFinder = [regex]'^/subscriptions/(.*?)/.*$'

    $sourceApiManagement = Get-ApiManagement -env 'source'
    $sourceSubscriptionId = $SubscriptionIdFinder.Replace($sourceApiManagement.Id,'$1')

    $sourceVersionSet = $null
    $Response = Read-Host -Prompt 'Do you want to export a single api version or all versions of an api? [ONE/all]'
    if($response -ne 'all')
    {
        $sourceapimcontext = New-AzApiManagementContext -ResourceId $sourceApiManagement.Id
        $sourceapiobj = Get-AzApiManagementApi -Context $sourceapimcontext | ForEach-Object{
            $obj = "" |Select-Object Name,Path,ApiVersion,ApiId,Api
            $obj.Name = $_.Name
            $obj.Path = $_.Path
            $obj.ApiVersion = $_.ApiVersion
            $obj.ApiId = $_.ApiId
            $obj.Api = $_
            $obj
        } | Out-ConsoleGridView -Title "Select source Api" -OutputMode Single

        if($null -eq $sourceapiobj)
        {
            throw "No api selected"
        }

        $sourceApi = $sourceapiobj.Api
        $sourceelement = $sourceApi.ApiId
    }
    else{
        $sourceapimcontext = New-AzApiManagementContext -ResourceId $sourceApiManagement.Id
        $sourceVersionSetObj = Get-AzApiManagementApiVersionSet -Context $sourceapimcontext | ForEach-Object{
            $obj = "" |Select-Object Name,VersionSetId
            $obj.Name = $_.DisplayName
            $obj.VersionSetId = $_.ApiVersionSetId
            $obj
        } | Out-ConsoleGridView -Title "Select source Api Version set" -OutputMode Single

        if($null -eq $sourceVersionSetObj)
        {
            throw "No api version selected"
        }

        $sourceVersionSet = $sourceVersionSetObj
        $sourceelement = $sourceVersionSet.VersionSetId

    }

    $targetFile = "$Env:temp\$($sourceelement)"

    write-host "Source"
    write-host " API Mamanagement"
    write-host " SubscriptionId: $sourceSubscriptionId"
    write-host " Resource Group: $($sourceApiManagement.ResourceGroupName)"
    write-host " Name: $($sourceApiManagement.Name)"

    if($null -ne $sourceVersionSet){
        write-host " API version set"
        write-host " Name: $($sourceVersionSet.Name)"
        write-host " Id: $($sourceVersionSet.VersionSetId)"
    }
    else{
        write-host " API"
        write-host " Name: $($sourceapi.Name)"
        write-host " Version: $($sourceapi.ApiVersion)"
        write-host " Id: $($sourceapi.ApiId)"
    }
    write-host ""
    write-host "Temporary target file: $targetFile"
    write-host ""
    if($null -ne $sourceVersionSet){
        write-host "Executing '.\Export-PSBicepApiManagementApiVersionSet -SubscriptionId '$sourceSubscriptionId' -ResourceGroupName '$($sourceApiManagement.ResourceGroupName)' -ApiManagementName '$($sourceApiManagement.Name)' -ApiVersionSetId $($sourceVersionSet.VersionSetId) -TargetFile '$($targetFile)''"
        Export-PSBicepApiManagementApiVersionSet -SubscriptionId $sourceSubscriptionId -ResourceGroupName $sourceApiManagement.ResourceGroupName -ApiManagementName $sourceApiManagement.Name -ApiVersionSetId $sourceVersionSet.VersionSetId -TargetFile $targetFile
    }
    else{
        write-host "Executing '.\Export-PSBicepApiManagementApi -SubscriptionId '$sourceSubscriptionId' -ResourceGroupName '$($sourceApiManagement.ResourceGroupName)' -ApiManagementName '$($sourceApiManagement.Name)' -ApiId '$($sourceapi.ApiId)' -TargetFile '$($targetFile)''"
        Export-PSBicepApiManagementApi -SubscriptionId $sourceSubscriptionId -ResourceGroupName $sourceApiManagement.ResourceGroupName -ApiManagementName $sourceApiManagement.Name -ApiId $sourceapi.ApiId -TargetFile $targetFile
    }
    $targetApiManagement = Get-ApiManagement -env 'target'
    $TargetSubscriptionId = $SubscriptionIdFinder.Replace($targetApiManagement.Id,'$1')

    write-host "Target"
    write-host " API Mamanagement"
    write-host " SubscriptionId: $TargetSubscriptionId"
    write-host " Resource Group: $($targetApiManagement.ResourceGroupName)"
    write-host " Name: $($targetApiManagement.Name)"
    write-host ""

    write-host "Executing '.\Import-PSBicepApiManagementApi -SubscriptionId '$TargetSubscriptionId' -ResourceGroupName '$($targetApiManagement.ResourceGroupName)' -ApiManagementName '$($targetApiManagement.Name)' -TargetFile '$($targetFile)''"
    Import-PSBicepApiManagementApi -SubscriptionId $TargetSubscriptionId -ResourceGroupName $targetApiManagement.ResourceGroupName -ApiManagementName $targetApiManagement.Name -TargetFile $targetFile

}