functions/Network/Invoke-AVDMFNetwork.ps1

function Invoke-AVDMFNetwork {
    [CmdletBinding()]
    param (

    )

    #Initialize Variables
    $bicepVirtualNetwork = "$($moduleRoot)\internal\Bicep\Network\Network.bicep"


    foreach ($rg in $script:ResourceGroups.Keys) {
        if ($script:ResourceGroups[$rg].ResourceCategory -eq 'Network') {
            $templateParams = Initialize-AVDMFNetwork -ResourceGroupName $rg
            try{
                $null = Get-AzResourceGroup -Name $rg -ErrorAction Stop
            }
            catch{
                New-AzResourceGroup -Name $rg -Location $script:Location
            }

            New-AzResourceGroupDeployment -ResourceGroupName $rg -Mode Complete -TemplateFile $bicepVirtualNetwork @templateParams -ErrorAction Stop -Confirm:$false -Force
        }
    }

    # Create remote peerings
    if($script:RemotePeerings.count){
        # TODO: THERE IS A BUG HERE - need to ensure we change context to the right subscription then back to the current one.

        $bicepRemotePeerings = "$($moduleRoot)\internal\Bicep\Network\RemotePeerings.bicep"
        $templateParams =  Initialize-AVDMFRemotePeering

        $currentSubscription = (Get-AzContext).Subscription.Id
        $targetSubscription = $templateParams.RemotePeerings.SubscriptionId

        Write-PSFMessage -Level Verbose -Message "Switching to remote network subscription context ({0})" -f $targetSubscription
        $null = Set-AzContext -SubscriptionId = $templateParams.RemotePeerings.SubscriptionId

        New-AzResourceGroupDeployment -ResourceGroupName $rg -TemplateFile $bicepRemotePeerings @templateParams -ErrorAction Stop -Confirm:$false -Force

        Write-PSFMessage -Level Verbose -Message "Switching back to local subscription context ({0})" -f $targetSubscription
        $null = Set-AzContext -SubscriptionId = $currentSubscription
    }


}