Private/VirtualNetwork.ps1

function New-VirtualNetwork{
    [CmdletBinding()]
    param(
        [Parameter(ValueFromPipeline)][pscustomobject]$Payload
    )

    #Create Vnet
    $RGName = $Payload.RGName
    $Location = $Payload.Location
    $NameSuffix = $Payload.NameSuffix

    $VnetName=$RG+"Vnet"
    $FirewallSubnetName="AzureFirewallSubnet"
    $JumboxSubnetName="snet-$NameSuffix"
    $VirtualNetworkAddressPrefix="192.168.0.0/16"
    $FirewallAddressPrefix ="192.168.1.0/24"
    $JumboxAddressPrefix ="192.168.0.0/24"

    $VnetName="vnet-" + $NameSuffix
    
    New-AzVirtualNetwork -ResourceGroupName $RGName -Name $VnetName -AddressPrefix $VirtualNetworkAddressPrefix -Location $Location

    #Configure subnets
    $vnet = Get-AzVirtualNetwork -ResourceGroupName $RGName -Name $VnetName
    Add-AzVirtualNetworkSubnetConfig -Name AzureFirewallSubnet -VirtualNetwork $vnet -AddressPrefix $FirewallAddressPrefix
    Add-AzVirtualNetworkSubnetConfig -Name $JumboxSubnetName -VirtualNetwork $vnet -AddressPrefix $JumboxAddressPrefix
    Set-AzVirtualNetwork -VirtualNetwork $vnet

    $Payload | Add-Member -MemberType NoteProperty -Name 'VnetName' -Value $VnetName
    $Payload | Add-Member -MemberType NoteProperty -Name 'FirewallSubnetName' -Value $FirewallSubnetName
    $Payload | Add-Member -MemberType NoteProperty -Name 'JumboxSubnetName' -Value $JumboxSubnetName
    $Payload | Add-Member -MemberType NoteProperty -Name 'VirtualNetworkAddressPrefix' -Value $VirtualNetworkAddressPrefix
    $Payload | Add-Member -MemberType NoteProperty -Name 'FirewallAddressPrefix' -Value $FirewallAddressPrefix
    $Payload | Add-Member -MemberType NoteProperty -Name 'JumboxAddressPrefix' -Value $JumboxAddressPrefix

    [pscustomobject]$Payload
}