pspulumiyaml.azurenative.network.psm1

using module @{ ModuleName = "PSPulumiYaml"; ModuleVersion = "0.0.3"; GUID = "909344e0-a08f-45f6-8177-80e36bb2ba58" }
function Invoke-AzureNativeFunctionNetworkGetEndpoint
{
    param (
        [parameter(mandatory=$False,HelpMessage='The type of the Traffic Manager endpoint.)')]
        [string]
        $endpointType,
        [parameter(mandatory=$False,HelpMessage='The name of the Traffic Manager endpoint.)')]
        [string]
        $endpointName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group containing the Traffic Manager endpoint.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Traffic Manager profile.)')]
        [string]
        $profileName
    )

    process
    {
        $arguments = @{}
        $arguments["endpointName"] = $endpointName
        $arguments["endpointType"] = $endpointType
        $arguments["profileName"] = $profileName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getEndpoint -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualNetworkGatewayBgpPeerStatus
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The IP address of the peer to retrieve the status of.)')]
        [string]
        $peer,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network gateway.)')]
        [string]
        $virtualNetworkGatewayName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualNetworkGatewayName"] = $virtualNetworkGatewayName

        if($PSBoundParameters.Keys -icontains 'peer')
        {
            $arguments["peer"] = $peer
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualNetworkGatewayBgpPeerStatus -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkListDnsResolverByVirtualNetwork
{
    param (
        [parameter(mandatory=$False,HelpMessage='The maximum number of results to return. If not specified, returns up to 100 results.)')]
        [int]
        $top,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network.)')]
        [string]
        $virtualNetworkName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualNetworkName"] = $virtualNetworkName

        if($PSBoundParameters.Keys -icontains 'top')
        {
            $arguments["top"] = $top
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:listDnsResolverByVirtualNetwork -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetP2sVpnGatewayP2sVpnConnectionHealthDetailed
{
    param (
        [parameter(mandatory=$False,HelpMessage='The list of p2s vpn user names whose p2s vpn connection detailed health to retrieve for.)')]
        [string[]]
        $vpnUserNamesFilter,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The sas-url to download the P2S Vpn connection health detail.)')]
        [string]
        $outputBlobSasUrl,
        [parameter(mandatory=$False,HelpMessage='The name of the P2SVpnGateway.)')]
        [string]
        $gatewayName
    )

    process
    {
        $arguments = @{}
        $arguments["gatewayName"] = $gatewayName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'vpnUserNamesFilter')
        {
            $arguments["vpnUserNamesFilter"] = $vpnUserNamesFilter
        }

        if($PSBoundParameters.Keys -icontains 'outputBlobSasUrl')
        {
            $arguments["outputBlobSasUrl"] = $outputBlobSasUrl
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getP2sVpnGatewayP2sVpnConnectionHealthDetailed -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetDdosProtectionPlan
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the DDoS protection plan.)')]
        [string]
        $ddosProtectionPlanName
    )

    process
    {
        $arguments = @{}
        $arguments["ddosProtectionPlanName"] = $ddosProtectionPlanName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getDdosProtectionPlan -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetInboundEndpoint
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the DNS resolver.)')]
        [string]
        $dnsResolverName,
        [parameter(mandatory=$False,HelpMessage='The name of the inbound endpoint for the DNS resolver.)')]
        [string]
        $inboundEndpointName
    )

    process
    {
        $arguments = @{}
        $arguments["dnsResolverName"] = $dnsResolverName
        $arguments["inboundEndpointName"] = $inboundEndpointName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getInboundEndpoint -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetNatRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the nat rule.)')]
        [string]
        $natRuleName,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VpnGateway.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the gateway.)')]
        [string]
        $gatewayName
    )

    process
    {
        $arguments = @{}
        $arguments["gatewayName"] = $gatewayName
        $arguments["natRuleName"] = $natRuleName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getNatRule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetPrivateEndpoint
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint.)')]
        [string]
        $privateEndpointName
    )

    process
    {
        $arguments = @{}
        $arguments["privateEndpointName"] = $privateEndpointName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getPrivateEndpoint -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetLoadBalancerBackendAddressPool
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the backend address pool.)')]
        [string]
        $backendAddressPoolName,
        [parameter(mandatory=$False,HelpMessage='The name of the load balancer.)')]
        [string]
        $loadBalancerName
    )

    process
    {
        $arguments = @{}
        $arguments["backendAddressPoolName"] = $backendAddressPoolName
        $arguments["loadBalancerName"] = $loadBalancerName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getLoadBalancerBackendAddressPool -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetRecordSet
{
    param (
        [parameter(mandatory=$False,HelpMessage='The type of DNS record in this record set.)')]
        [string]
        $recordType,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the record set, relative to the name of the zone.)')]
        [string]
        $relativeRecordSetName,
        [parameter(mandatory=$False,HelpMessage='The name of the DNS zone (without a terminating dot).)')]
        [string]
        $zoneName
    )

    process
    {
        $arguments = @{}
        $arguments["recordType"] = $recordType
        $arguments["relativeRecordSetName"] = $relativeRecordSetName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["zoneName"] = $zoneName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getRecordSet -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetPublicIPPrefix
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the public IP prefix.)')]
        [string]
        $publicIpPrefixName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["publicIpPrefixName"] = $publicIpPrefixName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getPublicIPPrefix -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetBastionShareableLink
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the Bastion Host.)')]
        [string]
        $bastionHostName,
        [parameter(mandatory=$False,HelpMessage='List of VM references.)')]
        $vms,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["bastionHostName"] = $bastionHostName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'vms')
        {
            $arguments["vms"] = $vms
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getBastionShareableLink -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetNetworkVirtualAppliance
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of Network Virtual Appliance.)')]
        [string]
        $networkVirtualApplianceName
    )

    process
    {
        $arguments = @{}
        $arguments["networkVirtualApplianceName"] = $networkVirtualApplianceName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getNetworkVirtualAppliance -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetDnsResolver
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the DNS resolver.)')]
        [string]
        $dnsResolverName
    )

    process
    {
        $arguments = @{}
        $arguments["dnsResolverName"] = $dnsResolverName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getDnsResolver -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetConnectionMonitor
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the connection monitor.)')]
        [string]
        $connectionMonitorName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group containing Network Watcher.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Network Watcher resource.)')]
        [string]
        $networkWatcherName
    )

    process
    {
        $arguments = @{}
        $arguments["connectionMonitorName"] = $connectionMonitorName
        $arguments["networkWatcherName"] = $networkWatcherName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getConnectionMonitor -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetHubVirtualNetworkConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the vpn connection.)')]
        [string]
        $connectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualHub.)')]
        [string]
        $virtualHubName,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VirtualHub.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["connectionName"] = $connectionName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualHubName"] = $virtualHubName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getHubVirtualNetworkConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetDscpConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource.)')]
        [string]
        $dscpConfigurationName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["dscpConfigurationName"] = $dscpConfigurationName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getDscpConfiguration -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualNetworkGatewayConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network gateway connection.)')]
        [string]
        $virtualNetworkGatewayConnectionName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualNetworkGatewayConnectionName"] = $virtualNetworkGatewayConnectionName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualNetworkGatewayConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVpnServerConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VpnServerConfiguration.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the VpnServerConfiguration being retrieved.)')]
        [string]
        $vpnServerConfigurationName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["vpnServerConfigurationName"] = $vpnServerConfigurationName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVpnServerConfiguration -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetServiceEndpointPolicyDefinition
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the service endpoint policy name.)')]
        [string]
        $serviceEndpointPolicyName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the service endpoint policy definition name.)')]
        [string]
        $serviceEndpointPolicyDefinitionName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["serviceEndpointPolicyDefinitionName"] = $serviceEndpointPolicyDefinitionName
        $arguments["serviceEndpointPolicyName"] = $serviceEndpointPolicyName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getServiceEndpointPolicyDefinition -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetConnectivityConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager connectivity configuration.)')]
        [string]
        $configurationName
    )

    process
    {
        $arguments = @{}
        $arguments["configurationName"] = $configurationName
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getConnectivityConfiguration -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualNetworkGateway
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network gateway.)')]
        [string]
        $virtualNetworkGatewayName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualNetworkGatewayName"] = $virtualNetworkGatewayName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualNetworkGateway -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetIpAllocation
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the IpAllocation.)')]
        [string]
        $ipAllocationName
    )

    process
    {
        $arguments = @{}
        $arguments["ipAllocationName"] = $ipAllocationName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getIpAllocation -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetNspAssociation
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the NSP association.)')]
        [string]
        $associationName,
        [parameter(mandatory=$False,HelpMessage='The name of the network security perimeter.)')]
        [string]
        $networkSecurityPerimeterName
    )

    process
    {
        $arguments = @{}
        $arguments["associationName"] = $associationName
        $arguments["networkSecurityPerimeterName"] = $networkSecurityPerimeterName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getNspAssociation -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetSubscriptionNetworkManagerConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name for the network manager connection.)')]
        [string]
        $networkManagerConnectionName
    )

    process
    {
        $arguments = @{}
        $arguments["networkManagerConnectionName"] = $networkManagerConnectionName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getSubscriptionNetworkManagerConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualHubBgpConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the connection.)')]
        [string]
        $connectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualHub.)')]
        [string]
        $virtualHubName,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VirtualHub.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["connectionName"] = $connectionName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualHubName"] = $virtualHubName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualHubBgpConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
class ApplicationGatewayProbeHealthResponseMatch
{
    [string[]] $statusCodes
    [string] $body
}
function New-AzureNativeTypeNetworkApplicationGatewayProbeHealthResponseMatch
{
    param (
        [parameter(mandatory=$False,HelpMessage='Allowed ranges of healthy status codes. Default range of healthy status codes is 200-399.)')]
        [string[]]
        $statusCodes,
        [parameter(mandatory=$False,HelpMessage='Body that must be contained in the health response. Default value is empty.)')]
        [string]
        $body
    )

    process
    {
        return $([ApplicationGatewayProbeHealthResponseMatch]$PSBoundParameters)
    }
}
class SubResource
{
    [string] $id
}
function New-AzureNativeTypeNetworkSubResource
{
    param (
        [parameter(mandatory=$False,HelpMessage='Resource Id.)')]
        [string]
        $id
    )

    process
    {
        return $([SubResource]$PSBoundParameters)
    }
}
function Invoke-AzureNativeFunctionNetworkGetApplicationGatewayBackendHealthOnDemand
{
    param (
        [parameter(mandatory=$False,HelpMessage='The protocol used for the probe.)')]
        [string]
        [ArgumentCompletions('Http', 'Https')]
        $protocol,
        [parameter(mandatory=$False,HelpMessage='Criterion for classifying a healthy probe response.)')]
        [ApplicationGatewayProbeHealthResponseMatch]
        $match,
        [parameter(mandatory=$False,HelpMessage='Relative path of probe. Valid path starts from ''/''. Probe is sent to <Protocol>://<host>:<port><path>.)')]
        [string]
        $path,
        [parameter(mandatory=$False,HelpMessage='Reference to backend pool of application gateway to which probe request will be sent.)')]
        [SubResource]
        $backendAddressPool,
        [parameter(mandatory=$False,HelpMessage='Host name to send the probe to.)')]
        [string]
        $host,
        [parameter(mandatory=$False,HelpMessage='Reference to backend http setting of application gateway to be used for test probe.)')]
        [SubResource]
        $backendHttpSettings,
        [parameter(mandatory=$False,HelpMessage='Whether the host header should be picked from the backend http settings. Default value is false.)')]
        [bool]
        $pickHostNameFromBackendHttpSettings,
        [parameter(mandatory=$False,HelpMessage='Expands BackendAddressPool and BackendHttpSettings referenced in backend health.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The probe timeout in seconds. Probe marked as failed if valid response is not received with this timeout period. Acceptable values are from 1 second to 86400 seconds.)')]
        [int]
        $timeout,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the application gateway.)')]
        [string]
        $applicationGatewayName
    )

    process
    {
        $arguments = @{}
        $arguments["applicationGatewayName"] = $applicationGatewayName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'protocol')
        {
            $arguments["protocol"] = $protocol
        }

        if($PSBoundParameters.Keys -icontains 'match')
        {
            $arguments["match"] = $match
        }

        if($PSBoundParameters.Keys -icontains 'path')
        {
            $arguments["path"] = $path
        }

        if($PSBoundParameters.Keys -icontains 'backendAddressPool')
        {
            $arguments["backendAddressPool"] = $backendAddressPool
        }

        if($PSBoundParameters.Keys -icontains 'host')
        {
            $arguments["host"] = $host
        }

        if($PSBoundParameters.Keys -icontains 'backendHttpSettings')
        {
            $arguments["backendHttpSettings"] = $backendHttpSettings
        }

        if($PSBoundParameters.Keys -icontains 'pickHostNameFromBackendHttpSettings')
        {
            $arguments["pickHostNameFromBackendHttpSettings"] = $pickHostNameFromBackendHttpSettings
        }

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        if($PSBoundParameters.Keys -icontains 'timeout')
        {
            $arguments["timeout"] = $timeout
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getApplicationGatewayBackendHealthOnDemand -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetForwardingRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the DNS forwarding ruleset.)')]
        [string]
        $dnsForwardingRulesetName,
        [parameter(mandatory=$False,HelpMessage='The name of the forwarding rule.)')]
        [string]
        $forwardingRuleName
    )

    process
    {
        $arguments = @{}
        $arguments["dnsForwardingRulesetName"] = $dnsForwardingRulesetName
        $arguments["forwardingRuleName"] = $forwardingRuleName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getForwardingRule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetRoutingIntent
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the RoutingIntent.)')]
        [string]
        $routingIntentName,
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualHub.)')]
        [string]
        $virtualHubName,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the RoutingIntent.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["routingIntentName"] = $routingIntentName
        $arguments["virtualHubName"] = $virtualHubName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getRoutingIntent -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetExpressRouteConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the ExpressRoute connection.)')]
        [string]
        $connectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the ExpressRoute gateway.)')]
        [string]
        $expressRouteGatewayName
    )

    process
    {
        $arguments = @{}
        $arguments["connectionName"] = $connectionName
        $arguments["expressRouteGatewayName"] = $expressRouteGatewayName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getExpressRouteConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetTrafficManagerUserMetricsKey
{
    param (
    )

    process
    {
        $arguments = @{}

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getTrafficManagerUserMetricsKey -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetNetworkInterfaceTapConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network interface.)')]
        [string]
        $networkInterfaceName,
        [parameter(mandatory=$False,HelpMessage='The name of the tap configuration.)')]
        [string]
        $tapConfigurationName
    )

    process
    {
        $arguments = @{}
        $arguments["networkInterfaceName"] = $networkInterfaceName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["tapConfigurationName"] = $tapConfigurationName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getNetworkInterfaceTapConfiguration -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetPrivateLinkServicePrivateEndpointConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the private link service.)')]
        [string]
        $serviceName,
        [parameter(mandatory=$False,HelpMessage='The name of the private end point connection.)')]
        [string]
        $peConnectionName
    )

    process
    {
        $arguments = @{}
        $arguments["peConnectionName"] = $peConnectionName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["serviceName"] = $serviceName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getPrivateLinkServicePrivateEndpointConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetPublicIPAddress
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the public IP address.)')]
        [string]
        $publicIpAddressName
    )

    process
    {
        $arguments = @{}
        $arguments["publicIpAddressName"] = $publicIpAddressName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getPublicIPAddress -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetApplicationGateway
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the application gateway.)')]
        [string]
        $applicationGatewayName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["applicationGatewayName"] = $applicationGatewayName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getApplicationGateway -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetP2sVpnGatewayP2sVpnConnectionHealth
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the P2SVpnGateway.)')]
        [string]
        $gatewayName
    )

    process
    {
        $arguments = @{}
        $arguments["gatewayName"] = $gatewayName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getP2sVpnGatewayP2sVpnConnectionHealth -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkListActiveSecurityUserRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='List of regions.)')]
        [string[]]
        $regions,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='When present, the value can be passed to a subsequent query call (together with the same query and scopes used in the current request) to retrieve the next page of data.)')]
        [string]
        $skipToken
    )

    process
    {
        $arguments = @{}
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'regions')
        {
            $arguments["regions"] = $regions
        }

        if($PSBoundParameters.Keys -icontains 'skipToken')
        {
            $arguments["skipToken"] = $skipToken
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:listActiveSecurityUserRule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetNetworkInterface
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network interface.)')]
        [string]
        $networkInterfaceName
    )

    process
    {
        $arguments = @{}
        $arguments["networkInterfaceName"] = $networkInterfaceName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getNetworkInterface -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkListActiveConnectivityConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='List of regions.)')]
        [string[]]
        $regions,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='When present, the value can be passed to a subsequent query call (together with the same query and scopes used in the current request) to retrieve the next page of data.)')]
        [string]
        $skipToken
    )

    process
    {
        $arguments = @{}
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'regions')
        {
            $arguments["regions"] = $regions
        }

        if($PSBoundParameters.Keys -icontains 'skipToken')
        {
            $arguments["skipToken"] = $skipToken
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:listActiveConnectivityConfiguration -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetFirewallPolicyRuleGroup
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the FirewallPolicyRuleGroup.)')]
        [string]
        $ruleGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Firewall Policy.)')]
        [string]
        $firewallPolicyName
    )

    process
    {
        $arguments = @{}
        $arguments["firewallPolicyName"] = $firewallPolicyName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["ruleGroupName"] = $ruleGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getFirewallPolicyRuleGroup -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetAdminRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration.)')]
        [string]
        $configurationName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration rule collection.)')]
        [string]
        $ruleCollectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the rule.)')]
        [string]
        $ruleName
    )

    process
    {
        $arguments = @{}
        $arguments["configurationName"] = $configurationName
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["ruleCollectionName"] = $ruleCollectionName
        $arguments["ruleName"] = $ruleName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getAdminRule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetSecurityUserConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration.)')]
        [string]
        $configurationName
    )

    process
    {
        $arguments = @{}
        $arguments["configurationName"] = $configurationName
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getSecurityUserConfiguration -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetExpressRoutePort
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of ExpressRoutePort.)')]
        [string]
        $expressRoutePortName
    )

    process
    {
        $arguments = @{}
        $arguments["expressRoutePortName"] = $expressRoutePortName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getExpressRoutePort -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetPrivateZone
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Private DNS zone (without a terminating dot).)')]
        [string]
        $privateZoneName
    )

    process
    {
        $arguments = @{}
        $arguments["privateZoneName"] = $privateZoneName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getPrivateZone -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkListNetworkManagerEffectiveSecurityAdminRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network.)')]
        [string]
        $virtualNetworkName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='When present, the value can be passed to a subsequent query call (together with the same query and scopes used in the current request) to retrieve the next page of data.)')]
        [string]
        $skipToken
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualNetworkName"] = $virtualNetworkName

        if($PSBoundParameters.Keys -icontains 'skipToken')
        {
            $arguments["skipToken"] = $skipToken
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:listNetworkManagerEffectiveSecurityAdminRule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetRoute
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the route table.)')]
        [string]
        $routeTableName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the route.)')]
        [string]
        $routeName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["routeName"] = $routeName
        $arguments["routeTableName"] = $routeTableName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getRoute -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetLoadBalancer
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the load balancer.)')]
        [string]
        $loadBalancerName
    )

    process
    {
        $arguments = @{}
        $arguments["loadBalancerName"] = $loadBalancerName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getLoadBalancer -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetIpGroup
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands resourceIds (of Firewalls/Network Security Groups etc.) back referenced by the IpGroups resource.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the ipGroups.)')]
        [string]
        $ipGroupsName
    )

    process
    {
        $arguments = @{}
        $arguments["ipGroupsName"] = $ipGroupsName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getIpGroup -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetExpressRouteCircuitPeering
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the peering.)')]
        [string]
        $peeringName,
        [parameter(mandatory=$False,HelpMessage='The name of the express route circuit.)')]
        [string]
        $circuitName
    )

    process
    {
        $arguments = @{}
        $arguments["circuitName"] = $circuitName
        $arguments["peeringName"] = $peeringName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getExpressRouteCircuitPeering -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetActiveSessions
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the Bastion Host.)')]
        [string]
        $bastionHostName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["bastionHostName"] = $bastionHostName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getActiveSessions -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetDefaultAdminRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration.)')]
        [string]
        $configurationName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration rule collection.)')]
        [string]
        $ruleCollectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the rule.)')]
        [string]
        $ruleName
    )

    process
    {
        $arguments = @{}
        $arguments["configurationName"] = $configurationName
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["ruleCollectionName"] = $ruleCollectionName
        $arguments["ruleName"] = $ruleName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getDefaultAdminRule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetNspAccessRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the NSP access rule.)')]
        [string]
        $accessRuleName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network security perimeter.)')]
        [string]
        $networkSecurityPerimeterName,
        [parameter(mandatory=$False,HelpMessage='The name of the NSP profile.)')]
        [string]
        $profileName
    )

    process
    {
        $arguments = @{}
        $arguments["accessRuleName"] = $accessRuleName
        $arguments["networkSecurityPerimeterName"] = $networkSecurityPerimeterName
        $arguments["profileName"] = $profileName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getNspAccessRule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetWebApplicationFirewallPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the policy.)')]
        [string]
        $policyName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["policyName"] = $policyName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getWebApplicationFirewallPolicy -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetExpressRouteCrossConnectionPeering
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the peering.)')]
        [string]
        $peeringName,
        [parameter(mandatory=$False,HelpMessage='The name of the ExpressRouteCrossConnection.)')]
        [string]
        $crossConnectionName
    )

    process
    {
        $arguments = @{}
        $arguments["crossConnectionName"] = $crossConnectionName
        $arguments["peeringName"] = $peeringName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getExpressRouteCrossConnectionPeering -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetPacketCapture
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the packet capture session.)')]
        [string]
        $packetCaptureName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network watcher.)')]
        [string]
        $networkWatcherName
    )

    process
    {
        $arguments = @{}
        $arguments["networkWatcherName"] = $networkWatcherName
        $arguments["packetCaptureName"] = $packetCaptureName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getPacketCapture -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetExpressRoutePortAuthorization
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the authorization.)')]
        [string]
        $authorizationName,
        [parameter(mandatory=$False,HelpMessage='The name of the express route port.)')]
        [string]
        $expressRoutePortName
    )

    process
    {
        $arguments = @{}
        $arguments["authorizationName"] = $authorizationName
        $arguments["expressRoutePortName"] = $expressRoutePortName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getExpressRoutePortAuthorization -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualNetworkGatewayLearnedRoutes
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network gateway.)')]
        [string]
        $virtualNetworkGatewayName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualNetworkGatewayName"] = $virtualNetworkGatewayName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualNetworkGatewayLearnedRoutes -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualNetworkGatewayVpnclientConnectionHealth
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network gateway.)')]
        [string]
        $virtualNetworkGatewayName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualNetworkGatewayName"] = $virtualNetworkGatewayName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualNetworkGatewayVpnclientConnectionHealth -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetDnsForwardingRuleset
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the DNS forwarding ruleset.)')]
        [string]
        $dnsForwardingRulesetName
    )

    process
    {
        $arguments = @{}
        $arguments["dnsForwardingRulesetName"] = $dnsForwardingRulesetName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getDnsForwardingRuleset -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetFirewallPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Firewall Policy.)')]
        [string]
        $firewallPolicyName
    )

    process
    {
        $arguments = @{}
        $arguments["firewallPolicyName"] = $firewallPolicyName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getFirewallPolicy -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkListEffectiveConnectivityConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network.)')]
        [string]
        $virtualNetworkName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='When present, the value can be passed to a subsequent query call (together with the same query and scopes used in the current request) to retrieve the next page of data.)')]
        [string]
        $skipToken
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualNetworkName"] = $virtualNetworkName

        if($PSBoundParameters.Keys -icontains 'skipToken')
        {
            $arguments["skipToken"] = $skipToken
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:listEffectiveConnectivityConfiguration -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetNspProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the NSP profile.)')]
        [string]
        $profileName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network security perimeter.)')]
        [string]
        $networkSecurityPerimeterName
    )

    process
    {
        $arguments = @{}
        $arguments["networkSecurityPerimeterName"] = $networkSecurityPerimeterName
        $arguments["profileName"] = $profileName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getNspProfile -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetAzureFirewall
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Azure Firewall.)')]
        [string]
        $azureFirewallName
    )

    process
    {
        $arguments = @{}
        $arguments["azureFirewallName"] = $azureFirewallName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getAzureFirewall -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetCustomIPPrefix
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the custom IP prefix.)')]
        [string]
        $customIpPrefixName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand
    )

    process
    {
        $arguments = @{}
        $arguments["customIpPrefixName"] = $customIpPrefixName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getCustomIPPrefix -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualRouterPeering
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the Virtual Router.)')]
        [string]
        $virtualRouterName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Virtual Router Peering.)')]
        [string]
        $peeringName
    )

    process
    {
        $arguments = @{}
        $arguments["peeringName"] = $peeringName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualRouterName"] = $virtualRouterName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualRouterPeering -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetFrontDoor
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Front Door which is globally unique.)')]
        [string]
        $frontDoorName,
        [parameter(mandatory=$False,HelpMessage='Name of the Resource group within the Azure subscription.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["frontDoorName"] = $frontDoorName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getFrontDoor -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetSecurityPartnerProvider
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Security Partner Provider.)')]
        [string]
        $securityPartnerProviderName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["securityPartnerProviderName"] = $securityPartnerProviderName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getSecurityPartnerProvider -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualHubRouteTableV2
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualHubRouteTableV2.)')]
        [string]
        $routeTableName,
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualHub.)')]
        [string]
        $virtualHubName,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VirtualHubRouteTableV2.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["routeTableName"] = $routeTableName
        $arguments["virtualHubName"] = $virtualHubName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualHubRouteTableV2 -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetHubRouteTable
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the RouteTable.)')]
        [string]
        $routeTableName,
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualHub.)')]
        [string]
        $virtualHubName,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VirtualHub.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["routeTableName"] = $routeTableName
        $arguments["virtualHubName"] = $virtualHubName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getHubRouteTable -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualHub
{
    param (
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VirtualHub.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualHub.)')]
        [string]
        $virtualHubName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualHubName"] = $virtualHubName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualHub -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetNatGateway
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the nat gateway.)')]
        [string]
        $natGatewayName
    )

    process
    {
        $arguments = @{}
        $arguments["natGatewayName"] = $natGatewayName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getNatGateway -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkListFirewallPolicyIdpsSignaturesFilterValue
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Describes the name of the column which values will be returned)')]
        [string]
        $filterName,
        [parameter(mandatory=$False,HelpMessage='The name of the Firewall Policy.)')]
        [string]
        $firewallPolicyName
    )

    process
    {
        $arguments = @{}
        $arguments["firewallPolicyName"] = $firewallPolicyName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'filterName')
        {
            $arguments["filterName"] = $filterName
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:listFirewallPolicyIdpsSignaturesFilterValue -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVpnConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the vpn connection.)')]
        [string]
        $connectionName,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VpnGateway.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the gateway.)')]
        [string]
        $gatewayName
    )

    process
    {
        $arguments = @{}
        $arguments["connectionName"] = $connectionName
        $arguments["gatewayName"] = $gatewayName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVpnConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetFlowLog
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the flow log resource.)')]
        [string]
        $flowLogName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network watcher.)')]
        [string]
        $networkWatcherName
    )

    process
    {
        $arguments = @{}
        $arguments["flowLogName"] = $flowLogName
        $arguments["networkWatcherName"] = $networkWatcherName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getFlowLog -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkListActiveSecurityAdminRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='List of regions.)')]
        [string[]]
        $regions,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='When present, the value can be passed to a subsequent query call (together with the same query and scopes used in the current request) to retrieve the next page of data.)')]
        [string]
        $skipToken
    )

    process
    {
        $arguments = @{}
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'regions')
        {
            $arguments["regions"] = $regions
        }

        if($PSBoundParameters.Keys -icontains 'skipToken')
        {
            $arguments["skipToken"] = $skipToken
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:listActiveSecurityAdminRule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkListEffectiveVirtualNetworkByNetworkManager
{
    param (
        [parameter(mandatory=$False,HelpMessage='Continuation token for pagination, capturing the next page size and offset, as well as the context of the query.)')]
        [string]
        $skipToken,
        [parameter(mandatory=$False,HelpMessage='An optional query parameter which specifies the maximum number of records to be returned by the server.)')]
        [int]
        $top,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='Conditional Members.)')]
        [string]
        $conditionalMembers
    )

    process
    {
        $arguments = @{}
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'skipToken')
        {
            $arguments["skipToken"] = $skipToken
        }

        if($PSBoundParameters.Keys -icontains 'top')
        {
            $arguments["top"] = $top
        }

        if($PSBoundParameters.Keys -icontains 'conditionalMembers')
        {
            $arguments["conditionalMembers"] = $conditionalMembers
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:listEffectiveVirtualNetworkByNetworkManager -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetNetworkManager
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName
    )

    process
    {
        $arguments = @{}
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getNetworkManager -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetExpressRouteCircuitAuthorization
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the authorization.)')]
        [string]
        $authorizationName,
        [parameter(mandatory=$False,HelpMessage='The name of the express route circuit.)')]
        [string]
        $circuitName
    )

    process
    {
        $arguments = @{}
        $arguments["authorizationName"] = $authorizationName
        $arguments["circuitName"] = $circuitName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getExpressRouteCircuitAuthorization -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetRouteFilterRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the rule.)')]
        [string]
        $ruleName,
        [parameter(mandatory=$False,HelpMessage='The name of the route filter.)')]
        [string]
        $routeFilterName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["routeFilterName"] = $routeFilterName
        $arguments["ruleName"] = $ruleName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getRouteFilterRule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetDnsResourceReferenceByTarResources
{
    param (
        [parameter(mandatory=$False,HelpMessage='A list of references to azure resources for which referencing dns records need to be queried.)')]
        $targetResources
    )

    process
    {
        $arguments = @{}

        if($PSBoundParameters.Keys -icontains 'targetResources')
        {
            $arguments["targetResources"] = $targetResources
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getDnsResourceReferenceByTarResources -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetRouteTable
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the route table.)')]
        [string]
        $routeTableName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["routeTableName"] = $routeTableName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getRouteTable -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetSecurityAdminConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration.)')]
        [string]
        $configurationName
    )

    process
    {
        $arguments = @{}
        $arguments["configurationName"] = $configurationName
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getSecurityAdminConfiguration -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetNetworkSecurityGroup
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network security group.)')]
        [string]
        $networkSecurityGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["networkSecurityGroupName"] = $networkSecurityGroupName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getNetworkSecurityGroup -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualNetworkPeering
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network.)')]
        [string]
        $virtualNetworkName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network peering.)')]
        [string]
        $virtualNetworkPeeringName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualNetworkName"] = $virtualNetworkName
        $arguments["virtualNetworkPeeringName"] = $virtualNetworkPeeringName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualNetworkPeering -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVpnSite
{
    param (
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VpnSite.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the VpnSite being retrieved.)')]
        [string]
        $vpnSiteName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["vpnSiteName"] = $vpnSiteName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVpnSite -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkListNetworkManagerDeploymentStatus
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of deployment types.)')]
        $deploymentTypes,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='List of locations.)')]
        [string[]]
        $regions,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='Continuation token for pagination, capturing the next page size and offset, as well as the context of the query.)')]
        [string]
        $skipToken
    )

    process
    {
        $arguments = @{}
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'deploymentTypes')
        {
            $arguments["deploymentTypes"] = $deploymentTypes
        }

        if($PSBoundParameters.Keys -icontains 'regions')
        {
            $arguments["regions"] = $regions
        }

        if($PSBoundParameters.Keys -icontains 'skipToken')
        {
            $arguments["skipToken"] = $skipToken
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:listNetworkManagerDeploymentStatus -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkListEffectiveVirtualNetworkByNetworkGroup
{
    param (
        [parameter(mandatory=$False,HelpMessage='When present, the value can be passed to a subsequent query call (together with the same query and scopes used in the current request) to retrieve the next page of data.)')]
        [string]
        $skipToken,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='The name of the network group to get.)')]
        [string]
        $networkGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["networkGroupName"] = $networkGroupName
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'skipToken')
        {
            $arguments["skipToken"] = $skipToken
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:listEffectiveVirtualNetworkByNetworkGroup -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetConfigurationPolicyGroup
{
    param (
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VpnServerConfiguration.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the ConfigurationPolicyGroup being retrieved.)')]
        [string]
        $configurationPolicyGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the VpnServerConfiguration.)')]
        [string]
        $vpnServerConfigurationName
    )

    process
    {
        $arguments = @{}
        $arguments["configurationPolicyGroupName"] = $configurationPolicyGroupName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["vpnServerConfigurationName"] = $vpnServerConfigurationName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getConfigurationPolicyGroup -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetApplicationGatewayPrivateEndpointConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the application gateway private endpoint connection.)')]
        [string]
        $connectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the application gateway.)')]
        [string]
        $applicationGatewayName
    )

    process
    {
        $arguments = @{}
        $arguments["applicationGatewayName"] = $applicationGatewayName
        $arguments["connectionName"] = $connectionName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getApplicationGatewayPrivateEndpointConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkListDnsForwardingRulesetByVirtualNetwork
{
    param (
        [parameter(mandatory=$False,HelpMessage='The maximum number of results to return. If not specified, returns up to 100 results.)')]
        [int]
        $top,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network.)')]
        [string]
        $virtualNetworkName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualNetworkName"] = $virtualNetworkName

        if($PSBoundParameters.Keys -icontains 'top')
        {
            $arguments["top"] = $top
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:listDnsForwardingRulesetByVirtualNetwork -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetFirewallPolicyRuleCollectionGroup
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the FirewallPolicyRuleCollectionGroup.)')]
        [string]
        $ruleCollectionGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Firewall Policy.)')]
        [string]
        $firewallPolicyName
    )

    process
    {
        $arguments = @{}
        $arguments["firewallPolicyName"] = $firewallPolicyName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["ruleCollectionGroupName"] = $ruleCollectionGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getFirewallPolicyRuleCollectionGroup -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetNetworkGroup
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='The name of the network group to get.)')]
        [string]
        $networkGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["networkGroupName"] = $networkGroupName
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getNetworkGroup -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetServiceEndpointPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the service endpoint policy.)')]
        [string]
        $serviceEndpointPolicyName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["serviceEndpointPolicyName"] = $serviceEndpointPolicyName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getServiceEndpointPolicy -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetExpressRouteCircuit
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of express route circuit.)')]
        [string]
        $circuitName
    )

    process
    {
        $arguments = @{}
        $arguments["circuitName"] = $circuitName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getExpressRouteCircuit -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetExpressRouteGateway
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the ExpressRoute gateway.)')]
        [string]
        $expressRouteGatewayName
    )

    process
    {
        $arguments = @{}
        $arguments["expressRouteGatewayName"] = $expressRouteGatewayName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getExpressRouteGateway -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualNetworkLink
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network link.)')]
        [string]
        $virtualNetworkLinkName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Private DNS zone (without a terminating dot).)')]
        [string]
        $privateZoneName
    )

    process
    {
        $arguments = @{}
        $arguments["privateZoneName"] = $privateZoneName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualNetworkLinkName"] = $virtualNetworkLinkName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualNetworkLink -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetNetworkSecurityPerimeter
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network security perimeter.)')]
        [string]
        $networkSecurityPerimeterName
    )

    process
    {
        $arguments = @{}
        $arguments["networkSecurityPerimeterName"] = $networkSecurityPerimeterName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getNetworkSecurityPerimeter -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualNetworkGatewayAdvertisedRoutes
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The IP address of the peer.)')]
        [string]
        $peer,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network gateway.)')]
        [string]
        $virtualNetworkGatewayName
    )

    process
    {
        $arguments = @{}
        $arguments["peer"] = $peer
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualNetworkGatewayName"] = $virtualNetworkGatewayName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualNetworkGatewayAdvertisedRoutes -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetP2sVpnGateway
{
    param (
        [parameter(mandatory=$False,HelpMessage='The resource group name of the P2SVpnGateway.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the gateway.)')]
        [string]
        $gatewayName
    )

    process
    {
        $arguments = @{}
        $arguments["gatewayName"] = $gatewayName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getP2sVpnGateway -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetPrivateRecordSet
{
    param (
        [parameter(mandatory=$False,HelpMessage='The type of DNS record in this record set.)')]
        [string]
        $recordType,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the record set, relative to the name of the zone.)')]
        [string]
        $relativeRecordSetName,
        [parameter(mandatory=$False,HelpMessage='The name of the Private DNS zone (without a terminating dot).)')]
        [string]
        $privateZoneName
    )

    process
    {
        $arguments = @{}
        $arguments["privateZoneName"] = $privateZoneName
        $arguments["recordType"] = $recordType
        $arguments["relativeRecordSetName"] = $relativeRecordSetName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getPrivateRecordSet -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetZone
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the DNS zone (without a terminating dot).)')]
        [string]
        $zoneName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["zoneName"] = $zoneName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getZone -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetNetworkWatcher
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the network watcher.)')]
        [string]
        $networkWatcherName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["networkWatcherName"] = $networkWatcherName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getNetworkWatcher -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetNspAssociationsProxy
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the NSP association.)')]
        [string]
        $associationName,
        [parameter(mandatory=$False,HelpMessage='The name of the network security perimeter.)')]
        [string]
        $networkSecurityPerimeterName
    )

    process
    {
        $arguments = @{}
        $arguments["associationName"] = $associationName
        $arguments["networkSecurityPerimeterName"] = $networkSecurityPerimeterName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getNspAssociationsProxy -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetExperiment
{
    param (
        [parameter(mandatory=$False,HelpMessage='The Profile identifier associated with the Tenant and Partner)')]
        [string]
        $profileName,
        [parameter(mandatory=$False,HelpMessage='Name of the Resource group within the Azure subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The Experiment identifier associated with the Experiment)')]
        [string]
        $experimentName
    )

    process
    {
        $arguments = @{}
        $arguments["experimentName"] = $experimentName
        $arguments["profileName"] = $profileName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getExperiment -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualWan
{
    param (
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VirtualWan.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualWAN being retrieved.)')]
        [string]
        $virtualWANName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualWANName"] = $virtualWANName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualWan -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the Web Application Firewall Policy.)')]
        [string]
        $policyName,
        [parameter(mandatory=$False,HelpMessage='Name of the Resource group within the Azure subscription.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["policyName"] = $policyName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getPolicy -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualHubIpConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VirtualHub.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the ipconfig.)')]
        [string]
        $ipConfigName,
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualHub.)')]
        [string]
        $virtualHubName
    )

    process
    {
        $arguments = @{}
        $arguments["ipConfigName"] = $ipConfigName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualHubName"] = $virtualHubName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualHubIpConfiguration -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetStaticMember
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the static member.)')]
        [string]
        $staticMemberName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='The name of the network group.)')]
        [string]
        $networkGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["networkGroupName"] = $networkGroupName
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["staticMemberName"] = $staticMemberName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getStaticMember -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualNetwork
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network.)')]
        [string]
        $virtualNetworkName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualNetworkName"] = $virtualNetworkName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualNetwork -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetDdosCustomPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the DDoS custom policy.)')]
        [string]
        $ddosCustomPolicyName
    )

    process
    {
        $arguments = @{}
        $arguments["ddosCustomPolicyName"] = $ddosCustomPolicyName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getDdosCustomPolicy -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group containing the Traffic Manager profile.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Traffic Manager profile.)')]
        [string]
        $profileName
    )

    process
    {
        $arguments = @{}
        $arguments["profileName"] = $profileName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getProfile -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetP2sVpnServerConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The resource group name of the P2SVpnServerConfiguration.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the P2SVpnServerConfiguration.)')]
        [string]
        $p2SVpnServerConfigurationName,
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualWan.)')]
        [string]
        $virtualWanName
    )

    process
    {
        $arguments = @{}
        $arguments["p2SVpnServerConfigurationName"] = $p2SVpnServerConfigurationName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualWanName"] = $virtualWanName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getP2sVpnServerConfiguration -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetBastionHost
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the Bastion Host.)')]
        [string]
        $bastionHostName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["bastionHostName"] = $bastionHostName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getBastionHost -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualNetworkGatewayVpnclientIpsecParameters
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The virtual network gateway name.)')]
        [string]
        $virtualNetworkGatewayName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualNetworkGatewayName"] = $virtualNetworkGatewayName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualNetworkGatewayVpnclientIpsecParameters -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetManagementGroupNetworkManagerConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The management group Id which uniquely identify the Microsoft Azure management group.)')]
        [string]
        $managementGroupId,
        [parameter(mandatory=$False,HelpMessage='Name for the network manager connection.)')]
        [string]
        $networkManagerConnectionName
    )

    process
    {
        $arguments = @{}
        $arguments["managementGroupId"] = $managementGroupId
        $arguments["networkManagerConnectionName"] = $networkManagerConnectionName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getManagementGroupNetworkManagerConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualNetworkTap
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of virtual network tap.)')]
        [string]
        $tapName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["tapName"] = $tapName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualNetworkTap -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetRulesEngine
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Rules Engine which is unique within the Front Door.)')]
        [string]
        $rulesEngineName,
        [parameter(mandatory=$False,HelpMessage='Name of the Front Door which is globally unique.)')]
        [string]
        $frontDoorName,
        [parameter(mandatory=$False,HelpMessage='Name of the Resource group within the Azure subscription.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["frontDoorName"] = $frontDoorName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["rulesEngineName"] = $rulesEngineName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getRulesEngine -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetUserRuleCollection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration.)')]
        [string]
        $configurationName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration rule collection.)')]
        [string]
        $ruleCollectionName
    )

    process
    {
        $arguments = @{}
        $arguments["configurationName"] = $configurationName
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["ruleCollectionName"] = $ruleCollectionName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getUserRuleCollection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetPrivateLinkService
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the private link service.)')]
        [string]
        $serviceName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["serviceName"] = $serviceName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getPrivateLinkService -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetDefaultUserRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration.)')]
        [string]
        $configurationName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration rule collection.)')]
        [string]
        $ruleCollectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the rule.)')]
        [string]
        $ruleName
    )

    process
    {
        $arguments = @{}
        $arguments["configurationName"] = $configurationName
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["ruleCollectionName"] = $ruleCollectionName
        $arguments["ruleName"] = $ruleName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getDefaultUserRule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetNetworkExperimentProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Resource group within the Azure subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The Profile identifier associated with the Tenant and Partner)')]
        [string]
        $profileName
    )

    process
    {
        $arguments = @{}
        $arguments["profileName"] = $profileName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getNetworkExperimentProfile -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetNetworkProfile
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the public IP prefix.)')]
        [string]
        $networkProfileName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["networkProfileName"] = $networkProfileName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getNetworkProfile -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetAdminRuleCollection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration.)')]
        [string]
        $configurationName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration rule collection.)')]
        [string]
        $ruleCollectionName
    )

    process
    {
        $arguments = @{}
        $arguments["configurationName"] = $configurationName
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["ruleCollectionName"] = $ruleCollectionName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getAdminRuleCollection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualApplianceSite
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Network Virtual Appliance.)')]
        [string]
        $networkVirtualApplianceName,
        [parameter(mandatory=$False,HelpMessage='The name of the site.)')]
        [string]
        $siteName
    )

    process
    {
        $arguments = @{}
        $arguments["networkVirtualApplianceName"] = $networkVirtualApplianceName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["siteName"] = $siteName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualApplianceSite -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetSubnet
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network.)')]
        [string]
        $virtualNetworkName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the subnet.)')]
        [string]
        $subnetName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["subnetName"] = $subnetName
        $arguments["virtualNetworkName"] = $virtualNetworkName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getSubnet -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualRouter
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Virtual Router.)')]
        [string]
        $virtualRouterName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualRouterName"] = $virtualRouterName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualRouter -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetOutboundEndpoint
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the outbound endpoint for the DNS resolver.)')]
        [string]
        $outboundEndpointName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the DNS resolver.)')]
        [string]
        $dnsResolverName
    )

    process
    {
        $arguments = @{}
        $arguments["dnsResolverName"] = $dnsResolverName
        $arguments["outboundEndpointName"] = $outboundEndpointName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getOutboundEndpoint -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetRouteFilter
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced express route bgp peering resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the route filter.)')]
        [string]
        $routeFilterName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["routeFilterName"] = $routeFilterName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getRouteFilter -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetExpressRouteCircuitConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the express route circuit connection.)')]
        [string]
        $connectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the peering.)')]
        [string]
        $peeringName,
        [parameter(mandatory=$False,HelpMessage='The name of the express route circuit.)')]
        [string]
        $circuitName
    )

    process
    {
        $arguments = @{}
        $arguments["circuitName"] = $circuitName
        $arguments["connectionName"] = $connectionName
        $arguments["peeringName"] = $peeringName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getExpressRouteCircuitConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetApplicationSecurityGroup
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the application security group.)')]
        [string]
        $applicationSecurityGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["applicationSecurityGroupName"] = $applicationSecurityGroupName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getApplicationSecurityGroup -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetInboundNatRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Expands referenced resources.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the load balancer.)')]
        [string]
        $loadBalancerName,
        [parameter(mandatory=$False,HelpMessage='The name of the inbound nat rule.)')]
        [string]
        $inboundNatRuleName
    )

    process
    {
        $arguments = @{}
        $arguments["inboundNatRuleName"] = $inboundNatRuleName
        $arguments["loadBalancerName"] = $loadBalancerName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getInboundNatRule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
class OrderBy
{
    [string] $field
    [ArgumentCompletions('Ascending', 'Descending')]
    [string] $order
}
function New-AzureNativeTypeNetworkOrderBy
{
    param (
        [parameter(mandatory=$False,HelpMessage='Describes the actual column name to sort by)')]
        [string]
        $field,
        [parameter(mandatory=$False,HelpMessage='Describes if results should be in ascending/descending order)')]
        [string]
        [ArgumentCompletions('Ascending', 'Descending')]
        $order
    )

    process
    {
        return $([OrderBy]$PSBoundParameters)
    }
}
function Invoke-AzureNativeFunctionNetworkListFirewallPolicyIdpsSignature
{
    param (
        [parameter(mandatory=$False,HelpMessage='The number of the results to return in each page)')]
        [int]
        $resultsPerPage,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The number of records matching the filter to skip)')]
        [int]
        $skip,
        [parameter(mandatory=$False,HelpMessage='Search term in all columns)')]
        [string]
        $search,
        [parameter(mandatory=$False,HelpMessage='Contain all filters names and values)')]
        $filters,
        [parameter(mandatory=$False,HelpMessage='The name of the Firewall Policy.)')]
        [string]
        $firewallPolicyName,
        [parameter(mandatory=$False,HelpMessage='Column to sort response by)')]
        [OrderBy]
        $orderBy
    )

    process
    {
        $arguments = @{}
        $arguments["firewallPolicyName"] = $firewallPolicyName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'resultsPerPage')
        {
            $arguments["resultsPerPage"] = $resultsPerPage
        }

        if($PSBoundParameters.Keys -icontains 'skip')
        {
            $arguments["skip"] = $skip
        }

        if($PSBoundParameters.Keys -icontains 'search')
        {
            $arguments["search"] = $search
        }

        if($PSBoundParameters.Keys -icontains 'filters')
        {
            $arguments["filters"] = $filters
        }

        if($PSBoundParameters.Keys -icontains 'orderBy')
        {
            $arguments["orderBy"] = $orderBy
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:listFirewallPolicyIdpsSignature -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVirtualNetworkGatewayNatRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The resource group name of the Virtual Network Gateway.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the gateway.)')]
        [string]
        $virtualNetworkGatewayName,
        [parameter(mandatory=$False,HelpMessage='The name of the nat rule.)')]
        [string]
        $natRuleName
    )

    process
    {
        $arguments = @{}
        $arguments["natRuleName"] = $natRuleName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualNetworkGatewayName"] = $virtualNetworkGatewayName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVirtualNetworkGatewayNatRule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetVpnGateway
{
    param (
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VpnGateway.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the gateway.)')]
        [string]
        $gatewayName
    )

    process
    {
        $arguments = @{}
        $arguments["gatewayName"] = $gatewayName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getVpnGateway -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetSecurityRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the security rule.)')]
        [string]
        $securityRuleName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network security group.)')]
        [string]
        $networkSecurityGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["networkSecurityGroupName"] = $networkSecurityGroupName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["securityRuleName"] = $securityRuleName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getSecurityRule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetLocalNetworkGateway
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the local network gateway.)')]
        [string]
        $localNetworkGatewayName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["localNetworkGatewayName"] = $localNetworkGatewayName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getLocalNetworkGateway -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetScopeConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='Name for the cross-tenant connection.)')]
        [string]
        $scopeConnectionName
    )

    process
    {
        $arguments = @{}
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["scopeConnectionName"] = $scopeConnectionName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getScopeConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetUserRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration.)')]
        [string]
        $configurationName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration rule collection.)')]
        [string]
        $ruleCollectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the rule.)')]
        [string]
        $ruleName
    )

    process
    {
        $arguments = @{}
        $arguments["configurationName"] = $configurationName
        $arguments["networkManagerName"] = $networkManagerName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["ruleCollectionName"] = $ruleCollectionName
        $arguments["ruleName"] = $ruleName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getUserRule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionNetworkGetPrivateDnsZoneGroup
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint.)')]
        [string]
        $privateEndpointName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the private dns zone group.)')]
        [string]
        $privateDnsZoneGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["privateDnsZoneGroupName"] = $privateDnsZoneGroupName
        $arguments["privateEndpointName"] = $privateEndpointName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:network:getPrivateDnsZoneGroup -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function New-AzureNativeNetworkDefaultUserRule
{
    [Alias('azure_native_network_defaultuserrule')]
    param (
        [parameter(mandatory=$False,HelpMessage='Default rule flag.)')]
        [string]
        $flag,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the rule.)')]
        [string]
        $ruleName,
        [parameter(mandatory=$False,HelpMessage='Whether the rule is custom or default.
Expected value is ''Default''.)'
)]
        [string]
        $kind,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration rule collection.)')]
        [string]
        $ruleCollectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration.)')]
        [string]
        $configurationName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:DefaultUserRule")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["configurationName"] = $configurationName
        $resource.properties["kind"] = $kind
        $resource.properties["networkManagerName"] = $networkManagerName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["ruleCollectionName"] = $ruleCollectionName

        if($PSBoundParameters.Keys -icontains 'flag')
        {
            $resource.properties["flag"] = $flag
        }

        if($PSBoundParameters.Keys -icontains 'ruleName')
        {
            $resource.properties["ruleName"] = $ruleName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkOutboundEndpoint
{
    [Alias('azure_native_network_outboundendpoint')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The geo-location where the resource lives)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The reference to the subnet used for the outbound endpoint.)')]
        [SubResource]
        $subnet,
        [parameter(mandatory=$False,HelpMessage='The name of the outbound endpoint for the DNS resolver.)')]
        [string]
        $outboundEndpointName,
        [parameter(mandatory=$False,HelpMessage='The name of the DNS resolver.)')]
        [string]
        $dnsResolverName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:OutboundEndpoint")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["dnsResolverName"] = $dnsResolverName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'subnet')
        {
            $resource.properties["subnet"] = $subnet
        }

        if($PSBoundParameters.Keys -icontains 'outboundEndpointName')
        {
            $resource.properties["outboundEndpointName"] = $outboundEndpointName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkInboundEndpoint
{
    [Alias('azure_native_network_inboundendpoint')]
    param (
        [parameter(mandatory=$False,HelpMessage='IP configurations for the inbound endpoint.)')]
        $ipConfigurations,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The geo-location where the resource lives)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the inbound endpoint for the DNS resolver.)')]
        [string]
        $inboundEndpointName,
        [parameter(mandatory=$False,HelpMessage='The name of the DNS resolver.)')]
        [string]
        $dnsResolverName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:InboundEndpoint")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["dnsResolverName"] = $dnsResolverName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'ipConfigurations')
        {
            $resource.properties["ipConfigurations"] = $ipConfigurations
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'inboundEndpointName')
        {
            $resource.properties["inboundEndpointName"] = $inboundEndpointName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkConfigurationPolicyGroup
{
    [Alias('azure_native_network_configurationpolicygroup')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the VpnServerConfiguration.)')]
        [string]
        $vpnServerConfigurationName,
        [parameter(mandatory=$False,HelpMessage='Multiple PolicyMembers for VpnServerConfigurationPolicyGroup.)')]
        $policyMembers,
        [parameter(mandatory=$False,HelpMessage='Priority for VpnServerConfigurationPolicyGroup.)')]
        [int]
        $priority,
        [parameter(mandatory=$False,HelpMessage='Shows if this is a Default VpnServerConfigurationPolicyGroup or not.)')]
        [bool]
        $isDefault,
        [parameter(mandatory=$False,HelpMessage='The name of the ConfigurationPolicyGroup.)')]
        [string]
        $configurationPolicyGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the ConfigurationPolicyGroup.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ConfigurationPolicyGroup")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["vpnServerConfigurationName"] = $vpnServerConfigurationName

        if($PSBoundParameters.Keys -icontains 'policyMembers')
        {
            $resource.properties["policyMembers"] = $policyMembers
        }

        if($PSBoundParameters.Keys -icontains 'priority')
        {
            $resource.properties["priority"] = $priority
        }

        if($PSBoundParameters.Keys -icontains 'isDefault')
        {
            $resource.properties["isDefault"] = $isDefault
        }

        if($PSBoundParameters.Keys -icontains 'configurationPolicyGroupName')
        {
            $resource.properties["configurationPolicyGroupName"] = $configurationPolicyGroupName
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkBastionHost
{
    [Alias('azure_native_network_bastionhost')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the Bastion Host.)')]
        [string]
        $bastionHostName,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='IP configuration of the Bastion Host resource.)')]
        $ipConfigurations,
        [parameter(mandatory=$False,HelpMessage='FQDN for the endpoint on which bastion host is accessible.)')]
        [string]
        $dnsName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:BastionHost")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'bastionHostName')
        {
            $resource.properties["bastionHostName"] = $bastionHostName
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'ipConfigurations')
        {
            $resource.properties["ipConfigurations"] = $ipConfigurations
        }

        if($PSBoundParameters.Keys -icontains 'dnsName')
        {
            $resource.properties["dnsName"] = $dnsName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkDefaultAdminRule
{
    [Alias('azure_native_network_defaultadminrule')]
    param (
        [parameter(mandatory=$False,HelpMessage='Default rule flag.)')]
        [string]
        $flag,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the rule.)')]
        [string]
        $ruleName,
        [parameter(mandatory=$False,HelpMessage='Whether the rule is custom or default.
Expected value is ''Default''.)'
)]
        [string]
        $kind,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration rule collection.)')]
        [string]
        $ruleCollectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration.)')]
        [string]
        $configurationName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:DefaultAdminRule")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["configurationName"] = $configurationName
        $resource.properties["kind"] = $kind
        $resource.properties["networkManagerName"] = $networkManagerName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["ruleCollectionName"] = $ruleCollectionName

        if($PSBoundParameters.Keys -icontains 'flag')
        {
            $resource.properties["flag"] = $flag
        }

        if($PSBoundParameters.Keys -icontains 'ruleName')
        {
            $resource.properties["ruleName"] = $ruleName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class ExperimentEndpoint
{
    [string] $name
    [string] $endpoint
}
function New-AzureNativeTypeNetworkExperimentEndpoint
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the endpoint)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The endpoint URL)')]
        [string]
        $endpoint
    )

    process
    {
        return $([ExperimentEndpoint]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkExperiment
{
    [Alias('azure_native_network_experiment')]
    param (
        [parameter(mandatory=$False,HelpMessage='The state of the Experiment)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $enabledState,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The endpoint B of an experiment)')]
        [ExperimentEndpoint]
        $endpointB,
        [parameter(mandatory=$False,HelpMessage='The endpoint A of an experiment)')]
        [ExperimentEndpoint]
        $endpointA,
        [parameter(mandatory=$False,HelpMessage='The description of the details or intents of the Experiment)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='Name of the Resource group within the Azure subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The Profile identifier associated with the Tenant and Partner)')]
        [string]
        $profileName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The Experiment identifier associated with the Experiment)')]
        [string]
        $experimentName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:Experiment")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["profileName"] = $profileName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'enabledState')
        {
            $resource.properties["enabledState"] = $enabledState
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'endpointB')
        {
            $resource.properties["endpointB"] = $endpointB
        }

        if($PSBoundParameters.Keys -icontains 'endpointA')
        {
            $resource.properties["endpointA"] = $endpointA
        }

        if($PSBoundParameters.Keys -icontains 'description')
        {
            $resource.properties["description"] = $description
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'experimentName')
        {
            $resource.properties["experimentName"] = $experimentName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class ExtendedLocation
{
    [ArgumentCompletions('EdgeZone')]
    [string] $type
    [string] $name
}
function New-AzureNativeTypeNetworkExtendedLocation
{
    param (
        [parameter(mandatory=$False,HelpMessage='The type of the extended location.)')]
        [string]
        [ArgumentCompletions('EdgeZone')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The name of the extended location.)')]
        [string]
        $name
    )

    process
    {
        return $([ExtendedLocation]$PSBoundParameters)
    }
}
class PublicIPPrefixSku
{
    [ArgumentCompletions('Regional', 'Global')]
    [string] $tier
    [ArgumentCompletions('Standard')]
    [string] $name
}
function New-AzureNativeTypeNetworkPublicIPPrefixSku
{
    param (
        [parameter(mandatory=$False,HelpMessage='Tier of a public IP prefix SKU.)')]
        [string]
        [ArgumentCompletions('Regional', 'Global')]
        $tier,
        [parameter(mandatory=$False,HelpMessage='Name of a public IP prefix SKU.)')]
        [string]
        [ArgumentCompletions('Standard')]
        $name
    )

    process
    {
        return $([PublicIPPrefixSku]$PSBoundParameters)
    }
}
class NatGatewaySku
{
    [ArgumentCompletions('Standard')]
    [string] $name
}
function New-AzureNativeTypeNetworkNatGatewaySku
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of Nat Gateway SKU.)')]
        [string]
        [ArgumentCompletions('Standard')]
        $name
    )

    process
    {
        return $([NatGatewaySku]$PSBoundParameters)
    }
}
class NatGateway
{
    [SubResource[]] $publicIpAddresses
    [NatGatewaySku] $sku
    [object] $tags
    [string] $location
    [int] $idleTimeoutInMinutes
    [string[]] $zones
    [SubResource[]] $publicIpPrefixes
    [string] $id
}
function New-AzureNativeTypeNetworkNatGateway
{
    param (
        [parameter(mandatory=$False,HelpMessage='An array of public ip addresses associated with the nat gateway resource.)')]
        $publicIpAddresses,
        [parameter(mandatory=$False,HelpMessage='The nat gateway SKU.)')]
        [NatGatewaySku]
        $sku,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The idle timeout of the nat gateway.)')]
        [int]
        $idleTimeoutInMinutes,
        [parameter(mandatory=$False,HelpMessage='A list of availability zones denoting the zone in which Nat Gateway should be deployed.)')]
        [string[]]
        $zones,
        [parameter(mandatory=$False,HelpMessage='An array of public ip prefixes associated with the nat gateway resource.)')]
        $publicIpPrefixes,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id
    )

    process
    {
        return $([NatGateway]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkPublicIPPrefix
{
    [Alias('azure_native_network_publicipprefix')]
    param (
        [parameter(mandatory=$False,HelpMessage='The public IP address version.)')]
        [string]
        [ArgumentCompletions('IPv4', 'IPv6')]
        $publicIPAddressVersion,
        [parameter(mandatory=$False,HelpMessage='The extended location of the public ip address.)')]
        [ExtendedLocation]
        $extendedLocation,
        [parameter(mandatory=$False,HelpMessage='The public IP prefix SKU.)')]
        [PublicIPPrefixSku]
        $sku,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The list of tags associated with the public IP prefix.)')]
        $ipTags,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='NatGateway of Public IP Prefix.)')]
        [NatGateway]
        $natGateway,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The Length of the Public IP Prefix.)')]
        [int]
        $prefixLength,
        [parameter(mandatory=$False,HelpMessage='A list of availability zones denoting the IP allocated for the resource needs to come from.)')]
        [string[]]
        $zones,
        [parameter(mandatory=$False,HelpMessage='The customIpPrefix that this prefix is associated with.)')]
        [SubResource]
        $customIPPrefix,
        [parameter(mandatory=$False,HelpMessage='The name of the public IP prefix.)')]
        [string]
        $publicIpPrefixName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:PublicIPPrefix")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'publicIPAddressVersion')
        {
            $resource.properties["publicIPAddressVersion"] = $publicIPAddressVersion
        }

        if($PSBoundParameters.Keys -icontains 'extendedLocation')
        {
            $resource.properties["extendedLocation"] = $extendedLocation
        }

        if($PSBoundParameters.Keys -icontains 'sku')
        {
            $resource.properties["sku"] = $sku
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'ipTags')
        {
            $resource.properties["ipTags"] = $ipTags
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'natGateway')
        {
            $resource.properties["natGateway"] = $natGateway
        }

        if($PSBoundParameters.Keys -icontains 'prefixLength')
        {
            $resource.properties["prefixLength"] = $prefixLength
        }

        if($PSBoundParameters.Keys -icontains 'zones')
        {
            $resource.properties["zones"] = $zones
        }

        if($PSBoundParameters.Keys -icontains 'customIPPrefix')
        {
            $resource.properties["customIPPrefix"] = $customIPPrefix
        }

        if($PSBoundParameters.Keys -icontains 'publicIpPrefixName')
        {
            $resource.properties["publicIpPrefixName"] = $publicIpPrefixName
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class ServiceEndpointPolicyDefinition
{
    [string] $name
    [string] $service
    [string[]] $serviceResources
    [string] $description
    [string] $id
}
function New-AzureNativeTypeNetworkServiceEndpointPolicyDefinition
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Service endpoint name.)')]
        [string]
        $service,
        [parameter(mandatory=$False,HelpMessage='A list of service resources.)')]
        [string[]]
        $serviceResources,
        [parameter(mandatory=$False,HelpMessage='A description for this rule. Restricted to 140 chars.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id
    )

    process
    {
        return $([ServiceEndpointPolicyDefinition]$PSBoundParameters)
    }
}
class ServiceEndpointPolicy
{
    [string] $location
    [ServiceEndpointPolicyDefinition[]] $serviceEndpointPolicyDefinitions
    [object] $tags
    [string] $id
}
function New-AzureNativeTypeNetworkServiceEndpointPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='A collection of service endpoint policy definitions of the service endpoint policy.)')]
        $serviceEndpointPolicyDefinitions,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id
    )

    process
    {
        return $([ServiceEndpointPolicy]$PSBoundParameters)
    }
}
class ApplicationGatewayIPConfiguration
{
    [SubResource] $subnet
    [string] $name
    [string] $id
}
function New-AzureNativeTypeNetworkApplicationGatewayIPConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='Reference to the subnet resource. A subnet from where application gateway gets its private address.)')]
        [SubResource]
        $subnet,
        [parameter(mandatory=$False,HelpMessage='Name of the IP configuration that is unique within an Application Gateway.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id
    )

    process
    {
        return $([ApplicationGatewayIPConfiguration]$PSBoundParameters)
    }
}
class Route
{
    [string] $nextHopIpAddress
    [string] $id
    [string] $addressPrefix
    [ArgumentCompletions('VirtualNetworkGateway', 'VnetLocal', 'Internet', 'VirtualAppliance', 'None')]
    [string] $nextHopType
    [string] $name
    [bool] $hasBgpOverride
    [string] $type
}
function New-AzureNativeTypeNetworkRoute
{
    param (
        [parameter(mandatory=$False,HelpMessage='The IP address packets should be forwarded to. Next hop values are only allowed in routes where the next hop type is VirtualAppliance.)')]
        [string]
        $nextHopIpAddress,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The destination CIDR to which the route applies.)')]
        [string]
        $addressPrefix,
        [parameter(mandatory=$False,HelpMessage='The type of Azure hop the packet should be sent to.)')]
        [string]
        [ArgumentCompletions('VirtualNetworkGateway', 'VnetLocal', 'Internet', 'VirtualAppliance', 'None')]
        $nextHopType,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='A value indicating whether this route overrides overlapping BGP routes regardless of LPM.)')]
        [bool]
        $hasBgpOverride,
        [parameter(mandatory=$False,HelpMessage='The type of the resource.)')]
        [string]
        $type
    )

    process
    {
        return $([Route]$PSBoundParameters)
    }
}
class RouteTable
{
    [string] $location
    [Route[]] $routes
    [object] $tags
    [bool] $disableBgpRoutePropagation
    [string] $id
}
function New-AzureNativeTypeNetworkRouteTable
{
    param (
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Collection of routes contained within a route table.)')]
        $routes,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Whether to disable the routes learned by BGP on that route table. True means disable.)')]
        [bool]
        $disableBgpRoutePropagation,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id
    )

    process
    {
        return $([RouteTable]$PSBoundParameters)
    }
}
class ServiceEndpointPropertiesFormat
{
    [string[]] $locations
    [string] $service
}
function New-AzureNativeTypeNetworkServiceEndpointPropertiesFormat
{
    param (
        [parameter(mandatory=$False,HelpMessage='A list of locations.)')]
        [string[]]
        $locations,
        [parameter(mandatory=$False,HelpMessage='The type of the endpoint service.)')]
        [string]
        $service
    )

    process
    {
        return $([ServiceEndpointPropertiesFormat]$PSBoundParameters)
    }
}
class Delegation
{
    [string] $name
    [string] $type
    [string] $serviceName
    [string] $id
}
function New-AzureNativeTypeNetworkDelegation
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a subnet. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Resource type.)')]
        [string]
        $type,
        [parameter(mandatory=$False,HelpMessage='The name of the service to whom the subnet should be delegated (e.g. Microsoft.Sql/servers).)')]
        [string]
        $serviceName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id
    )

    process
    {
        return $([Delegation]$PSBoundParameters)
    }
}
class ApplicationSecurityGroup
{
    [string] $location
    [object] $tags
    [string] $id
}
function New-AzureNativeTypeNetworkApplicationSecurityGroup
{
    param (
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id
    )

    process
    {
        return $([ApplicationSecurityGroup]$PSBoundParameters)
    }
}
class SecurityRule
{
    [string] $destinationPortRange
    [string] $type
    [string] $destinationAddressPrefix
    [string[]] $sourcePortRanges
    [string] $sourceAddressPrefix
    [string] $description
    [string[]] $destinationAddressPrefixes
    [ArgumentCompletions('Inbound', 'Outbound')]
    [string] $direction
    [ApplicationSecurityGroup[]] $sourceApplicationSecurityGroups
    [ApplicationSecurityGroup[]] $destinationApplicationSecurityGroups
    [string[]] $destinationPortRanges
    [string] $sourcePortRange
    [ArgumentCompletions('Allow', 'Deny')]
    [string] $access
    [string] $id
    [ArgumentCompletions('Tcp', 'Udp', 'Icmp', 'Esp', '*', 'Ah')]
    [string] $protocol
    [string[]] $sourceAddressPrefixes
    [int] $priority
    [string] $name
}
function New-AzureNativeTypeNetworkSecurityRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The destination port or range. Integer or range between 0 and 65535. Asterisk ''*'' can also be used to match all ports.)')]
        [string]
        $destinationPortRange,
        [parameter(mandatory=$False,HelpMessage='The type of the resource.)')]
        [string]
        $type,
        [parameter(mandatory=$False,HelpMessage='The destination address prefix. CIDR or destination IP range. Asterisk ''*'' can also be used to match all source IPs. Default tags such as ''VirtualNetwork'', ''AzureLoadBalancer'' and ''Internet'' can also be used.)')]
        [string]
        $destinationAddressPrefix,
        [parameter(mandatory=$False,HelpMessage='The source port ranges.)')]
        [string[]]
        $sourcePortRanges,
        [parameter(mandatory=$False,HelpMessage='The CIDR or source IP range. Asterisk ''*'' can also be used to match all source IPs. Default tags such as ''VirtualNetwork'', ''AzureLoadBalancer'' and ''Internet'' can also be used. If this is an ingress rule, specifies where network traffic originates from.)')]
        [string]
        $sourceAddressPrefix,
        [parameter(mandatory=$False,HelpMessage='A description for this rule. Restricted to 140 chars.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The destination address prefixes. CIDR or destination IP ranges.)')]
        [string[]]
        $destinationAddressPrefixes,
        [parameter(mandatory=$False,HelpMessage='The direction of the rule. The direction specifies if rule will be evaluated on incoming or outgoing traffic.)')]
        [string]
        [ArgumentCompletions('Inbound', 'Outbound')]
        $direction,
        [parameter(mandatory=$False,HelpMessage='The application security group specified as source.)')]
        $sourceApplicationSecurityGroups,
        [parameter(mandatory=$False,HelpMessage='The application security group specified as destination.)')]
        $destinationApplicationSecurityGroups,
        [parameter(mandatory=$False,HelpMessage='The destination port ranges.)')]
        [string[]]
        $destinationPortRanges,
        [parameter(mandatory=$False,HelpMessage='The source port or range. Integer or range between 0 and 65535. Asterisk ''*'' can also be used to match all ports.)')]
        [string]
        $sourcePortRange,
        [parameter(mandatory=$False,HelpMessage='The network traffic is allowed or denied.)')]
        [string]
        [ArgumentCompletions('Allow', 'Deny')]
        $access,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Network protocol this rule applies to.)')]
        [string]
        [ArgumentCompletions('Tcp', 'Udp', 'Icmp', 'Esp', '*', 'Ah')]
        $protocol,
        [parameter(mandatory=$False,HelpMessage='The CIDR or source IP ranges.)')]
        [string[]]
        $sourceAddressPrefixes,
        [parameter(mandatory=$False,HelpMessage='The priority of the rule. The value can be between 100 and 4096. The priority number must be unique for each rule in the collection. The lower the priority number, the higher the priority of the rule.)')]
        [int]
        $priority,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name
    )

    process
    {
        return $([SecurityRule]$PSBoundParameters)
    }
}
class NetworkSecurityGroup
{
    [string] $location
    [SecurityRule[]] $securityRules
    [object] $tags
    [string] $id
}
function New-AzureNativeTypeNetworkNetworkSecurityGroup
{
    param (
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='A collection of security rules of the network security group.)')]
        $securityRules,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id
    )

    process
    {
        return $([NetworkSecurityGroup]$PSBoundParameters)
    }
}
class Subnet
{
    [ServiceEndpointPolicy[]] $serviceEndpointPolicies
    [ArgumentCompletions('Enabled', 'Disabled')]
    [string] $privateLinkServiceNetworkPolicies
    [ArgumentCompletions('Enabled', 'Disabled')]
    [string] $privateEndpointNetworkPolicies
    [ApplicationGatewayIPConfiguration[]] $applicationGatewayIpConfigurations
    [string[]] $addressPrefixes
    [string] $type
    [SubResource[]] $ipAllocations
    [RouteTable] $routeTable
    [ServiceEndpointPropertiesFormat[]] $serviceEndpoints
    [Delegation[]] $delegations
    [SubResource] $natGateway
    [string] $name
    [NetworkSecurityGroup] $networkSecurityGroup
    [string] $addressPrefix
    [string] $id
}
function New-AzureNativeTypeNetworkSubnet
{
    param (
        [parameter(mandatory=$False,HelpMessage='An array of service endpoint policies.)')]
        $serviceEndpointPolicies,
        [parameter(mandatory=$False,HelpMessage='Enable or Disable apply network policies on private link service in the subnet.)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $privateLinkServiceNetworkPolicies,
        [parameter(mandatory=$False,HelpMessage='Enable or Disable apply network policies on private end point in the subnet.)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $privateEndpointNetworkPolicies,
        [parameter(mandatory=$False,HelpMessage='Application gateway IP configurations of virtual network resource.)')]
        $applicationGatewayIpConfigurations,
        [parameter(mandatory=$False,HelpMessage='List of address prefixes for the subnet.)')]
        [string[]]
        $addressPrefixes,
        [parameter(mandatory=$False,HelpMessage='Resource type.)')]
        [string]
        $type,
        [parameter(mandatory=$False,HelpMessage='Array of IpAllocation which reference this subnet.)')]
        $ipAllocations,
        [parameter(mandatory=$False,HelpMessage='The reference to the RouteTable resource.)')]
        [RouteTable]
        $routeTable,
        [parameter(mandatory=$False,HelpMessage='An array of service endpoints.)')]
        $serviceEndpoints,
        [parameter(mandatory=$False,HelpMessage='An array of references to the delegations on the subnet.)')]
        $delegations,
        [parameter(mandatory=$False,HelpMessage='Nat gateway associated with this subnet.)')]
        [SubResource]
        $natGateway,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The reference to the NetworkSecurityGroup resource.)')]
        [NetworkSecurityGroup]
        $networkSecurityGroup,
        [parameter(mandatory=$False,HelpMessage='The address prefix for the subnet.)')]
        [string]
        $addressPrefix,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id
    )

    process
    {
        return $([Subnet]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkPrivateEndpoint
{
    [Alias('azure_native_network_privateendpoint')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint.)')]
        [string]
        $privateEndpointName,
        [parameter(mandatory=$False,HelpMessage='The ID of the subnet from which the private IP will be allocated.)')]
        [Subnet]
        $subnet,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='A grouping of information about the connection to the remote resource. Used when the network admin does not have access to approve connections to the remote resource.)')]
        $manualPrivateLinkServiceConnections,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='An array of custom dns configurations.)')]
        $customDnsConfigs,
        [parameter(mandatory=$False,HelpMessage='A grouping of information about the connection to the remote resource.)')]
        $privateLinkServiceConnections,
        [parameter(mandatory=$False,HelpMessage='The extended location of the load balancer.)')]
        [ExtendedLocation]
        $extendedLocation,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:PrivateEndpoint")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'privateEndpointName')
        {
            $resource.properties["privateEndpointName"] = $privateEndpointName
        }

        if($PSBoundParameters.Keys -icontains 'subnet')
        {
            $resource.properties["subnet"] = $subnet
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'manualPrivateLinkServiceConnections')
        {
            $resource.properties["manualPrivateLinkServiceConnections"] = $manualPrivateLinkServiceConnections
        }

        if($PSBoundParameters.Keys -icontains 'customDnsConfigs')
        {
            $resource.properties["customDnsConfigs"] = $customDnsConfigs
        }

        if($PSBoundParameters.Keys -icontains 'privateLinkServiceConnections')
        {
            $resource.properties["privateLinkServiceConnections"] = $privateLinkServiceConnections
        }

        if($PSBoundParameters.Keys -icontains 'extendedLocation')
        {
            $resource.properties["extendedLocation"] = $extendedLocation
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkDnsForwardingRuleset
{
    [Alias('azure_native_network_dnsforwardingruleset')]
    param (
        [parameter(mandatory=$False,HelpMessage='The geo-location where the resource lives)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The reference to the DNS resolver outbound endpoints that are used to route DNS queries matching the forwarding rules in the ruleset to the target DNS servers.)')]
        $dnsResolverOutboundEndpoints,
        [parameter(mandatory=$False,HelpMessage='The name of the DNS forwarding ruleset.)')]
        [string]
        $dnsForwardingRulesetName,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:DnsForwardingRuleset")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'dnsResolverOutboundEndpoints')
        {
            $resource.properties["dnsResolverOutboundEndpoints"] = $dnsResolverOutboundEndpoints
        }

        if($PSBoundParameters.Keys -icontains 'dnsForwardingRulesetName')
        {
            $resource.properties["dnsForwardingRulesetName"] = $dnsForwardingRulesetName
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class PublicIPAddressDnsSettings
{
    [string] $domainNameLabel
    [string] $reverseFqdn
    [string] $fqdn
}
function New-AzureNativeTypeNetworkPublicIPAddressDnsSettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='The domain name label. The concatenation of the domain name label and the regionalized DNS zone make up the fully qualified domain name associated with the public IP address. If a domain name label is specified, an A DNS record is created for the public IP in the Microsoft Azure DNS system.)')]
        [string]
        $domainNameLabel,
        [parameter(mandatory=$False,HelpMessage='The reverse FQDN. A user-visible, fully qualified domain name that resolves to this public IP address. If the reverseFqdn is specified, then a PTR DNS record is created pointing from the IP address in the in-addr.arpa domain to the reverse FQDN.)')]
        [string]
        $reverseFqdn,
        [parameter(mandatory=$False,HelpMessage='The Fully Qualified Domain Name of the A DNS record associated with the public IP. This is the concatenation of the domainNameLabel and the regionalized DNS zone.)')]
        [string]
        $fqdn
    )

    process
    {
        return $([PublicIPAddressDnsSettings]$PSBoundParameters)
    }
}
class PublicIPAddressSku
{
    [ArgumentCompletions('Regional', 'Global')]
    [string] $tier
    [ArgumentCompletions('Basic', 'Standard')]
    [string] $name
}
function New-AzureNativeTypeNetworkPublicIPAddressSku
{
    param (
        [parameter(mandatory=$False,HelpMessage='Tier of a public IP address SKU.)')]
        [string]
        [ArgumentCompletions('Regional', 'Global')]
        $tier,
        [parameter(mandatory=$False,HelpMessage='Name of a public IP address SKU.)')]
        [string]
        [ArgumentCompletions('Basic', 'Standard')]
        $name
    )

    process
    {
        return $([PublicIPAddressSku]$PSBoundParameters)
    }
}
class IpTag
{
    [string] $tag
    [string] $ipTagType
}
function New-AzureNativeTypeNetworkIpTag
{
    param (
        [parameter(mandatory=$False,HelpMessage='The value of the IP tag associated with the public IP. Example: SQL.)')]
        [string]
        $tag,
        [parameter(mandatory=$False,HelpMessage='The IP tag type. Example: FirstPartyUsage.)')]
        [string]
        $ipTagType
    )

    process
    {
        return $([IpTag]$PSBoundParameters)
    }
}
class DdosSettings
{
    [SubResource] $ddosCustomPolicy
    [ArgumentCompletions('Basic', 'Standard')]
    [string] $protectionCoverage
    [bool] $protectedIP
}
function New-AzureNativeTypeNetworkDdosSettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='The DDoS custom policy associated with the public IP.)')]
        [SubResource]
        $ddosCustomPolicy,
        [parameter(mandatory=$False,HelpMessage='The DDoS protection policy customizability of the public IP. Only standard coverage will have the ability to be customized.)')]
        [string]
        [ArgumentCompletions('Basic', 'Standard')]
        $protectionCoverage,
        [parameter(mandatory=$False,HelpMessage='Enables DDoS protection on the public IP.)')]
        [bool]
        $protectedIP
    )

    process
    {
        return $([DdosSettings]$PSBoundParameters)
    }
}
class PublicIPAddress
{
    [PublicIPAddressDnsSettings] $dnsSettings
    [ArgumentCompletions('Static', 'Dynamic')]
    [string] $publicIPAllocationMethod
    [ArgumentCompletions('None', 'Prepare', 'Commit', 'Abort', 'Committed')]
    [string] $migrationPhase
    [SubResource] $publicIPPrefix
    [string] $ipAddress
    [PublicIPAddressSku] $sku
    [NatGateway] $natGateway
    [object] $tags
    [PublicIPAddress] $linkedPublicIPAddress
    [PublicIPAddress] $servicePublicIPAddress
    [IpTag[]] $ipTags
    [ExtendedLocation] $extendedLocation
    [DdosSettings] $ddosSettings
    [string] $location
    [string] $id
    [string[]] $zones
    [ArgumentCompletions('IPv4', 'IPv6')]
    [string] $publicIPAddressVersion
    [int] $idleTimeoutInMinutes
}
function New-AzureNativeTypeNetworkPublicIPAddress
{
    param (
        [parameter(mandatory=$False,HelpMessage='The FQDN of the DNS record associated with the public IP address.)')]
        [PublicIPAddressDnsSettings]
        $dnsSettings,
        [parameter(mandatory=$False,HelpMessage='The public IP address allocation method.)')]
        [string]
        [ArgumentCompletions('Static', 'Dynamic')]
        $publicIPAllocationMethod,
        [parameter(mandatory=$False,HelpMessage='Migration phase of Public IP Address.)')]
        [string]
        [ArgumentCompletions('None', 'Prepare', 'Commit', 'Abort', 'Committed')]
        $migrationPhase,
        [parameter(mandatory=$False,HelpMessage='The Public IP Prefix this Public IP Address should be allocated from.)')]
        [SubResource]
        $publicIPPrefix,
        [parameter(mandatory=$False,HelpMessage='The IP address associated with the public IP address resource.)')]
        [string]
        $ipAddress,
        [parameter(mandatory=$False,HelpMessage='The public IP address SKU.)')]
        [PublicIPAddressSku]
        $sku,
        [parameter(mandatory=$False,HelpMessage='The NatGateway for the Public IP address.)')]
        [NatGateway]
        $natGateway,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The linked public IP address of the public IP address resource.)')]
        [PublicIPAddress]
        $linkedPublicIPAddress,
        [parameter(mandatory=$False,HelpMessage='The service public IP address of the public IP address resource.)')]
        [PublicIPAddress]
        $servicePublicIPAddress,
        [parameter(mandatory=$False,HelpMessage='The list of tags associated with the public IP address.)')]
        $ipTags,
        [parameter(mandatory=$False,HelpMessage='The extended location of the public ip address.)')]
        [ExtendedLocation]
        $extendedLocation,
        [parameter(mandatory=$False,HelpMessage='The DDoS protection custom policy associated with the public IP address.)')]
        [DdosSettings]
        $ddosSettings,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='A list of availability zones denoting the IP allocated for the resource needs to come from.)')]
        [string[]]
        $zones,
        [parameter(mandatory=$False,HelpMessage='The public IP address version.)')]
        [string]
        [ArgumentCompletions('IPv4', 'IPv6')]
        $publicIPAddressVersion,
        [parameter(mandatory=$False,HelpMessage='The idle timeout of the public IP address.)')]
        [int]
        $idleTimeoutInMinutes
    )

    process
    {
        return $([PublicIPAddress]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkVirtualHubIpConfiguration
{
    [Alias('azure_native_network_virtualhubipconfiguration')]
    param (
        [parameter(mandatory=$False,HelpMessage='The reference to the subnet resource.)')]
        [Subnet]
        $subnet,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualHub.)')]
        [string]
        $virtualHubName,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VirtualHub.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The private IP address of the IP configuration.)')]
        [string]
        $privateIPAddress,
        [parameter(mandatory=$False,HelpMessage='The name of the ipconfig.)')]
        [string]
        $ipConfigName,
        [parameter(mandatory=$False,HelpMessage='Name of the Ip Configuration.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The reference to the public IP resource.)')]
        [PublicIPAddress]
        $publicIPAddress,
        [parameter(mandatory=$False,HelpMessage='The private IP address allocation method.)')]
        [string]
        [ArgumentCompletions('Static', 'Dynamic')]
        $privateIPAllocationMethod,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VirtualHubIpConfiguration")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["virtualHubName"] = $virtualHubName

        if($PSBoundParameters.Keys -icontains 'subnet')
        {
            $resource.properties["subnet"] = $subnet
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'privateIPAddress')
        {
            $resource.properties["privateIPAddress"] = $privateIPAddress
        }

        if($PSBoundParameters.Keys -icontains 'ipConfigName')
        {
            $resource.properties["ipConfigName"] = $ipConfigName
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'publicIPAddress')
        {
            $resource.properties["publicIPAddress"] = $publicIPAddress
        }

        if($PSBoundParameters.Keys -icontains 'privateIPAllocationMethod')
        {
            $resource.properties["privateIPAllocationMethod"] = $privateIPAllocationMethod
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkNetworkSecurityPerimeter
{
    [Alias('azure_native_network_networksecurityperimeter')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the network security perimeter.)')]
        [string]
        $networkSecurityPerimeterName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='perimeter guid of the network security perimeter.)')]
        [string]
        $perimeterGuid,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:NetworkSecurityPerimeter")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'networkSecurityPerimeterName')
        {
            $resource.properties["networkSecurityPerimeterName"] = $networkSecurityPerimeterName
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'perimeterGuid')
        {
            $resource.properties["perimeterGuid"] = $perimeterGuid
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class PrivateLinkServiceConnectionState
{
    [string] $description
    [string] $status
    [string] $actionsRequired
}
function New-AzureNativeTypeNetworkPrivateLinkServiceConnectionState
{
    param (
        [parameter(mandatory=$False,HelpMessage='The reason for approval/rejection of the connection.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='Indicates whether the connection has been Approved/Rejected/Removed by the owner of the service.)')]
        [string]
        $status,
        [parameter(mandatory=$False,HelpMessage='A message indicating if changes on the service provider require any updates on the consumer.)')]
        [string]
        $actionsRequired
    )

    process
    {
        return $([PrivateLinkServiceConnectionState]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkApplicationGatewayPrivateEndpointConnection
{
    [Alias('azure_native_network_applicationgatewayprivateendpointconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the private endpoint connection on an application gateway.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the application gateway private endpoint connection.)')]
        [string]
        $connectionName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the application gateway.)')]
        [string]
        $applicationGatewayName,
        [parameter(mandatory=$False,HelpMessage='A collection of information about the state of the connection between service consumer and provider.)')]
        [PrivateLinkServiceConnectionState]
        $privateLinkServiceConnectionState,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ApplicationGatewayPrivateEndpointConnection")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["applicationGatewayName"] = $applicationGatewayName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'connectionName')
        {
            $resource.properties["connectionName"] = $connectionName
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'privateLinkServiceConnectionState')
        {
            $resource.properties["privateLinkServiceConnectionState"] = $privateLinkServiceConnectionState
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkP2sVpnServerConfiguration
{
    [Alias('azure_native_network_p2svpnserverconfiguration')]
    param (
        [parameter(mandatory=$False,HelpMessage='Radius Server root certificate of P2SVpnServerConfiguration.)')]
        $p2SVpnServerConfigRadiusServerRootCertificates,
        [parameter(mandatory=$False,HelpMessage='VPN protocols for the P2SVpnServerConfiguration.)')]
        $vpnProtocols,
        [parameter(mandatory=$False,HelpMessage='VpnClientIpsecPolicies for P2SVpnServerConfiguration.)')]
        $vpnClientIpsecPolicies,
        [parameter(mandatory=$False,HelpMessage='The radius server address property of the P2SVpnServerConfiguration resource for point to site client connection.)')]
        [string]
        $radiusServerAddress,
        [parameter(mandatory=$False,HelpMessage='The radius secret property of the P2SVpnServerConfiguration resource for point to site client connection.)')]
        [string]
        $radiusServerSecret,
        [parameter(mandatory=$False,HelpMessage='The name of the P2SVpnServerConfiguration.)')]
        [string]
        $p2SVpnServerConfigurationName,
        [parameter(mandatory=$False,HelpMessage='The name of the P2SVpnServerConfiguration that is unique within a VirtualWan in a resource group. This name can be used to access the resource along with Paren VirtualWan resource name.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VirtualWan.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Radius client root certificate of P2SVpnServerConfiguration.)')]
        $p2SVpnServerConfigRadiusClientRootCertificates,
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualWan.)')]
        [string]
        $virtualWanName,
        [parameter(mandatory=$False,HelpMessage='VPN client root certificate of P2SVpnServerConfiguration.)')]
        $p2SVpnServerConfigVpnClientRootCertificates,
        [parameter(mandatory=$False,HelpMessage='VPN client revoked certificate of P2SVpnServerConfiguration.)')]
        $p2SVpnServerConfigVpnClientRevokedCertificates,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:P2sVpnServerConfiguration")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["virtualWanName"] = $virtualWanName

        if($PSBoundParameters.Keys -icontains 'p2SVpnServerConfigRadiusServerRootCertificates')
        {
            $resource.properties["p2SVpnServerConfigRadiusServerRootCertificates"] = $p2SVpnServerConfigRadiusServerRootCertificates
        }

        if($PSBoundParameters.Keys -icontains 'vpnProtocols')
        {
            $resource.properties["vpnProtocols"] = $vpnProtocols
        }

        if($PSBoundParameters.Keys -icontains 'vpnClientIpsecPolicies')
        {
            $resource.properties["vpnClientIpsecPolicies"] = $vpnClientIpsecPolicies
        }

        if($PSBoundParameters.Keys -icontains 'radiusServerAddress')
        {
            $resource.properties["radiusServerAddress"] = $radiusServerAddress
        }

        if($PSBoundParameters.Keys -icontains 'radiusServerSecret')
        {
            $resource.properties["radiusServerSecret"] = $radiusServerSecret
        }

        if($PSBoundParameters.Keys -icontains 'p2SVpnServerConfigurationName')
        {
            $resource.properties["p2SVpnServerConfigurationName"] = $p2SVpnServerConfigurationName
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'p2SVpnServerConfigRadiusClientRootCertificates')
        {
            $resource.properties["p2SVpnServerConfigRadiusClientRootCertificates"] = $p2SVpnServerConfigRadiusClientRootCertificates
        }

        if($PSBoundParameters.Keys -icontains 'p2SVpnServerConfigVpnClientRootCertificates')
        {
            $resource.properties["p2SVpnServerConfigVpnClientRootCertificates"] = $p2SVpnServerConfigVpnClientRootCertificates
        }

        if($PSBoundParameters.Keys -icontains 'p2SVpnServerConfigVpnClientRevokedCertificates')
        {
            $resource.properties["p2SVpnServerConfigVpnClientRevokedCertificates"] = $p2SVpnServerConfigVpnClientRevokedCertificates
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class VirtualNetworkGatewayIPConfiguration
{
    [SubResource] $subnet
    [string] $name
    [ArgumentCompletions('Static', 'Dynamic')]
    [string] $privateIPAllocationMethod
    [SubResource] $publicIPAddress
    [string] $id
}
function New-AzureNativeTypeNetworkVirtualNetworkGatewayIPConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The reference to the subnet resource.)')]
        [SubResource]
        $subnet,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The private IP address allocation method.)')]
        [string]
        [ArgumentCompletions('Static', 'Dynamic')]
        $privateIPAllocationMethod,
        [parameter(mandatory=$False,HelpMessage='The reference to the public IP resource.)')]
        [SubResource]
        $publicIPAddress,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id
    )

    process
    {
        return $([VirtualNetworkGatewayIPConfiguration]$PSBoundParameters)
    }
}
class VirtualNetworkGatewaySku
{
    [ArgumentCompletions('Basic', 'HighPerformance', 'Standard', 'UltraPerformance', 'VpnGw1', 'VpnGw2', 'VpnGw3', 'VpnGw4', 'VpnGw5', 'VpnGw1AZ', 'VpnGw2AZ', 'VpnGw3AZ', 'VpnGw4AZ', 'VpnGw5AZ', 'ErGw1AZ', 'ErGw2AZ', 'ErGw3AZ')]
    [string] $tier
    [ArgumentCompletions('Basic', 'HighPerformance', 'Standard', 'UltraPerformance', 'VpnGw1', 'VpnGw2', 'VpnGw3', 'VpnGw4', 'VpnGw5', 'VpnGw1AZ', 'VpnGw2AZ', 'VpnGw3AZ', 'VpnGw4AZ', 'VpnGw5AZ', 'ErGw1AZ', 'ErGw2AZ', 'ErGw3AZ')]
    [string] $name
}
function New-AzureNativeTypeNetworkVirtualNetworkGatewaySku
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gateway SKU tier.)')]
        [string]
        [ArgumentCompletions('Basic', 'HighPerformance', 'Standard', 'UltraPerformance', 'VpnGw1', 'VpnGw2', 'VpnGw3', 'VpnGw4', 'VpnGw5', 'VpnGw1AZ', 'VpnGw2AZ', 'VpnGw3AZ', 'VpnGw4AZ', 'VpnGw5AZ', 'ErGw1AZ', 'ErGw2AZ', 'ErGw3AZ')]
        $tier,
        [parameter(mandatory=$False,HelpMessage='Gateway SKU name.)')]
        [string]
        [ArgumentCompletions('Basic', 'HighPerformance', 'Standard', 'UltraPerformance', 'VpnGw1', 'VpnGw2', 'VpnGw3', 'VpnGw4', 'VpnGw5', 'VpnGw1AZ', 'VpnGw2AZ', 'VpnGw3AZ', 'VpnGw4AZ', 'VpnGw5AZ', 'ErGw1AZ', 'ErGw2AZ', 'ErGw3AZ')]
        $name
    )

    process
    {
        return $([VirtualNetworkGatewaySku]$PSBoundParameters)
    }
}
class AddressSpace
{
    [string[]] $addressPrefixes
}
function New-AzureNativeTypeNetworkAddressSpace
{
    param (
        [parameter(mandatory=$False,HelpMessage='A list of address blocks reserved for this virtual network in CIDR notation.)')]
        [string[]]
        $addressPrefixes
    )

    process
    {
        return $([AddressSpace]$PSBoundParameters)
    }
}
class IPConfigurationBgpPeeringAddress
{
    [string[]] $customBgpIpAddresses
    [string] $ipconfigurationId
}
function New-AzureNativeTypeNetworkIPConfigurationBgpPeeringAddress
{
    param (
        [parameter(mandatory=$False,HelpMessage='The list of custom BGP peering addresses which belong to IP configuration.)')]
        [string[]]
        $customBgpIpAddresses,
        [parameter(mandatory=$False,HelpMessage='The ID of IP configuration which belongs to gateway.)')]
        [string]
        $ipconfigurationId
    )

    process
    {
        return $([IPConfigurationBgpPeeringAddress]$PSBoundParameters)
    }
}
class BgpSettings
{
    [int] $peerWeight
    [IPConfigurationBgpPeeringAddress[]] $bgpPeeringAddresses
    [string] $bgpPeeringAddress
    [int] $asn
}
function New-AzureNativeTypeNetworkBgpSettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='The weight added to routes learned from this BGP speaker.)')]
        [int]
        $peerWeight,
        [parameter(mandatory=$False,HelpMessage='BGP peering address with IP configuration ID for virtual network gateway.)')]
        $bgpPeeringAddresses,
        [parameter(mandatory=$False,HelpMessage='The BGP peering address and BGP identifier of this BGP speaker.)')]
        [string]
        $bgpPeeringAddress,
        [parameter(mandatory=$False,HelpMessage='The BGP speaker''s ASN.)')]
        [int]
        $asn
    )

    process
    {
        return $([BgpSettings]$PSBoundParameters)
    }
}
class VpnClientRevokedCertificate
{
    [string] $name
    [string] $thumbprint
    [string] $id
}
function New-AzureNativeTypeNetworkVpnClientRevokedCertificate
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The revoked VPN client certificate thumbprint.)')]
        [string]
        $thumbprint,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id
    )

    process
    {
        return $([VpnClientRevokedCertificate]$PSBoundParameters)
    }
}
class RadiusServer
{
    [int] $radiusServerScore
    [string] $radiusServerAddress
    [string] $radiusServerSecret
}
function New-AzureNativeTypeNetworkRadiusServer
{
    param (
        [parameter(mandatory=$False,HelpMessage='The initial score assigned to this radius server.)')]
        [int]
        $radiusServerScore,
        [parameter(mandatory=$False,HelpMessage='The address of this radius server.)')]
        [string]
        $radiusServerAddress,
        [parameter(mandatory=$False,HelpMessage='The secret used for this radius server.)')]
        [string]
        $radiusServerSecret
    )

    process
    {
        return $([RadiusServer]$PSBoundParameters)
    }
}
class IpsecPolicy
{
    [int] $saLifeTimeSeconds
    [ArgumentCompletions('MD5', 'SHA1', 'SHA256', 'GCMAES128', 'GCMAES192', 'GCMAES256')]
    [string] $ipsecIntegrity
    [ArgumentCompletions('None', 'PFS1', 'PFS2', 'PFS2048', 'ECP256', 'ECP384', 'PFS24', 'PFS14', 'PFSMM')]
    [string] $pfsGroup
    [ArgumentCompletions('MD5', 'SHA1', 'SHA256', 'SHA384', 'GCMAES256', 'GCMAES128')]
    [string] $ikeIntegrity
    [int] $saDataSizeKilobytes
    [ArgumentCompletions('None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24')]
    [string] $dhGroup
    [ArgumentCompletions('DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128')]
    [string] $ikeEncryption
    [ArgumentCompletions('None', 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES128', 'GCMAES192', 'GCMAES256')]
    [string] $ipsecEncryption
}
function New-AzureNativeTypeNetworkIpsecPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for a site to site VPN tunnel.)')]
        [int]
        $saLifeTimeSeconds,
        [parameter(mandatory=$False,HelpMessage='The IPSec integrity algorithm (IKE phase 1).)')]
        [string]
        [ArgumentCompletions('MD5', 'SHA1', 'SHA256', 'GCMAES128', 'GCMAES192', 'GCMAES256')]
        $ipsecIntegrity,
        [parameter(mandatory=$False,HelpMessage='The Pfs Group used in IKE Phase 2 for new child SA.)')]
        [string]
        [ArgumentCompletions('None', 'PFS1', 'PFS2', 'PFS2048', 'ECP256', 'ECP384', 'PFS24', 'PFS14', 'PFSMM')]
        $pfsGroup,
        [parameter(mandatory=$False,HelpMessage='The IKE integrity algorithm (IKE phase 2).)')]
        [string]
        [ArgumentCompletions('MD5', 'SHA1', 'SHA256', 'SHA384', 'GCMAES256', 'GCMAES128')]
        $ikeIntegrity,
        [parameter(mandatory=$False,HelpMessage='The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for a site to site VPN tunnel.)')]
        [int]
        $saDataSizeKilobytes,
        [parameter(mandatory=$False,HelpMessage='The DH Group used in IKE Phase 1 for initial SA.)')]
        [string]
        [ArgumentCompletions('None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24')]
        $dhGroup,
        [parameter(mandatory=$False,HelpMessage='The IKE encryption algorithm (IKE phase 2).)')]
        [string]
        [ArgumentCompletions('DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128')]
        $ikeEncryption,
        [parameter(mandatory=$False,HelpMessage='The IPSec encryption algorithm (IKE phase 1).)')]
        [string]
        [ArgumentCompletions('None', 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES128', 'GCMAES192', 'GCMAES256')]
        $ipsecEncryption
    )

    process
    {
        return $([IpsecPolicy]$PSBoundParameters)
    }
}
class VpnClientRootCertificate
{
    [string] $publicCertData
    [string] $name
    [string] $id
}
function New-AzureNativeTypeNetworkVpnClientRootCertificate
{
    param (
        [parameter(mandatory=$False,HelpMessage='The certificate public data.)')]
        [string]
        $publicCertData,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id
    )

    process
    {
        return $([VpnClientRootCertificate]$PSBoundParameters)
    }
}
class VpnClientConfiguration
{
    [string] $radiusServerSecret
    [string[]] $vpnClientProtocols
    [string[]] $vpnAuthenticationTypes
    [string] $radiusServerAddress
    [string] $aadAudience
    [VpnClientRevokedCertificate[]] $vpnClientRevokedCertificates
    [RadiusServer[]] $radiusServers
    [string] $aadIssuer
    [IpsecPolicy[]] $vpnClientIpsecPolicies
    [AddressSpace] $vpnClientAddressPool
    [string] $aadTenant
    [VpnClientRootCertificate[]] $vpnClientRootCertificates
}
function New-AzureNativeTypeNetworkVpnClientConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The radius secret property of the VirtualNetworkGateway resource for vpn client connection.)')]
        [string]
        $radiusServerSecret,
        [parameter(mandatory=$False,HelpMessage='VpnClientProtocols for Virtual network gateway.)')]
        $vpnClientProtocols,
        [parameter(mandatory=$False,HelpMessage='VPN authentication types for the virtual network gateway..)')]
        $vpnAuthenticationTypes,
        [parameter(mandatory=$False,HelpMessage='The radius server address property of the VirtualNetworkGateway resource for vpn client connection.)')]
        [string]
        $radiusServerAddress,
        [parameter(mandatory=$False,HelpMessage='The AADAudience property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.)')]
        [string]
        $aadAudience,
        [parameter(mandatory=$False,HelpMessage='VpnClientRevokedCertificate for Virtual network gateway.)')]
        $vpnClientRevokedCertificates,
        [parameter(mandatory=$False,HelpMessage='The radiusServers property for multiple radius server configuration.)')]
        $radiusServers,
        [parameter(mandatory=$False,HelpMessage='The AADIssuer property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.)')]
        [string]
        $aadIssuer,
        [parameter(mandatory=$False,HelpMessage='VpnClientIpsecPolicies for virtual network gateway P2S client.)')]
        $vpnClientIpsecPolicies,
        [parameter(mandatory=$False,HelpMessage='The reference to the address space resource which represents Address space for P2S VpnClient.)')]
        [AddressSpace]
        $vpnClientAddressPool,
        [parameter(mandatory=$False,HelpMessage='The AADTenant property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.)')]
        [string]
        $aadTenant,
        [parameter(mandatory=$False,HelpMessage='VpnClientRootCertificate for virtual network gateway.)')]
        $vpnClientRootCertificates
    )

    process
    {
        return $([VpnClientConfiguration]$PSBoundParameters)
    }
}
class VirtualNetworkGateway
{
    [object] $tags
    [SubResource] $gatewayDefaultSite
    [ArgumentCompletions('None', 'Generation1', 'Generation2')]
    [string] $vpnGatewayGeneration
    [ArgumentCompletions('PolicyBased', 'RouteBased')]
    [string] $vpnType
    [string] $vNetExtendedLocationResourceId
    [VirtualNetworkGatewayIPConfiguration[]] $ipConfigurations
    [VirtualNetworkGatewaySku] $sku
    [ArgumentCompletions('Vpn', 'ExpressRoute', 'LocalGateway')]
    [string] $gatewayType
    [string] $location
    [bool] $enableBgp
    [AddressSpace] $customRoutes
    [BgpSettings] $bgpSettings
    [VpnClientConfiguration] $vpnClientConfiguration
    [ExtendedLocation] $extendedLocation
    [bool] $activeActive
    [bool] $enablePrivateIpAddress
    [bool] $enableDnsForwarding
    [string] $id
}
function New-AzureNativeTypeNetworkVirtualNetworkGateway
{
    param (
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The reference to the LocalNetworkGateway resource which represents local network site having default routes. Assign Null value in case of removing existing default site setting.)')]
        [SubResource]
        $gatewayDefaultSite,
        [parameter(mandatory=$False,HelpMessage='The generation for this VirtualNetworkGateway. Must be None if gatewayType is not VPN.)')]
        [string]
        [ArgumentCompletions('None', 'Generation1', 'Generation2')]
        $vpnGatewayGeneration,
        [parameter(mandatory=$False,HelpMessage='The type of this virtual network gateway.)')]
        [string]
        [ArgumentCompletions('PolicyBased', 'RouteBased')]
        $vpnType,
        [parameter(mandatory=$False,HelpMessage='Customer vnet resource id. VirtualNetworkGateway of type local gateway is associated with the customer vnet.)')]
        [string]
        $vNetExtendedLocationResourceId,
        [parameter(mandatory=$False,HelpMessage='IP configurations for virtual network gateway.)')]
        $ipConfigurations,
        [parameter(mandatory=$False,HelpMessage='The reference to the VirtualNetworkGatewaySku resource which represents the SKU selected for Virtual network gateway.)')]
        [VirtualNetworkGatewaySku]
        $sku,
        [parameter(mandatory=$False,HelpMessage='The type of this virtual network gateway.)')]
        [string]
        [ArgumentCompletions('Vpn', 'ExpressRoute', 'LocalGateway')]
        $gatewayType,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Whether BGP is enabled for this virtual network gateway or not.)')]
        [bool]
        $enableBgp,
        [parameter(mandatory=$False,HelpMessage='The reference to the address space resource which represents the custom routes address space specified by the customer for virtual network gateway and VpnClient.)')]
        [AddressSpace]
        $customRoutes,
        [parameter(mandatory=$False,HelpMessage='Virtual network gateway''s BGP speaker settings.)')]
        [BgpSettings]
        $bgpSettings,
        [parameter(mandatory=$False,HelpMessage='The reference to the VpnClientConfiguration resource which represents the P2S VpnClient configurations.)')]
        [VpnClientConfiguration]
        $vpnClientConfiguration,
        [parameter(mandatory=$False,HelpMessage='The extended location of type local virtual network gateway.)')]
        [ExtendedLocation]
        $extendedLocation,
        [parameter(mandatory=$False,HelpMessage='ActiveActive flag.)')]
        [bool]
        $activeActive,
        [parameter(mandatory=$False,HelpMessage='Whether private IP needs to be enabled on this gateway for connections or not.)')]
        [bool]
        $enablePrivateIpAddress,
        [parameter(mandatory=$False,HelpMessage='Whether dns forwarding is enabled or not.)')]
        [bool]
        $enableDnsForwarding,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id
    )

    process
    {
        return $([VirtualNetworkGateway]$PSBoundParameters)
    }
}
class LocalNetworkGateway
{
    [string] $fqdn
    [string] $location
    [string] $gatewayIpAddress
    [string] $id
    [AddressSpace] $localNetworkAddressSpace
    [object] $tags
    [BgpSettings] $bgpSettings
}
function New-AzureNativeTypeNetworkLocalNetworkGateway
{
    param (
        [parameter(mandatory=$False,HelpMessage='FQDN of local network gateway.)')]
        [string]
        $fqdn,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='IP address of local network gateway.)')]
        [string]
        $gatewayIpAddress,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Local network site address space.)')]
        [AddressSpace]
        $localNetworkAddressSpace,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Local network gateway''s BGP speaker settings.)')]
        [BgpSettings]
        $bgpSettings
    )

    process
    {
        return $([LocalNetworkGateway]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkVirtualNetworkGatewayConnection
{
    [Alias('azure_native_network_virtualnetworkgatewayconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network gateway connection.)')]
        [string]
        $virtualNetworkGatewayConnectionName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The authorizationKey.)')]
        [string]
        $authorizationKey,
        [parameter(mandatory=$False,HelpMessage='Bypass ExpressRoute Gateway for data forwarding.)')]
        [bool]
        $expressRouteGatewayBypass,
        [parameter(mandatory=$False,HelpMessage='The reference to peerings resource.)')]
        [SubResource]
        $peer,
        [parameter(mandatory=$False,HelpMessage='The dead peer detection timeout of this connection in seconds.)')]
        [int]
        $dpdTimeoutSeconds,
        [parameter(mandatory=$False,HelpMessage='Gateway connection type.)')]
        [string]
        [ArgumentCompletions('IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient')]
        $connectionType,
        [parameter(mandatory=$False,HelpMessage='The IPSec shared key.)')]
        [string]
        $sharedKey,
        [parameter(mandatory=$False,HelpMessage='EnableBgp flag.)')]
        [bool]
        $enableBgp,
        [parameter(mandatory=$False,HelpMessage='The IPSec Policies to be considered by this connection.)')]
        $ipsecPolicies,
        [parameter(mandatory=$False,HelpMessage='Connection protocol used for this connection.)')]
        [string]
        [ArgumentCompletions('IKEv2', 'IKEv1')]
        $connectionProtocol,
        [parameter(mandatory=$False,HelpMessage='The routing weight.)')]
        [int]
        $routingWeight,
        [parameter(mandatory=$False,HelpMessage='The reference to virtual network gateway resource.)')]
        [VirtualNetworkGateway]
        $virtualNetworkGateway2,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The connection mode for this connection.)')]
        [string]
        [ArgumentCompletions('Default', 'ResponderOnly', 'InitiatorOnly')]
        $connectionMode,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The reference to local network gateway resource.)')]
        [LocalNetworkGateway]
        $localNetworkGateway2,
        [parameter(mandatory=$False,HelpMessage='The reference to virtual network gateway resource.)')]
        [VirtualNetworkGateway]
        $virtualNetworkGateway1,
        [parameter(mandatory=$False,HelpMessage='Use private local Azure IP for the connection.)')]
        [bool]
        $useLocalAzureIpAddress,
        [parameter(mandatory=$False,HelpMessage='The Traffic Selector Policies to be considered by this connection.)')]
        $trafficSelectorPolicies,
        [parameter(mandatory=$False,HelpMessage='Enable policy-based traffic selectors.)')]
        [bool]
        $usePolicyBasedTrafficSelectors,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VirtualNetworkGatewayConnection")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["connectionType"] = $connectionType
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["virtualNetworkGateway1"] = $virtualNetworkGateway1

        if($PSBoundParameters.Keys -icontains 'virtualNetworkGatewayConnectionName')
        {
            $resource.properties["virtualNetworkGatewayConnectionName"] = $virtualNetworkGatewayConnectionName
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'authorizationKey')
        {
            $resource.properties["authorizationKey"] = $authorizationKey
        }

        if($PSBoundParameters.Keys -icontains 'expressRouteGatewayBypass')
        {
            $resource.properties["expressRouteGatewayBypass"] = $expressRouteGatewayBypass
        }

        if($PSBoundParameters.Keys -icontains 'peer')
        {
            $resource.properties["peer"] = $peer
        }

        if($PSBoundParameters.Keys -icontains 'dpdTimeoutSeconds')
        {
            $resource.properties["dpdTimeoutSeconds"] = $dpdTimeoutSeconds
        }

        if($PSBoundParameters.Keys -icontains 'sharedKey')
        {
            $resource.properties["sharedKey"] = $sharedKey
        }

        if($PSBoundParameters.Keys -icontains 'enableBgp')
        {
            $resource.properties["enableBgp"] = $enableBgp
        }

        if($PSBoundParameters.Keys -icontains 'ipsecPolicies')
        {
            $resource.properties["ipsecPolicies"] = $ipsecPolicies
        }

        if($PSBoundParameters.Keys -icontains 'connectionProtocol')
        {
            $resource.properties["connectionProtocol"] = $connectionProtocol
        }

        if($PSBoundParameters.Keys -icontains 'routingWeight')
        {
            $resource.properties["routingWeight"] = $routingWeight
        }

        if($PSBoundParameters.Keys -icontains 'virtualNetworkGateway2')
        {
            $resource.properties["virtualNetworkGateway2"] = $virtualNetworkGateway2
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'connectionMode')
        {
            $resource.properties["connectionMode"] = $connectionMode
        }

        if($PSBoundParameters.Keys -icontains 'localNetworkGateway2')
        {
            $resource.properties["localNetworkGateway2"] = $localNetworkGateway2
        }

        if($PSBoundParameters.Keys -icontains 'useLocalAzureIpAddress')
        {
            $resource.properties["useLocalAzureIpAddress"] = $useLocalAzureIpAddress
        }

        if($PSBoundParameters.Keys -icontains 'trafficSelectorPolicies')
        {
            $resource.properties["trafficSelectorPolicies"] = $trafficSelectorPolicies
        }

        if($PSBoundParameters.Keys -icontains 'usePolicyBasedTrafficSelectors')
        {
            $resource.properties["usePolicyBasedTrafficSelectors"] = $usePolicyBasedTrafficSelectors
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkServiceEndpointPolicyDefinition
{
    [Alias('azure_native_network_serviceendpointpolicydefinition')]
    param (
        [parameter(mandatory=$False,HelpMessage='A list of service resources.)')]
        [string[]]
        $serviceResources,
        [parameter(mandatory=$False,HelpMessage='The name of the service endpoint policy.)')]
        [string]
        $serviceEndpointPolicyName,
        [parameter(mandatory=$False,HelpMessage='Service endpoint name.)')]
        [string]
        $service,
        [parameter(mandatory=$False,HelpMessage='The name of the service endpoint policy definition name.)')]
        [string]
        $serviceEndpointPolicyDefinitionName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='A description for this rule. Restricted to 140 chars.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ServiceEndpointPolicyDefinition")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["serviceEndpointPolicyName"] = $serviceEndpointPolicyName

        if($PSBoundParameters.Keys -icontains 'serviceResources')
        {
            $resource.properties["serviceResources"] = $serviceResources
        }

        if($PSBoundParameters.Keys -icontains 'service')
        {
            $resource.properties["service"] = $service
        }

        if($PSBoundParameters.Keys -icontains 'serviceEndpointPolicyDefinitionName')
        {
            $resource.properties["serviceEndpointPolicyDefinitionName"] = $serviceEndpointPolicyDefinitionName
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'description')
        {
            $resource.properties["description"] = $description
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkVirtualHubRouteTableV2
{
    [Alias('azure_native_network_virtualhubroutetablev2')]
    param (
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VirtualHub.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='List of all connections attached to this route table v2.)')]
        [string[]]
        $attachedConnections,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualHub.)')]
        [string]
        $virtualHubName,
        [parameter(mandatory=$False,HelpMessage='List of all routes.)')]
        $routes,
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualHubRouteTableV2.)')]
        [string]
        $routeTableName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VirtualHubRouteTableV2")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["virtualHubName"] = $virtualHubName

        if($PSBoundParameters.Keys -icontains 'attachedConnections')
        {
            $resource.properties["attachedConnections"] = $attachedConnections
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'routes')
        {
            $resource.properties["routes"] = $routes
        }

        if($PSBoundParameters.Keys -icontains 'routeTableName')
        {
            $resource.properties["routeTableName"] = $routeTableName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkForwardingRule
{
    [Alias('azure_native_network_forwardingrule')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='DNS servers to forward the DNS query to.)')]
        $targetDnsServers,
        [parameter(mandatory=$False,HelpMessage='Metadata attached to the forwarding rule.)')]
        [hashtable]
        $metadata,
        [parameter(mandatory=$False,HelpMessage='The name of the forwarding rule.)')]
        [string]
        $forwardingRuleName,
        [parameter(mandatory=$False,HelpMessage='The name of the DNS forwarding ruleset.)')]
        [string]
        $dnsForwardingRulesetName,
        [parameter(mandatory=$False,HelpMessage='The domain name for the forwarding rule.)')]
        [string]
        $domainName,
        [parameter(mandatory=$False,HelpMessage='The state of forwarding rule.)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $forwardingRuleState,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ForwardingRule")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["dnsForwardingRulesetName"] = $dnsForwardingRulesetName
        $resource.properties["domainName"] = $domainName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["targetDnsServers"] = $targetDnsServers

        if($PSBoundParameters.Keys -icontains 'metadata')
        {
            $resource.properties["metadata"] = $metadata
        }

        if($PSBoundParameters.Keys -icontains 'forwardingRuleName')
        {
            $resource.properties["forwardingRuleName"] = $forwardingRuleName
        }

        if($PSBoundParameters.Keys -icontains 'forwardingRuleState')
        {
            $resource.properties["forwardingRuleState"] = $forwardingRuleState
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class AadAuthenticationParameters
{
    [string] $aadTenant
    [string] $aadIssuer
    [string] $aadAudience
}
function New-AzureNativeTypeNetworkAadAuthenticationParameters
{
    param (
        [parameter(mandatory=$False,HelpMessage='AAD Vpn authentication parameter AAD tenant.)')]
        [string]
        $aadTenant,
        [parameter(mandatory=$False,HelpMessage='AAD Vpn authentication parameter AAD issuer.)')]
        [string]
        $aadIssuer,
        [parameter(mandatory=$False,HelpMessage='AAD Vpn authentication parameter AAD audience.)')]
        [string]
        $aadAudience
    )

    process
    {
        return $([AadAuthenticationParameters]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkVpnServerConfiguration
{
    [Alias('azure_native_network_vpnserverconfiguration')]
    param (
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='VPN authentication types for the VpnServerConfiguration.)')]
        $vpnAuthenticationTypes,
        [parameter(mandatory=$False,HelpMessage='VPN client root certificate of VpnServerConfiguration.)')]
        $vpnClientRootCertificates,
        [parameter(mandatory=$False,HelpMessage='The radius server address property of the VpnServerConfiguration resource for point to site client connection.)')]
        [string]
        $radiusServerAddress,
        [parameter(mandatory=$False,HelpMessage='Radius client root certificate of VpnServerConfiguration.)')]
        $radiusClientRootCertificates,
        [parameter(mandatory=$False,HelpMessage='The name of the VpnServerConfiguration being created or updated.)')]
        [string]
        $vpnServerConfigurationName,
        [parameter(mandatory=$False,HelpMessage='Radius Server root certificate of VpnServerConfiguration.)')]
        $radiusServerRootCertificates,
        [parameter(mandatory=$False,HelpMessage='The set of aad vpn authentication parameters.)')]
        [AadAuthenticationParameters]
        $aadAuthenticationParameters,
        [parameter(mandatory=$False,HelpMessage='VPN client revoked certificate of VpnServerConfiguration.)')]
        $vpnClientRevokedCertificates,
        [parameter(mandatory=$False,HelpMessage='The name of the VpnServerConfiguration that is unique within a resource group.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The radius secret property of the VpnServerConfiguration resource for point to site client connection.)')]
        [string]
        $radiusServerSecret,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VpnServerConfiguration.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Multiple Radius Server configuration for VpnServerConfiguration.)')]
        $radiusServers,
        [parameter(mandatory=$False,HelpMessage='VpnClientIpsecPolicies for VpnServerConfiguration.)')]
        $vpnClientIpsecPolicies,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='VPN protocols for the VpnServerConfiguration.)')]
        $vpnProtocols,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VpnServerConfiguration")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'vpnAuthenticationTypes')
        {
            $resource.properties["vpnAuthenticationTypes"] = $vpnAuthenticationTypes
        }

        if($PSBoundParameters.Keys -icontains 'vpnClientRootCertificates')
        {
            $resource.properties["vpnClientRootCertificates"] = $vpnClientRootCertificates
        }

        if($PSBoundParameters.Keys -icontains 'radiusServerAddress')
        {
            $resource.properties["radiusServerAddress"] = $radiusServerAddress
        }

        if($PSBoundParameters.Keys -icontains 'radiusClientRootCertificates')
        {
            $resource.properties["radiusClientRootCertificates"] = $radiusClientRootCertificates
        }

        if($PSBoundParameters.Keys -icontains 'vpnServerConfigurationName')
        {
            $resource.properties["vpnServerConfigurationName"] = $vpnServerConfigurationName
        }

        if($PSBoundParameters.Keys -icontains 'radiusServerRootCertificates')
        {
            $resource.properties["radiusServerRootCertificates"] = $radiusServerRootCertificates
        }

        if($PSBoundParameters.Keys -icontains 'aadAuthenticationParameters')
        {
            $resource.properties["aadAuthenticationParameters"] = $aadAuthenticationParameters
        }

        if($PSBoundParameters.Keys -icontains 'vpnClientRevokedCertificates')
        {
            $resource.properties["vpnClientRevokedCertificates"] = $vpnClientRevokedCertificates
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'radiusServerSecret')
        {
            $resource.properties["radiusServerSecret"] = $radiusServerSecret
        }

        if($PSBoundParameters.Keys -icontains 'radiusServers')
        {
            $resource.properties["radiusServers"] = $radiusServers
        }

        if($PSBoundParameters.Keys -icontains 'vpnClientIpsecPolicies')
        {
            $resource.properties["vpnClientIpsecPolicies"] = $vpnClientIpsecPolicies
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'vpnProtocols')
        {
            $resource.properties["vpnProtocols"] = $vpnProtocols
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkNspAssociation
{
    [Alias('azure_native_network_nspassociation')]
    param (
        [parameter(mandatory=$False,HelpMessage='Profile id to which the PaaS resource is associated.)')]
        [SubResource]
        $profile,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The PaaS resource to be associated.)')]
        [SubResource]
        $privateLinkResource,
        [parameter(mandatory=$False,HelpMessage='The name of the NSP association.)')]
        [string]
        $associationName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network security perimeter.)')]
        [string]
        $networkSecurityPerimeterName,
        [parameter(mandatory=$False,HelpMessage='Access mode on the association.)')]
        [string]
        [ArgumentCompletions('Learning', 'Enforced', 'Audit')]
        $accessMode,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:NspAssociation")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["networkSecurityPerimeterName"] = $networkSecurityPerimeterName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'profile')
        {
            $resource.properties["profile"] = $profile
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'privateLinkResource')
        {
            $resource.properties["privateLinkResource"] = $privateLinkResource
        }

        if($PSBoundParameters.Keys -icontains 'associationName')
        {
            $resource.properties["associationName"] = $associationName
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'accessMode')
        {
            $resource.properties["accessMode"] = $accessMode
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkVirtualRouter
{
    [Alias('azure_native_network_virtualrouter')]
    param (
        [parameter(mandatory=$False,HelpMessage='VirtualRouter ASN.)')]
        [int]
        $virtualRouterAsn,
        [parameter(mandatory=$False,HelpMessage='VirtualRouter IPs.)')]
        [string[]]
        $virtualRouterIps,
        [parameter(mandatory=$False,HelpMessage='The Subnet on which VirtualRouter is hosted.)')]
        [SubResource]
        $hostedSubnet,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The Gateway on which VirtualRouter is hosted.)')]
        [SubResource]
        $hostedGateway,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Virtual Router.)')]
        [string]
        $virtualRouterName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VirtualRouter")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'virtualRouterAsn')
        {
            $resource.properties["virtualRouterAsn"] = $virtualRouterAsn
        }

        if($PSBoundParameters.Keys -icontains 'virtualRouterIps')
        {
            $resource.properties["virtualRouterIps"] = $virtualRouterIps
        }

        if($PSBoundParameters.Keys -icontains 'hostedSubnet')
        {
            $resource.properties["hostedSubnet"] = $hostedSubnet
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'hostedGateway')
        {
            $resource.properties["hostedGateway"] = $hostedGateway
        }

        if($PSBoundParameters.Keys -icontains 'virtualRouterName')
        {
            $resource.properties["virtualRouterName"] = $virtualRouterName
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class AzureFirewallIPConfiguration
{
    [SubResource] $subnet
    [string] $name
    [SubResource] $publicIPAddress
    [string] $id
}
function New-AzureNativeTypeNetworkAzureFirewallIPConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='Reference to the subnet resource. This resource must be named ''AzureFirewallSubnet'' or ''AzureFirewallManagementSubnet''.)')]
        [SubResource]
        $subnet,
        [parameter(mandatory=$False,HelpMessage='Name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Reference to the PublicIP resource. This field is a mandatory input if subnet is not null.)')]
        [SubResource]
        $publicIPAddress,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id
    )

    process
    {
        return $([AzureFirewallIPConfiguration]$PSBoundParameters)
    }
}
class AzureFirewallPublicIPAddress
{
    [string] $address
}
function New-AzureNativeTypeNetworkAzureFirewallPublicIPAddress
{
    param (
        [parameter(mandatory=$False,HelpMessage='Public IP Address value.)')]
        [string]
        $address
    )

    process
    {
        return $([AzureFirewallPublicIPAddress]$PSBoundParameters)
    }
}
class HubPublicIPAddresses
{
    [int] $count
    [AzureFirewallPublicIPAddress[]] $addresses
}
function New-AzureNativeTypeNetworkHubPublicIPAddresses
{
    param (
        [parameter(mandatory=$False,HelpMessage='The number of Public IP addresses associated with azure firewall.)')]
        [int]
        $count,
        [parameter(mandatory=$False,HelpMessage='The list of Public IP addresses associated with azure firewall or IP addresses to be retained.)')]
        $addresses
    )

    process
    {
        return $([HubPublicIPAddresses]$PSBoundParameters)
    }
}
class HubIPAddresses
{
    [HubPublicIPAddresses] $publicIPs
    [string] $privateIPAddress
}
function New-AzureNativeTypeNetworkHubIPAddresses
{
    param (
        [parameter(mandatory=$False,HelpMessage='Public IP addresses associated with azure firewall.)')]
        [HubPublicIPAddresses]
        $publicIPs,
        [parameter(mandatory=$False,HelpMessage='Private IP Address associated with azure firewall.)')]
        [string]
        $privateIPAddress
    )

    process
    {
        return $([HubIPAddresses]$PSBoundParameters)
    }
}
class AzureFirewallSku
{
    [ArgumentCompletions('Standard', 'Premium')]
    [string] $tier
    [ArgumentCompletions('AZFW_VNet', 'AZFW_Hub')]
    [string] $name
}
function New-AzureNativeTypeNetworkAzureFirewallSku
{
    param (
        [parameter(mandatory=$False,HelpMessage='Tier of an Azure Firewall.)')]
        [string]
        [ArgumentCompletions('Standard', 'Premium')]
        $tier,
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Firewall SKU.)')]
        [string]
        [ArgumentCompletions('AZFW_VNet', 'AZFW_Hub')]
        $name
    )

    process
    {
        return $([AzureFirewallSku]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkAzureFirewall
{
    [Alias('azure_native_network_azurefirewall')]
    param (
        [parameter(mandatory=$False,HelpMessage='Collection of NAT rule collections used by Azure Firewall.)')]
        $natRuleCollections,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='A list of availability zones denoting where the resource needs to come from.)')]
        [string[]]
        $zones,
        [parameter(mandatory=$False,HelpMessage='Collection of application rule collections used by Azure Firewall.)')]
        $applicationRuleCollections,
        [parameter(mandatory=$False,HelpMessage='Collection of network rule collections used by Azure Firewall.)')]
        $networkRuleCollections,
        [parameter(mandatory=$False,HelpMessage='The firewallPolicy associated with this azure firewall.)')]
        [SubResource]
        $firewallPolicy,
        [parameter(mandatory=$False,HelpMessage='IP configuration of the Azure Firewall used for management traffic.)')]
        [AzureFirewallIPConfiguration]
        $managementIpConfiguration,
        [parameter(mandatory=$False,HelpMessage='The additional properties used to further config this azure firewall.)')]
        [hashtable]
        $additionalProperties,
        [parameter(mandatory=$False,HelpMessage='IP addresses associated with AzureFirewall.)')]
        [HubIPAddresses]
        $hubIPAddresses,
        [parameter(mandatory=$False,HelpMessage='The operation mode for Threat Intelligence.)')]
        [string]
        [ArgumentCompletions('Alert', 'Deny', 'Off')]
        $threatIntelMode,
        [parameter(mandatory=$False,HelpMessage='IP configuration of the Azure Firewall resource.)')]
        $ipConfigurations,
        [parameter(mandatory=$False,HelpMessage='The name of the Azure Firewall.)')]
        [string]
        $azureFirewallName,
        [parameter(mandatory=$False,HelpMessage='The Azure Firewall Resource SKU.)')]
        [AzureFirewallSku]
        $sku,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The virtualHub to which the firewall belongs.)')]
        [SubResource]
        $virtualHub,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:AzureFirewall")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'natRuleCollections')
        {
            $resource.properties["natRuleCollections"] = $natRuleCollections
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'zones')
        {
            $resource.properties["zones"] = $zones
        }

        if($PSBoundParameters.Keys -icontains 'applicationRuleCollections')
        {
            $resource.properties["applicationRuleCollections"] = $applicationRuleCollections
        }

        if($PSBoundParameters.Keys -icontains 'networkRuleCollections')
        {
            $resource.properties["networkRuleCollections"] = $networkRuleCollections
        }

        if($PSBoundParameters.Keys -icontains 'firewallPolicy')
        {
            $resource.properties["firewallPolicy"] = $firewallPolicy
        }

        if($PSBoundParameters.Keys -icontains 'managementIpConfiguration')
        {
            $resource.properties["managementIpConfiguration"] = $managementIpConfiguration
        }

        if($PSBoundParameters.Keys -icontains 'additionalProperties')
        {
            $resource.properties["additionalProperties"] = $additionalProperties
        }

        if($PSBoundParameters.Keys -icontains 'hubIPAddresses')
        {
            $resource.properties["hubIPAddresses"] = $hubIPAddresses
        }

        if($PSBoundParameters.Keys -icontains 'threatIntelMode')
        {
            $resource.properties["threatIntelMode"] = $threatIntelMode
        }

        if($PSBoundParameters.Keys -icontains 'ipConfigurations')
        {
            $resource.properties["ipConfigurations"] = $ipConfigurations
        }

        if($PSBoundParameters.Keys -icontains 'azureFirewallName')
        {
            $resource.properties["azureFirewallName"] = $azureFirewallName
        }

        if($PSBoundParameters.Keys -icontains 'sku')
        {
            $resource.properties["sku"] = $sku
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'virtualHub')
        {
            $resource.properties["virtualHub"] = $virtualHub
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class PacketCaptureStorageLocation
{
    [string] $storageId
    [string] $filePath
    [string] $storagePath
}
function New-AzureNativeTypeNetworkPacketCaptureStorageLocation
{
    param (
        [parameter(mandatory=$False,HelpMessage='The ID of the storage account to save the packet capture session. Required if no local file path is provided.)')]
        [string]
        $storageId,
        [parameter(mandatory=$False,HelpMessage='A valid local path on the targeting VM. Must include the name of the capture file (*.cap). For linux virtual machine it must start with /var/captures. Required if no storage ID is provided, otherwise optional.)')]
        [string]
        $filePath,
        [parameter(mandatory=$False,HelpMessage='The URI of the storage path to save the packet capture. Must be a well-formed URI describing the location to save the packet capture.)')]
        [string]
        $storagePath
    )

    process
    {
        return $([PacketCaptureStorageLocation]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkPacketCapture
{
    [Alias('azure_native_network_packetcapture')]
    param (
        [parameter(mandatory=$False,HelpMessage='The ID of the targeted resource, only VM is currently supported.)')]
        [string]
        $target,
        [parameter(mandatory=$False,HelpMessage='The name of the packet capture session.)')]
        [string]
        $packetCaptureName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='A list of packet capture filters.)')]
        $filters,
        [parameter(mandatory=$False,HelpMessage='Maximum duration of the capture session in seconds.)')]
        [int]
        $timeLimitInSeconds,
        [parameter(mandatory=$False,HelpMessage='Number of bytes captured per packet, the remaining bytes are truncated.)')]
        [int]
        $bytesToCapturePerPacket,
        [parameter(mandatory=$False,HelpMessage='The storage location for a packet capture session.)')]
        [PacketCaptureStorageLocation]
        $storageLocation,
        [parameter(mandatory=$False,HelpMessage='Maximum size of the capture output.)')]
        [int]
        $totalBytesPerSession,
        [parameter(mandatory=$False,HelpMessage='The name of the network watcher.)')]
        [string]
        $networkWatcherName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:PacketCapture")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["networkWatcherName"] = $networkWatcherName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["storageLocation"] = $storageLocation
        $resource.properties["target"] = $target

        if($PSBoundParameters.Keys -icontains 'packetCaptureName')
        {
            $resource.properties["packetCaptureName"] = $packetCaptureName
        }

        if($PSBoundParameters.Keys -icontains 'filters')
        {
            $resource.properties["filters"] = $filters
        }

        if($PSBoundParameters.Keys -icontains 'timeLimitInSeconds')
        {
            $resource.properties["timeLimitInSeconds"] = $timeLimitInSeconds
        }

        if($PSBoundParameters.Keys -icontains 'bytesToCapturePerPacket')
        {
            $resource.properties["bytesToCapturePerPacket"] = $bytesToCapturePerPacket
        }

        if($PSBoundParameters.Keys -icontains 'totalBytesPerSession')
        {
            $resource.properties["totalBytesPerSession"] = $totalBytesPerSession
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkNspAccessRule
{
    [Alias('azure_native_network_nspaccessrule')]
    param (
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Inbound address prefixes (IPv4/IPv6))')]
        [string[]]
        $addressPrefixes,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Direction that specifies whether the access rules is inbound/outbound.)')]
        [string]
        [ArgumentCompletions('Inbound', 'Outbound')]
        $direction,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the access rule that is unique within a profile. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the network security perimeter.)')]
        [string]
        $networkSecurityPerimeterName,
        [parameter(mandatory=$False,HelpMessage='Inbound rule specified by the perimeter id.)')]
        $networkSecurityPerimeters,
        [parameter(mandatory=$False,HelpMessage='The name of the NSP access rule.)')]
        [string]
        $accessRuleName,
        [parameter(mandatory=$False,HelpMessage='Subscription id in the ARM id format.)')]
        [string[]]
        $subscriptions,
        [parameter(mandatory=$False,HelpMessage='The name of the NSP profile.)')]
        [string]
        $profileName,
        [parameter(mandatory=$False,HelpMessage='Outbound rules fully qualified domain name format.)')]
        [string[]]
        $fullyQualifiedDomainNames,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:NspAccessRule")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["networkSecurityPerimeterName"] = $networkSecurityPerimeterName
        $resource.properties["profileName"] = $profileName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'addressPrefixes')
        {
            $resource.properties["addressPrefixes"] = $addressPrefixes
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'direction')
        {
            $resource.properties["direction"] = $direction
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'networkSecurityPerimeters')
        {
            $resource.properties["networkSecurityPerimeters"] = $networkSecurityPerimeters
        }

        if($PSBoundParameters.Keys -icontains 'accessRuleName')
        {
            $resource.properties["accessRuleName"] = $accessRuleName
        }

        if($PSBoundParameters.Keys -icontains 'subscriptions')
        {
            $resource.properties["subscriptions"] = $subscriptions
        }

        if($PSBoundParameters.Keys -icontains 'fullyQualifiedDomainNames')
        {
            $resource.properties["fullyQualifiedDomainNames"] = $fullyQualifiedDomainNames
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkDdosCustomPolicy
{
    [Alias('azure_native_network_ddoscustompolicy')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the DDoS custom policy.)')]
        [string]
        $ddosCustomPolicyName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The protocol-specific DDoS policy customization parameters.)')]
        $protocolCustomSettings,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:DdosCustomPolicy")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'ddosCustomPolicyName')
        {
            $resource.properties["ddosCustomPolicyName"] = $ddosCustomPolicyName
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'protocolCustomSettings')
        {
            $resource.properties["protocolCustomSettings"] = $protocolCustomSettings
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class PropagatedRouteTable
{
    [string[]] $labels
    [SubResource[]] $ids
}
function New-AzureNativeTypeNetworkPropagatedRouteTable
{
    param (
        [parameter(mandatory=$False,HelpMessage='The list of labels.)')]
        [string[]]
        $labels,
        [parameter(mandatory=$False,HelpMessage='The list of resource ids of all the RouteTables.)')]
        $ids
    )

    process
    {
        return $([PropagatedRouteTable]$PSBoundParameters)
    }
}
class StaticRoute
{
    [string[]] $addressPrefixes
    [string] $name
    [string] $nextHopIpAddress
}
function New-AzureNativeTypeNetworkStaticRoute
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of all address prefixes.)')]
        [string[]]
        $addressPrefixes,
        [parameter(mandatory=$False,HelpMessage='The name of the StaticRoute that is unique within a VnetRoute.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The ip address of the next hop.)')]
        [string]
        $nextHopIpAddress
    )

    process
    {
        return $([StaticRoute]$PSBoundParameters)
    }
}
class VnetRoute
{
    [StaticRoute[]] $staticRoutes
}
function New-AzureNativeTypeNetworkVnetRoute
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of all Static Routes.)')]
        $staticRoutes
    )

    process
    {
        return $([VnetRoute]$PSBoundParameters)
    }
}
class RoutingConfiguration
{
    [SubResource] $associatedRouteTable
    [PropagatedRouteTable] $propagatedRouteTables
    [VnetRoute] $vnetRoutes
}
function New-AzureNativeTypeNetworkRoutingConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The resource id RouteTable associated with this RoutingConfiguration.)')]
        [SubResource]
        $associatedRouteTable,
        [parameter(mandatory=$False,HelpMessage='The list of RouteTables to advertise the routes to.)')]
        [PropagatedRouteTable]
        $propagatedRouteTables,
        [parameter(mandatory=$False,HelpMessage='List of routes that control routing from VirtualHub into a virtual network connection.)')]
        [VnetRoute]
        $vnetRoutes
    )

    process
    {
        return $([RoutingConfiguration]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkHubVirtualNetworkConnection
{
    [Alias('azure_native_network_hubvirtualnetworkconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualHub.)')]
        [string]
        $virtualHubName,
        [parameter(mandatory=$False,HelpMessage='Enable internet security.)')]
        [bool]
        $enableInternetSecurity,
        [parameter(mandatory=$False,HelpMessage='Deprecated: VirtualHub to RemoteVnet transit to enabled or not.)')]
        [bool]
        $allowHubToRemoteVnetTransit,
        [parameter(mandatory=$False,HelpMessage='The name of the HubVirtualNetworkConnection.)')]
        [string]
        $connectionName,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the HubVirtualNetworkConnection.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Deprecated: Allow RemoteVnet to use Virtual Hub''s gateways.)')]
        [bool]
        $allowRemoteVnetToUseHubVnetGateways,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The Routing Configuration indicating the associated and propagated route tables on this connection.)')]
        [RoutingConfiguration]
        $routingConfiguration,
        [parameter(mandatory=$False,HelpMessage='Reference to the remote virtual network.)')]
        [SubResource]
        $remoteVirtualNetwork,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:HubVirtualNetworkConnection")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["virtualHubName"] = $virtualHubName

        if($PSBoundParameters.Keys -icontains 'enableInternetSecurity')
        {
            $resource.properties["enableInternetSecurity"] = $enableInternetSecurity
        }

        if($PSBoundParameters.Keys -icontains 'allowHubToRemoteVnetTransit')
        {
            $resource.properties["allowHubToRemoteVnetTransit"] = $allowHubToRemoteVnetTransit
        }

        if($PSBoundParameters.Keys -icontains 'connectionName')
        {
            $resource.properties["connectionName"] = $connectionName
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'allowRemoteVnetToUseHubVnetGateways')
        {
            $resource.properties["allowRemoteVnetToUseHubVnetGateways"] = $allowRemoteVnetToUseHubVnetGateways
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'routingConfiguration')
        {
            $resource.properties["routingConfiguration"] = $routingConfiguration
        }

        if($PSBoundParameters.Keys -icontains 'remoteVirtualNetwork')
        {
            $resource.properties["remoteVirtualNetwork"] = $remoteVirtualNetwork
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkExpressRouteCircuitAuthorization
{
    [Alias('azure_native_network_expressroutecircuitauthorization')]
    param (
        [parameter(mandatory=$False,HelpMessage='The authorization key.)')]
        [string]
        $authorizationKey,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the express route circuit.)')]
        [string]
        $circuitName,
        [parameter(mandatory=$False,HelpMessage='The authorization use status.)')]
        [string]
        [ArgumentCompletions('Available', 'InUse')]
        $authorizationUseStatus,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the authorization.)')]
        [string]
        $authorizationName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ExpressRouteCircuitAuthorization")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["circuitName"] = $circuitName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'authorizationKey')
        {
            $resource.properties["authorizationKey"] = $authorizationKey
        }

        if($PSBoundParameters.Keys -icontains 'authorizationUseStatus')
        {
            $resource.properties["authorizationUseStatus"] = $authorizationUseStatus
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'authorizationName')
        {
            $resource.properties["authorizationName"] = $authorizationName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkDscpConfiguration
{
    [Alias('azure_native_network_dscpconfiguration')]
    param (
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='List of markings to be used in the configuration.)')]
        [int[]]
        $markings,
        [parameter(mandatory=$False,HelpMessage='The name of the resource.)')]
        [string]
        $dscpConfigurationName,
        [parameter(mandatory=$False,HelpMessage='Sources port ranges.)')]
        $sourcePortRanges,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Destination port ranges.)')]
        $destinationPortRanges,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='RNM supported protocol types.)')]
        [string]
        [ArgumentCompletions('DoNotUse', 'Icmp', 'Tcp', 'Udp', 'Gre', 'Esp', 'Ah', 'Vxlan', 'All')]
        $protocol,
        [parameter(mandatory=$False,HelpMessage='Source IP ranges.)')]
        $sourceIpRanges,
        [parameter(mandatory=$False,HelpMessage='Destination IP ranges.)')]
        $destinationIpRanges,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:DscpConfiguration")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'markings')
        {
            $resource.properties["markings"] = $markings
        }

        if($PSBoundParameters.Keys -icontains 'dscpConfigurationName')
        {
            $resource.properties["dscpConfigurationName"] = $dscpConfigurationName
        }

        if($PSBoundParameters.Keys -icontains 'sourcePortRanges')
        {
            $resource.properties["sourcePortRanges"] = $sourcePortRanges
        }

        if($PSBoundParameters.Keys -icontains 'destinationPortRanges')
        {
            $resource.properties["destinationPortRanges"] = $destinationPortRanges
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'protocol')
        {
            $resource.properties["protocol"] = $protocol
        }

        if($PSBoundParameters.Keys -icontains 'sourceIpRanges')
        {
            $resource.properties["sourceIpRanges"] = $sourceIpRanges
        }

        if($PSBoundParameters.Keys -icontains 'destinationIpRanges')
        {
            $resource.properties["destinationIpRanges"] = $destinationIpRanges
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkDdosProtectionPlan
{
    [Alias('azure_native_network_ddosprotectionplan')]
    param (
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the DDoS protection plan.)')]
        [string]
        $ddosProtectionPlanName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:DdosProtectionPlan")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'ddosProtectionPlanName')
        {
            $resource.properties["ddosProtectionPlanName"] = $ddosProtectionPlanName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkLocalNetworkGateway
{
    [Alias('azure_native_network_localnetworkgateway')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the local network gateway.)')]
        [string]
        $localNetworkGatewayName,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Local network gateway''s BGP speaker settings.)')]
        [BgpSettings]
        $bgpSettings,
        [parameter(mandatory=$False,HelpMessage='IP address of local network gateway.)')]
        [string]
        $gatewayIpAddress,
        [parameter(mandatory=$False,HelpMessage='FQDN of local network gateway.)')]
        [string]
        $fqdn,
        [parameter(mandatory=$False,HelpMessage='Local network site address space.)')]
        [AddressSpace]
        $localNetworkAddressSpace,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:LocalNetworkGateway")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'localNetworkGatewayName')
        {
            $resource.properties["localNetworkGatewayName"] = $localNetworkGatewayName
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'bgpSettings')
        {
            $resource.properties["bgpSettings"] = $bgpSettings
        }

        if($PSBoundParameters.Keys -icontains 'gatewayIpAddress')
        {
            $resource.properties["gatewayIpAddress"] = $gatewayIpAddress
        }

        if($PSBoundParameters.Keys -icontains 'fqdn')
        {
            $resource.properties["fqdn"] = $fqdn
        }

        if($PSBoundParameters.Keys -icontains 'localNetworkAddressSpace')
        {
            $resource.properties["localNetworkAddressSpace"] = $localNetworkAddressSpace
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class ExpressRouteCircuitPeeringId
{
    [string] $id
}
function New-AzureNativeTypeNetworkExpressRouteCircuitPeeringId
{
    param (
        [parameter(mandatory=$False,HelpMessage='The ID of the ExpressRoute circuit peering.)')]
        [string]
        $id
    )

    process
    {
        return $([ExpressRouteCircuitPeeringId]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkExpressRouteConnection
{
    [Alias('azure_native_network_expressrouteconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the ExpressRoute gateway.)')]
        [string]
        $expressRouteGatewayName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Enable internet security.)')]
        [bool]
        $enableInternetSecurity,
        [parameter(mandatory=$False,HelpMessage='Authorization key to establish the connection.)')]
        [string]
        $authorizationKey,
        [parameter(mandatory=$False,HelpMessage='The name of the connection subresource.)')]
        [string]
        $connectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The Routing Configuration indicating the associated and propagated route tables on this connection.)')]
        [RoutingConfiguration]
        $routingConfiguration,
        [parameter(mandatory=$False,HelpMessage='Enable FastPath to vWan Firewall hub.)')]
        [bool]
        $expressRouteGatewayBypass,
        [parameter(mandatory=$False,HelpMessage='The ExpressRoute circuit peering.)')]
        [ExpressRouteCircuitPeeringId]
        $expressRouteCircuitPeering,
        [parameter(mandatory=$False,HelpMessage='The routing weight associated to the connection.)')]
        [int]
        $routingWeight,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ExpressRouteConnection")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["expressRouteCircuitPeering"] = $expressRouteCircuitPeering
        $resource.properties["expressRouteGatewayName"] = $expressRouteGatewayName
        $resource.properties["name"] = $name
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'enableInternetSecurity')
        {
            $resource.properties["enableInternetSecurity"] = $enableInternetSecurity
        }

        if($PSBoundParameters.Keys -icontains 'authorizationKey')
        {
            $resource.properties["authorizationKey"] = $authorizationKey
        }

        if($PSBoundParameters.Keys -icontains 'connectionName')
        {
            $resource.properties["connectionName"] = $connectionName
        }

        if($PSBoundParameters.Keys -icontains 'routingConfiguration')
        {
            $resource.properties["routingConfiguration"] = $routingConfiguration
        }

        if($PSBoundParameters.Keys -icontains 'expressRouteGatewayBypass')
        {
            $resource.properties["expressRouteGatewayBypass"] = $expressRouteGatewayBypass
        }

        if($PSBoundParameters.Keys -icontains 'routingWeight')
        {
            $resource.properties["routingWeight"] = $routingWeight
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkLoadBalancerBackendAddressPool
{
    [Alias('azure_native_network_loadbalancerbackendaddresspool')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within the set of backend address pools used by the load balancer. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the load balancer.)')]
        [string]
        $loadBalancerName,
        [parameter(mandatory=$False,HelpMessage='The name of the backend address pool.)')]
        [string]
        $backendAddressPoolName,
        [parameter(mandatory=$False,HelpMessage='An array of backend addresses.)')]
        $loadBalancerBackendAddresses,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:LoadBalancerBackendAddressPool")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["loadBalancerName"] = $loadBalancerName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'backendAddressPoolName')
        {
            $resource.properties["backendAddressPoolName"] = $backendAddressPoolName
        }

        if($PSBoundParameters.Keys -icontains 'loadBalancerBackendAddresses')
        {
            $resource.properties["loadBalancerBackendAddresses"] = $loadBalancerBackendAddresses
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkAdminRuleCollection
{
    [Alias('azure_native_network_adminrulecollection')]
    param (
        [parameter(mandatory=$False,HelpMessage='A display name of the rule collection.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='A description of the rule collection.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration rule collection.)')]
        [string]
        $ruleCollectionName,
        [parameter(mandatory=$False,HelpMessage='Groups for configuration)')]
        $appliesToGroups,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration.)')]
        [string]
        $configurationName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:AdminRuleCollection")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["configurationName"] = $configurationName
        $resource.properties["networkManagerName"] = $networkManagerName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'displayName')
        {
            $resource.properties["displayName"] = $displayName
        }

        if($PSBoundParameters.Keys -icontains 'description')
        {
            $resource.properties["description"] = $description
        }

        if($PSBoundParameters.Keys -icontains 'ruleCollectionName')
        {
            $resource.properties["ruleCollectionName"] = $ruleCollectionName
        }

        if($PSBoundParameters.Keys -icontains 'appliesToGroups')
        {
            $resource.properties["appliesToGroups"] = $appliesToGroups
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class ApplicationGatewayFirewallExclusion
{
    [string] $matchVariable
    [string] $selector
    [string] $selectorMatchOperator
}
function New-AzureNativeTypeNetworkApplicationGatewayFirewallExclusion
{
    param (
        [parameter(mandatory=$False,HelpMessage='The variable to be excluded.)')]
        [string]
        $matchVariable,
        [parameter(mandatory=$False,HelpMessage='When matchVariable is a collection, operator used to specify which elements in the collection this exclusion applies to.)')]
        [string]
        $selector,
        [parameter(mandatory=$False,HelpMessage='When matchVariable is a collection, operate on the selector to specify which elements in the collection this exclusion applies to.)')]
        [string]
        $selectorMatchOperator
    )

    process
    {
        return $([ApplicationGatewayFirewallExclusion]$PSBoundParameters)
    }
}
class ApplicationGatewayFirewallDisabledRuleGroup
{
    [int[]] $rules
    [string] $ruleGroupName
}
function New-AzureNativeTypeNetworkApplicationGatewayFirewallDisabledRuleGroup
{
    param (
        [parameter(mandatory=$False,HelpMessage='The list of rules that will be disabled. If null, all rules of the rule group will be disabled.)')]
        [int[]]
        $rules,
        [parameter(mandatory=$False,HelpMessage='The name of the rule group that will be disabled.)')]
        [string]
        $ruleGroupName
    )

    process
    {
        return $([ApplicationGatewayFirewallDisabledRuleGroup]$PSBoundParameters)
    }
}
class ApplicationGatewayWebApplicationFirewallConfiguration
{
    [ArgumentCompletions('Detection', 'Prevention')]
    [string] $firewallMode
    [bool] $requestBodyCheck
    [ApplicationGatewayFirewallExclusion[]] $exclusions
    [string] $ruleSetType
    [int] $maxRequestBodySize
    [int] $fileUploadLimitInMb
    [bool] $enabled
    [int] $maxRequestBodySizeInKb
    [string] $ruleSetVersion
    [ApplicationGatewayFirewallDisabledRuleGroup[]] $disabledRuleGroups
}
function New-AzureNativeTypeNetworkApplicationGatewayWebApplicationFirewallConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='Web application firewall mode.)')]
        [string]
        [ArgumentCompletions('Detection', 'Prevention')]
        $firewallMode,
        [parameter(mandatory=$False,HelpMessage='Whether allow WAF to check request Body.)')]
        [bool]
        $requestBodyCheck,
        [parameter(mandatory=$False,HelpMessage='The exclusion list.)')]
        $exclusions,
        [parameter(mandatory=$False,HelpMessage='The type of the web application firewall rule set. Possible values are: ''OWASP''.)')]
        [string]
        $ruleSetType,
        [parameter(mandatory=$False,HelpMessage='Maximum request body size for WAF.)')]
        [int]
        $maxRequestBodySize,
        [parameter(mandatory=$False,HelpMessage='Maximum file upload size in Mb for WAF.)')]
        [int]
        $fileUploadLimitInMb,
        [parameter(mandatory=$False,HelpMessage='Whether the web application firewall is enabled or not.)')]
        [bool]
        $enabled,
        [parameter(mandatory=$False,HelpMessage='Maximum request body size in Kb for WAF.)')]
        [int]
        $maxRequestBodySizeInKb,
        [parameter(mandatory=$False,HelpMessage='The version of the rule set type.)')]
        [string]
        $ruleSetVersion,
        [parameter(mandatory=$False,HelpMessage='The disabled rule groups.)')]
        $disabledRuleGroups
    )

    process
    {
        return $([ApplicationGatewayWebApplicationFirewallConfiguration]$PSBoundParameters)
    }
}
class ApplicationGatewaySslPolicy
{
    [string[]] $cipherSuites
    [string[]] $disabledSslProtocols
    [ArgumentCompletions('Predefined', 'Custom')]
    [string] $policyType
    [ArgumentCompletions('AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S')]
    [string] $policyName
    [ArgumentCompletions('TLSv1_0', 'TLSv1_1', 'TLSv1_2')]
    [string] $minProtocolVersion
}
function New-AzureNativeTypeNetworkApplicationGatewaySslPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='Ssl cipher suites to be enabled in the specified order to application gateway.)')]
        $cipherSuites,
        [parameter(mandatory=$False,HelpMessage='Ssl protocols to be disabled on application gateway.)')]
        $disabledSslProtocols,
        [parameter(mandatory=$False,HelpMessage='Type of Ssl Policy.)')]
        [string]
        [ArgumentCompletions('Predefined', 'Custom')]
        $policyType,
        [parameter(mandatory=$False,HelpMessage='Name of Ssl predefined policy.)')]
        [string]
        [ArgumentCompletions('AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S')]
        $policyName,
        [parameter(mandatory=$False,HelpMessage='Minimum version of Ssl protocol to be supported on application gateway.)')]
        [string]
        [ArgumentCompletions('TLSv1_0', 'TLSv1_1', 'TLSv1_2')]
        $minProtocolVersion
    )

    process
    {
        return $([ApplicationGatewaySslPolicy]$PSBoundParameters)
    }
}
class ManagedServiceIdentity
{
    [ArgumentCompletions('SystemAssigned', 'UserAssigned', 'SystemAssigned, UserAssigned', 'None')]
    [object] $type
    [object] $userAssignedIdentities
}
function New-AzureNativeTypeNetworkManagedServiceIdentity
{
    param (
        [parameter(mandatory=$False,HelpMessage='The type of identity used for the resource. The type ''SystemAssigned, UserAssigned'' includes both an implicitly created identity and a set of user assigned identities. The type ''None'' will remove any identities from the virtual machine.)')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The list of user identities associated with resource. The user identity dictionary key references will be ARM resource ids in the form: ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}''.)')]
        [object]
        $userAssignedIdentities
    )

    process
    {
        return $([ManagedServiceIdentity]$PSBoundParameters)
    }
}
class ApplicationGatewayAutoscaleConfiguration
{
    [int] $maxCapacity
    [int] $minCapacity
}
function New-AzureNativeTypeNetworkApplicationGatewayAutoscaleConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='Upper bound on number of Application Gateway capacity.)')]
        [int]
        $maxCapacity,
        [parameter(mandatory=$False,HelpMessage='Lower bound on number of Application Gateway capacity.)')]
        [int]
        $minCapacity
    )

    process
    {
        return $([ApplicationGatewayAutoscaleConfiguration]$PSBoundParameters)
    }
}
class ApplicationGatewaySku
{
    [ArgumentCompletions('Standard_Small', 'Standard_Medium', 'Standard_Large', 'WAF_Medium', 'WAF_Large', 'Standard_v2', 'WAF_v2')]
    [string] $name
    [ArgumentCompletions('Standard', 'WAF', 'Standard_v2', 'WAF_v2')]
    [string] $tier
    [int] $capacity
}
function New-AzureNativeTypeNetworkApplicationGatewaySku
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of an application gateway SKU.)')]
        [string]
        [ArgumentCompletions('Standard_Small', 'Standard_Medium', 'Standard_Large', 'WAF_Medium', 'WAF_Large', 'Standard_v2', 'WAF_v2')]
        $name,
        [parameter(mandatory=$False,HelpMessage='Tier of an application gateway.)')]
        [string]
        [ArgumentCompletions('Standard', 'WAF', 'Standard_v2', 'WAF_v2')]
        $tier,
        [parameter(mandatory=$False,HelpMessage='Capacity (instance count) of an application gateway.)')]
        [int]
        $capacity
    )

    process
    {
        return $([ApplicationGatewaySku]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkApplicationGateway
{
    [Alias('azure_native_network_applicationgateway')]
    param (
        [parameter(mandatory=$False,HelpMessage='If true, associates a firewall policy with an application gateway regardless whether the policy differs from the WAF Config.)')]
        [bool]
        $forceFirewallPolicyAssociation,
        [parameter(mandatory=$False,HelpMessage='Trusted Root certificates of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).)')]
        $trustedRootCertificates,
        [parameter(mandatory=$False,HelpMessage='Trusted client certificates of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).)')]
        $trustedClientCertificates,
        [parameter(mandatory=$False,HelpMessage='SSL certificates of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).)')]
        $sslCertificates,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Rewrite rules for the application gateway resource.)')]
        $rewriteRuleSets,
        [parameter(mandatory=$False,HelpMessage='Web application firewall configuration.)')]
        [ApplicationGatewayWebApplicationFirewallConfiguration]
        $webApplicationFirewallConfiguration,
        [parameter(mandatory=$False,HelpMessage='Probes of the application gateway resource.)')]
        $probes,
        [parameter(mandatory=$False,HelpMessage='Frontend ports of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).)')]
        $frontendPorts,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the application gateway.)')]
        [string]
        $applicationGatewayName,
        [parameter(mandatory=$False,HelpMessage='Whether HTTP2 is enabled on the application gateway resource.)')]
        [bool]
        $enableHttp2,
        [parameter(mandatory=$False,HelpMessage='Backend address pool of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).)')]
        $backendAddressPools,
        [parameter(mandatory=$False,HelpMessage='Authentication certificates of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).)')]
        $authenticationCertificates,
        [parameter(mandatory=$False,HelpMessage='URL path map of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).)')]
        $urlPathMaps,
        [parameter(mandatory=$False,HelpMessage='PrivateLink configurations on application gateway.)')]
        $privateLinkConfigurations,
        [parameter(mandatory=$False,HelpMessage='SSL policy of the application gateway resource.)')]
        [ApplicationGatewaySslPolicy]
        $sslPolicy,
        [parameter(mandatory=$False,HelpMessage='Custom error configurations of the application gateway resource.)')]
        $customErrorConfigurations,
        [parameter(mandatory=$False,HelpMessage='Frontend IP addresses of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).)')]
        $frontendIPConfigurations,
        [parameter(mandatory=$False,HelpMessage='The identity of the application gateway, if configured.)')]
        [ManagedServiceIdentity]
        $identity,
        [parameter(mandatory=$False,HelpMessage='Backend http settings of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).)')]
        $backendHttpSettingsCollection,
        [parameter(mandatory=$False,HelpMessage='Whether FIPS is enabled on the application gateway resource.)')]
        [bool]
        $enableFips,
        [parameter(mandatory=$False,HelpMessage='Request routing rules of the application gateway resource.)')]
        $requestRoutingRules,
        [parameter(mandatory=$False,HelpMessage='Autoscale Configuration.)')]
        [ApplicationGatewayAutoscaleConfiguration]
        $autoscaleConfiguration,
        [parameter(mandatory=$False,HelpMessage='Subnets of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).)')]
        $gatewayIPConfigurations,
        [parameter(mandatory=$False,HelpMessage='SSL profiles of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).)')]
        $sslProfiles,
        [parameter(mandatory=$False,HelpMessage='Reference to the FirewallPolicy resource.)')]
        [SubResource]
        $firewallPolicy,
        [parameter(mandatory=$False,HelpMessage='A list of availability zones denoting where the resource needs to come from.)')]
        [string[]]
        $zones,
        [parameter(mandatory=$False,HelpMessage='Http listeners of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).)')]
        $httpListeners,
        [parameter(mandatory=$False,HelpMessage='SKU of the application gateway resource.)')]
        [ApplicationGatewaySku]
        $sku,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Redirect configurations of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).)')]
        $redirectConfigurations,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ApplicationGateway")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'forceFirewallPolicyAssociation')
        {
            $resource.properties["forceFirewallPolicyAssociation"] = $forceFirewallPolicyAssociation
        }

        if($PSBoundParameters.Keys -icontains 'trustedRootCertificates')
        {
            $resource.properties["trustedRootCertificates"] = $trustedRootCertificates
        }

        if($PSBoundParameters.Keys -icontains 'trustedClientCertificates')
        {
            $resource.properties["trustedClientCertificates"] = $trustedClientCertificates
        }

        if($PSBoundParameters.Keys -icontains 'sslCertificates')
        {
            $resource.properties["sslCertificates"] = $sslCertificates
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'rewriteRuleSets')
        {
            $resource.properties["rewriteRuleSets"] = $rewriteRuleSets
        }

        if($PSBoundParameters.Keys -icontains 'webApplicationFirewallConfiguration')
        {
            $resource.properties["webApplicationFirewallConfiguration"] = $webApplicationFirewallConfiguration
        }

        if($PSBoundParameters.Keys -icontains 'probes')
        {
            $resource.properties["probes"] = $probes
        }

        if($PSBoundParameters.Keys -icontains 'frontendPorts')
        {
            $resource.properties["frontendPorts"] = $frontendPorts
        }

        if($PSBoundParameters.Keys -icontains 'applicationGatewayName')
        {
            $resource.properties["applicationGatewayName"] = $applicationGatewayName
        }

        if($PSBoundParameters.Keys -icontains 'enableHttp2')
        {
            $resource.properties["enableHttp2"] = $enableHttp2
        }

        if($PSBoundParameters.Keys -icontains 'backendAddressPools')
        {
            $resource.properties["backendAddressPools"] = $backendAddressPools
        }

        if($PSBoundParameters.Keys -icontains 'authenticationCertificates')
        {
            $resource.properties["authenticationCertificates"] = $authenticationCertificates
        }

        if($PSBoundParameters.Keys -icontains 'urlPathMaps')
        {
            $resource.properties["urlPathMaps"] = $urlPathMaps
        }

        if($PSBoundParameters.Keys -icontains 'privateLinkConfigurations')
        {
            $resource.properties["privateLinkConfigurations"] = $privateLinkConfigurations
        }

        if($PSBoundParameters.Keys -icontains 'sslPolicy')
        {
            $resource.properties["sslPolicy"] = $sslPolicy
        }

        if($PSBoundParameters.Keys -icontains 'customErrorConfigurations')
        {
            $resource.properties["customErrorConfigurations"] = $customErrorConfigurations
        }

        if($PSBoundParameters.Keys -icontains 'frontendIPConfigurations')
        {
            $resource.properties["frontendIPConfigurations"] = $frontendIPConfigurations
        }

        if($PSBoundParameters.Keys -icontains 'identity')
        {
            $resource.properties["identity"] = $identity
        }

        if($PSBoundParameters.Keys -icontains 'backendHttpSettingsCollection')
        {
            $resource.properties["backendHttpSettingsCollection"] = $backendHttpSettingsCollection
        }

        if($PSBoundParameters.Keys -icontains 'enableFips')
        {
            $resource.properties["enableFips"] = $enableFips
        }

        if($PSBoundParameters.Keys -icontains 'requestRoutingRules')
        {
            $resource.properties["requestRoutingRules"] = $requestRoutingRules
        }

        if($PSBoundParameters.Keys -icontains 'autoscaleConfiguration')
        {
            $resource.properties["autoscaleConfiguration"] = $autoscaleConfiguration
        }

        if($PSBoundParameters.Keys -icontains 'gatewayIPConfigurations')
        {
            $resource.properties["gatewayIPConfigurations"] = $gatewayIPConfigurations
        }

        if($PSBoundParameters.Keys -icontains 'sslProfiles')
        {
            $resource.properties["sslProfiles"] = $sslProfiles
        }

        if($PSBoundParameters.Keys -icontains 'firewallPolicy')
        {
            $resource.properties["firewallPolicy"] = $firewallPolicy
        }

        if($PSBoundParameters.Keys -icontains 'zones')
        {
            $resource.properties["zones"] = $zones
        }

        if($PSBoundParameters.Keys -icontains 'httpListeners')
        {
            $resource.properties["httpListeners"] = $httpListeners
        }

        if($PSBoundParameters.Keys -icontains 'sku')
        {
            $resource.properties["sku"] = $sku
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'redirectConfigurations')
        {
            $resource.properties["redirectConfigurations"] = $redirectConfigurations
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkSecurityAdminConfiguration
{
    [Alias('azure_native_network_securityadminconfiguration')]
    param (
        [parameter(mandatory=$False,HelpMessage='A display name of the security configuration.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='A description of the security configuration.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='Flag if need to delete existing network security groups.)')]
        [string]
        [ArgumentCompletions('False', 'True')]
        $deleteExistingNSGs,
        [parameter(mandatory=$False,HelpMessage='Security Type.)')]
        [string]
        [ArgumentCompletions('AdminPolicy', 'UserPolicy')]
        $securityType,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration.)')]
        [string]
        $configurationName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:SecurityAdminConfiguration")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["networkManagerName"] = $networkManagerName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'displayName')
        {
            $resource.properties["displayName"] = $displayName
        }

        if($PSBoundParameters.Keys -icontains 'description')
        {
            $resource.properties["description"] = $description
        }

        if($PSBoundParameters.Keys -icontains 'deleteExistingNSGs')
        {
            $resource.properties["deleteExistingNSGs"] = $deleteExistingNSGs
        }

        if($PSBoundParameters.Keys -icontains 'securityType')
        {
            $resource.properties["securityType"] = $securityType
        }

        if($PSBoundParameters.Keys -icontains 'configurationName')
        {
            $resource.properties["configurationName"] = $configurationName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkRouteFilter
{
    [Alias('azure_native_network_routefilter')]
    param (
        [parameter(mandatory=$False,HelpMessage='Collection of RouteFilterRules contained within a route filter.)')]
        $rules,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the route filter.)')]
        [string]
        $routeFilterName,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:RouteFilter")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'rules')
        {
            $resource.properties["rules"] = $rules
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'routeFilterName')
        {
            $resource.properties["routeFilterName"] = $routeFilterName
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkHubRouteTable
{
    [Alias('azure_native_network_hubroutetable')]
    param (
        [parameter(mandatory=$False,HelpMessage='List of labels associated with this route table.)')]
        [string[]]
        $labels,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VirtualHub.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualHub.)')]
        [string]
        $virtualHubName,
        [parameter(mandatory=$False,HelpMessage='List of all routes.)')]
        $routes,
        [parameter(mandatory=$False,HelpMessage='The name of the RouteTable.)')]
        [string]
        $routeTableName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:HubRouteTable")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["virtualHubName"] = $virtualHubName

        if($PSBoundParameters.Keys -icontains 'labels')
        {
            $resource.properties["labels"] = $labels
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'routes')
        {
            $resource.properties["routes"] = $routes
        }

        if($PSBoundParameters.Keys -icontains 'routeTableName')
        {
            $resource.properties["routeTableName"] = $routeTableName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkNatRule
{
    [Alias('azure_native_network_natrule')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the nat rule.)')]
        [string]
        $natRuleName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The private IP address internal mapping for NAT.)')]
        $internalMappings,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VpnGateway.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The private IP address external mapping for NAT.)')]
        $externalMappings,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The type of NAT rule for VPN NAT.)')]
        [string]
        [ArgumentCompletions('Static', 'Dynamic')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The Source NAT direction of a VPN NAT.)')]
        [string]
        [ArgumentCompletions('EgressSnat', 'IngressSnat')]
        $mode,
        [parameter(mandatory=$False,HelpMessage='The name of the gateway.)')]
        [string]
        $gatewayName,
        [parameter(mandatory=$False,HelpMessage='The IP Configuration ID this NAT rule applies to.)')]
        [string]
        $ipConfigurationId,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:NatRule")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["gatewayName"] = $gatewayName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'natRuleName')
        {
            $resource.properties["natRuleName"] = $natRuleName
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'internalMappings')
        {
            $resource.properties["internalMappings"] = $internalMappings
        }

        if($PSBoundParameters.Keys -icontains 'externalMappings')
        {
            $resource.properties["externalMappings"] = $externalMappings
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'type')
        {
            $resource.properties["type"] = $type
        }

        if($PSBoundParameters.Keys -icontains 'mode')
        {
            $resource.properties["mode"] = $mode
        }

        if($PSBoundParameters.Keys -icontains 'ipConfigurationId')
        {
            $resource.properties["ipConfigurationId"] = $ipConfigurationId
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkRoutingIntent
{
    [Alias('azure_native_network_routingintent')]
    param (
        [parameter(mandatory=$False,HelpMessage='The resource group name of the RoutingIntent.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='List of routing policies.)')]
        $routingPolicies,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the per VirtualHub singleton Routing Intent resource.)')]
        [string]
        $routingIntentName,
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualHub.)')]
        [string]
        $virtualHubName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:RoutingIntent")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["virtualHubName"] = $virtualHubName

        if($PSBoundParameters.Keys -icontains 'routingPolicies')
        {
            $resource.properties["routingPolicies"] = $routingPolicies
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'routingIntentName')
        {
            $resource.properties["routingIntentName"] = $routingIntentName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkCustomIPPrefix
{
    [Alias('azure_native_network_customipprefix')]
    param (
        [parameter(mandatory=$False,HelpMessage='A list of availability zones denoting the IP allocated for the resource needs to come from.)')]
        [string[]]
        $zones,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the custom IP prefix.)')]
        [string]
        $customIpPrefixName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The commissioned state of the Custom IP Prefix.)')]
        [string]
        [ArgumentCompletions('Provisioning', 'Provisioned', 'Commissioning', 'Commissioned', 'Decommissioning', 'Deprovisioning')]
        $commissionedState,
        [parameter(mandatory=$False,HelpMessage='The extended location of the custom IP prefix.)')]
        [ExtendedLocation]
        $extendedLocation,
        [parameter(mandatory=$False,HelpMessage='The prefix range in CIDR notation. Should include the start address and the prefix length.)')]
        [string]
        $cidr,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:CustomIPPrefix")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'zones')
        {
            $resource.properties["zones"] = $zones
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'customIpPrefixName')
        {
            $resource.properties["customIpPrefixName"] = $customIpPrefixName
        }

        if($PSBoundParameters.Keys -icontains 'commissionedState')
        {
            $resource.properties["commissionedState"] = $commissionedState
        }

        if($PSBoundParameters.Keys -icontains 'extendedLocation')
        {
            $resource.properties["extendedLocation"] = $extendedLocation
        }

        if($PSBoundParameters.Keys -icontains 'cidr')
        {
            $resource.properties["cidr"] = $cidr
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkVirtualNetworkGatewayNatRule
{
    [Alias('azure_native_network_virtualnetworkgatewaynatrule')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the gateway.)')]
        [string]
        $virtualNetworkGatewayName,
        [parameter(mandatory=$False,HelpMessage='The name of the nat rule.)')]
        [string]
        $natRuleName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The private IP address internal mapping for NAT.)')]
        $internalMappings,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the Virtual Network Gateway.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The private IP address external mapping for NAT.)')]
        $externalMappings,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The type of NAT rule for VPN NAT.)')]
        [string]
        [ArgumentCompletions('Static', 'Dynamic')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The Source NAT direction of a VPN NAT.)')]
        [string]
        [ArgumentCompletions('EgressSnat', 'IngressSnat')]
        $mode,
        [parameter(mandatory=$False,HelpMessage='The IP Configuration ID this NAT rule applies to.)')]
        [string]
        $ipConfigurationId,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VirtualNetworkGatewayNatRule")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["virtualNetworkGatewayName"] = $virtualNetworkGatewayName

        if($PSBoundParameters.Keys -icontains 'natRuleName')
        {
            $resource.properties["natRuleName"] = $natRuleName
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'internalMappings')
        {
            $resource.properties["internalMappings"] = $internalMappings
        }

        if($PSBoundParameters.Keys -icontains 'externalMappings')
        {
            $resource.properties["externalMappings"] = $externalMappings
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'type')
        {
            $resource.properties["type"] = $type
        }

        if($PSBoundParameters.Keys -icontains 'mode')
        {
            $resource.properties["mode"] = $mode
        }

        if($PSBoundParameters.Keys -icontains 'ipConfigurationId')
        {
            $resource.properties["ipConfigurationId"] = $ipConfigurationId
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkNspAssociationsProxy
{
    [Alias('azure_native_network_nspassociationsproxy')]
    param (
        [parameter(mandatory=$False,HelpMessage='Profile id to which the PaaS resource is associated.)')]
        [SubResource]
        $profile,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The PaaS resource to be associated.)')]
        [SubResource]
        $privateLinkResource,
        [parameter(mandatory=$False,HelpMessage='The name of the NSP association.)')]
        [string]
        $associationName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network security perimeter.)')]
        [string]
        $networkSecurityPerimeterName,
        [parameter(mandatory=$False,HelpMessage='Access mode on the association.)')]
        [string]
        [ArgumentCompletions('Learning', 'Enforced', 'Audit')]
        $accessMode,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:NspAssociationsProxy")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["networkSecurityPerimeterName"] = $networkSecurityPerimeterName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'profile')
        {
            $resource.properties["profile"] = $profile
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'privateLinkResource')
        {
            $resource.properties["privateLinkResource"] = $privateLinkResource
        }

        if($PSBoundParameters.Keys -icontains 'associationName')
        {
            $resource.properties["associationName"] = $associationName
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'accessMode')
        {
            $resource.properties["accessMode"] = $accessMode
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkVpnConnection
{
    [Alias('azure_native_network_vpnconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the gateway.)')]
        [string]
        $gatewayName,
        [parameter(mandatory=$False,HelpMessage='The Routing Configuration indicating the associated and propagated route tables on this connection.)')]
        [RoutingConfiguration]
        $routingConfiguration,
        [parameter(mandatory=$False,HelpMessage='The IPSec Policies to be considered by this connection.)')]
        $ipsecPolicies,
        [parameter(mandatory=$False,HelpMessage='List of all vpn site link connections to the gateway.)')]
        $vpnLinkConnections,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VpnGateway.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the connection.)')]
        [string]
        $connectionName,
        [parameter(mandatory=$False,HelpMessage='Enable policy-based traffic selectors.)')]
        [bool]
        $usePolicyBasedTrafficSelectors,
        [parameter(mandatory=$False,HelpMessage='Connection protocol used for this connection.)')]
        [string]
        [ArgumentCompletions('IKEv2', 'IKEv1')]
        $vpnConnectionProtocolType,
        [parameter(mandatory=$False,HelpMessage='EnableBgp flag.)')]
        [bool]
        $enableBgp,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='DPD timeout in seconds for vpn connection.)')]
        [int]
        $dpdTimeoutSeconds,
        [parameter(mandatory=$False,HelpMessage='Enable internet security.)')]
        [bool]
        $enableInternetSecurity,
        [parameter(mandatory=$False,HelpMessage='Routing weight for vpn connection.)')]
        [int]
        $routingWeight,
        [parameter(mandatory=$False,HelpMessage='Expected bandwidth in MBPS.)')]
        [int]
        $connectionBandwidth,
        [parameter(mandatory=$False,HelpMessage='Use local azure ip to initiate connection.)')]
        [bool]
        $useLocalAzureIpAddress,
        [parameter(mandatory=$False,HelpMessage='The Traffic Selector Policies to be considered by this connection.)')]
        $trafficSelectorPolicies,
        [parameter(mandatory=$False,HelpMessage='EnableBgp flag.)')]
        [bool]
        $enableRateLimiting,
        [parameter(mandatory=$False,HelpMessage='SharedKey for the vpn connection.)')]
        [string]
        $sharedKey,
        [parameter(mandatory=$False,HelpMessage='Id of the connected vpn site.)')]
        [SubResource]
        $remoteVpnSite,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VpnConnection")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["gatewayName"] = $gatewayName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'routingConfiguration')
        {
            $resource.properties["routingConfiguration"] = $routingConfiguration
        }

        if($PSBoundParameters.Keys -icontains 'ipsecPolicies')
        {
            $resource.properties["ipsecPolicies"] = $ipsecPolicies
        }

        if($PSBoundParameters.Keys -icontains 'vpnLinkConnections')
        {
            $resource.properties["vpnLinkConnections"] = $vpnLinkConnections
        }

        if($PSBoundParameters.Keys -icontains 'connectionName')
        {
            $resource.properties["connectionName"] = $connectionName
        }

        if($PSBoundParameters.Keys -icontains 'usePolicyBasedTrafficSelectors')
        {
            $resource.properties["usePolicyBasedTrafficSelectors"] = $usePolicyBasedTrafficSelectors
        }

        if($PSBoundParameters.Keys -icontains 'vpnConnectionProtocolType')
        {
            $resource.properties["vpnConnectionProtocolType"] = $vpnConnectionProtocolType
        }

        if($PSBoundParameters.Keys -icontains 'enableBgp')
        {
            $resource.properties["enableBgp"] = $enableBgp
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'dpdTimeoutSeconds')
        {
            $resource.properties["dpdTimeoutSeconds"] = $dpdTimeoutSeconds
        }

        if($PSBoundParameters.Keys -icontains 'enableInternetSecurity')
        {
            $resource.properties["enableInternetSecurity"] = $enableInternetSecurity
        }

        if($PSBoundParameters.Keys -icontains 'routingWeight')
        {
            $resource.properties["routingWeight"] = $routingWeight
        }

        if($PSBoundParameters.Keys -icontains 'connectionBandwidth')
        {
            $resource.properties["connectionBandwidth"] = $connectionBandwidth
        }

        if($PSBoundParameters.Keys -icontains 'useLocalAzureIpAddress')
        {
            $resource.properties["useLocalAzureIpAddress"] = $useLocalAzureIpAddress
        }

        if($PSBoundParameters.Keys -icontains 'trafficSelectorPolicies')
        {
            $resource.properties["trafficSelectorPolicies"] = $trafficSelectorPolicies
        }

        if($PSBoundParameters.Keys -icontains 'enableRateLimiting')
        {
            $resource.properties["enableRateLimiting"] = $enableRateLimiting
        }

        if($PSBoundParameters.Keys -icontains 'sharedKey')
        {
            $resource.properties["sharedKey"] = $sharedKey
        }

        if($PSBoundParameters.Keys -icontains 'remoteVpnSite')
        {
            $resource.properties["remoteVpnSite"] = $remoteVpnSite
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkApplicationSecurityGroup
{
    [Alias('azure_native_network_applicationsecuritygroup')]
    param (
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the application security group.)')]
        [string]
        $applicationSecurityGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ApplicationSecurityGroup")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'applicationSecurityGroupName')
        {
            $resource.properties["applicationSecurityGroupName"] = $applicationSecurityGroupName
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class SoaRecord
{
    [int] $serialNumber
    [string] $email
    [int] $refreshTime
    [int] $expireTime
    [int] $retryTime
    [string] $host
    [int] $minimumTtl
}
function New-AzureNativeTypeNetworkSoaRecord
{
    param (
        [parameter(mandatory=$False,HelpMessage='The serial number for this SOA record.)')]
        [int]
        $serialNumber,
        [parameter(mandatory=$False,HelpMessage='The email contact for this SOA record.)')]
        [string]
        $email,
        [parameter(mandatory=$False,HelpMessage='The refresh value for this SOA record.)')]
        [int]
        $refreshTime,
        [parameter(mandatory=$False,HelpMessage='The expire time for this SOA record.)')]
        [int]
        $expireTime,
        [parameter(mandatory=$False,HelpMessage='The retry time for this SOA record.)')]
        [int]
        $retryTime,
        [parameter(mandatory=$False,HelpMessage='The domain name of the authoritative name server for this SOA record.)')]
        [string]
        $host,
        [parameter(mandatory=$False,HelpMessage='The minimum value for this SOA record. By convention this is used to determine the negative caching duration.)')]
        [int]
        $minimumTtl
    )

    process
    {
        return $([SoaRecord]$PSBoundParameters)
    }
}
class CnameRecord
{
    [string] $cname
}
function New-AzureNativeTypeNetworkCnameRecord
{
    param (
        [parameter(mandatory=$False,HelpMessage='The canonical name for this CNAME record.)')]
        [string]
        $cname
    )

    process
    {
        return $([CnameRecord]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkRecordSet
{
    [Alias('azure_native_network_recordset')]
    param (
        [parameter(mandatory=$False,HelpMessage='The list of MX records in the record set.)')]
        $mxRecords,
        [parameter(mandatory=$False,HelpMessage='The metadata attached to the record set.)')]
        [hashtable]
        $metadata,
        [parameter(mandatory=$False,HelpMessage='The SOA record in the record set.)')]
        [SoaRecord]
        $soaRecord,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The type of DNS record in this record set. Record sets of type SOA can be updated but not created (they are created when the DNS zone is created).)')]
        [string]
        $recordType,
        [parameter(mandatory=$False,HelpMessage='The name of the record set, relative to the name of the zone.)')]
        [string]
        $relativeRecordSetName,
        [parameter(mandatory=$False,HelpMessage='The list of AAAA records in the record set.)')]
        $aaaaRecords,
        [parameter(mandatory=$False,HelpMessage='The name of the DNS zone (without a terminating dot).)')]
        [string]
        $zoneName,
        [parameter(mandatory=$False,HelpMessage='The list of NS records in the record set.)')]
        $nsRecords,
        [parameter(mandatory=$False,HelpMessage='The list of CAA records in the record set.)')]
        $caaRecords,
        [parameter(mandatory=$False,HelpMessage='The list of A records in the record set.)')]
        $aRecords,
        [parameter(mandatory=$False,HelpMessage='The TTL (time-to-live) of the records in the record set.)')]
        [int]
        $ttl,
        [parameter(mandatory=$False,HelpMessage='The list of SRV records in the record set.)')]
        $srvRecords,
        [parameter(mandatory=$False,HelpMessage='The list of TXT records in the record set.)')]
        $txtRecords,
        [parameter(mandatory=$False,HelpMessage='The CNAME record in the record set.)')]
        [CnameRecord]
        $cnameRecord,
        [parameter(mandatory=$False,HelpMessage='A reference to an azure resource from where the dns resource value is taken.)')]
        [SubResource]
        $targetResource,
        [parameter(mandatory=$False,HelpMessage='The list of PTR records in the record set.)')]
        $ptrRecords,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:RecordSet")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["recordType"] = $recordType
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["zoneName"] = $zoneName

        if($PSBoundParameters.Keys -icontains 'mxRecords')
        {
            $resource.properties["mxRecords"] = $mxRecords
        }

        if($PSBoundParameters.Keys -icontains 'metadata')
        {
            $resource.properties["metadata"] = $metadata
        }

        if($PSBoundParameters.Keys -icontains 'soaRecord')
        {
            $resource.properties["soaRecord"] = $soaRecord
        }

        if($PSBoundParameters.Keys -icontains 'relativeRecordSetName')
        {
            $resource.properties["relativeRecordSetName"] = $relativeRecordSetName
        }

        if($PSBoundParameters.Keys -icontains 'aaaaRecords')
        {
            $resource.properties["aaaaRecords"] = $aaaaRecords
        }

        if($PSBoundParameters.Keys -icontains 'nsRecords')
        {
            $resource.properties["nsRecords"] = $nsRecords
        }

        if($PSBoundParameters.Keys -icontains 'caaRecords')
        {
            $resource.properties["caaRecords"] = $caaRecords
        }

        if($PSBoundParameters.Keys -icontains 'aRecords')
        {
            $resource.properties["aRecords"] = $aRecords
        }

        if($PSBoundParameters.Keys -icontains 'ttl')
        {
            $resource.properties["ttl"] = $ttl
        }

        if($PSBoundParameters.Keys -icontains 'srvRecords')
        {
            $resource.properties["srvRecords"] = $srvRecords
        }

        if($PSBoundParameters.Keys -icontains 'txtRecords')
        {
            $resource.properties["txtRecords"] = $txtRecords
        }

        if($PSBoundParameters.Keys -icontains 'cnameRecord')
        {
            $resource.properties["cnameRecord"] = $cnameRecord
        }

        if($PSBoundParameters.Keys -icontains 'targetResource')
        {
            $resource.properties["targetResource"] = $targetResource
        }

        if($PSBoundParameters.Keys -icontains 'ptrRecords')
        {
            $resource.properties["ptrRecords"] = $ptrRecords
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class ExpressRouteCircuitPeeringConfig
{
    [string[]] $advertisedPublicPrefixes
    [int] $legacyMode
    [string] $routingRegistryName
    [string[]] $advertisedCommunities
    [int] $customerASN
}
function New-AzureNativeTypeNetworkExpressRouteCircuitPeeringConfig
{
    param (
        [parameter(mandatory=$False,HelpMessage='The reference to AdvertisedPublicPrefixes.)')]
        [string[]]
        $advertisedPublicPrefixes,
        [parameter(mandatory=$False,HelpMessage='The legacy mode of the peering.)')]
        [int]
        $legacyMode,
        [parameter(mandatory=$False,HelpMessage='The RoutingRegistryName of the configuration.)')]
        [string]
        $routingRegistryName,
        [parameter(mandatory=$False,HelpMessage='The communities of bgp peering. Specified for microsoft peering.)')]
        [string[]]
        $advertisedCommunities,
        [parameter(mandatory=$False,HelpMessage='The CustomerASN of the peering.)')]
        [int]
        $customerASN
    )

    process
    {
        return $([ExpressRouteCircuitPeeringConfig]$PSBoundParameters)
    }
}
class Ipv6ExpressRouteCircuitPeeringConfig
{
    [string] $primaryPeerAddressPrefix
    [SubResource] $routeFilter
    [ArgumentCompletions('Disabled', 'Enabled')]
    [string] $state
    [string] $secondaryPeerAddressPrefix
    [ExpressRouteCircuitPeeringConfig] $microsoftPeeringConfig
}
function New-AzureNativeTypeNetworkIpv6ExpressRouteCircuitPeeringConfig
{
    param (
        [parameter(mandatory=$False,HelpMessage='The primary address prefix.)')]
        [string]
        $primaryPeerAddressPrefix,
        [parameter(mandatory=$False,HelpMessage='The reference to the RouteFilter resource.)')]
        [SubResource]
        $routeFilter,
        [parameter(mandatory=$False,HelpMessage='The state of peering.)')]
        [string]
        [ArgumentCompletions('Disabled', 'Enabled')]
        $state,
        [parameter(mandatory=$False,HelpMessage='The secondary address prefix.)')]
        [string]
        $secondaryPeerAddressPrefix,
        [parameter(mandatory=$False,HelpMessage='The Microsoft peering configuration.)')]
        [ExpressRouteCircuitPeeringConfig]
        $microsoftPeeringConfig
    )

    process
    {
        return $([Ipv6ExpressRouteCircuitPeeringConfig]$PSBoundParameters)
    }
}
class ExpressRouteCircuitStats
{
    [int] $secondarybytesOut
    [int] $primarybytesIn
    [int] $primarybytesOut
    [int] $secondarybytesIn
}
function New-AzureNativeTypeNetworkExpressRouteCircuitStats
{
    param (
        [parameter(mandatory=$False,HelpMessage='The secondary BytesOut of the peering.)')]
        [int]
        $secondarybytesOut,
        [parameter(mandatory=$False,HelpMessage='The Primary BytesIn of the peering.)')]
        [int]
        $primarybytesIn,
        [parameter(mandatory=$False,HelpMessage='The primary BytesOut of the peering.)')]
        [int]
        $primarybytesOut,
        [parameter(mandatory=$False,HelpMessage='The secondary BytesIn of the peering.)')]
        [int]
        $secondarybytesIn
    )

    process
    {
        return $([ExpressRouteCircuitStats]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkExpressRouteCircuitPeering
{
    [Alias('azure_native_network_expressroutecircuitpeering')]
    param (
        [parameter(mandatory=$False,HelpMessage='The GatewayManager Etag.)')]
        [string]
        $gatewayManagerEtag,
        [parameter(mandatory=$False,HelpMessage='The list of circuit connections associated with Azure Private Peering for this circuit.)')]
        $connections,
        [parameter(mandatory=$False,HelpMessage='The peering type.)')]
        [string]
        [ArgumentCompletions('AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering')]
        $peeringType,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The Microsoft peering configuration.)')]
        [ExpressRouteCircuitPeeringConfig]
        $microsoftPeeringConfig,
        [parameter(mandatory=$False,HelpMessage='The shared key.)')]
        [string]
        $sharedKey,
        [parameter(mandatory=$False,HelpMessage='The primary address prefix.)')]
        [string]
        $primaryPeerAddressPrefix,
        [parameter(mandatory=$False,HelpMessage='The IPv6 peering configuration.)')]
        [Ipv6ExpressRouteCircuitPeeringConfig]
        $ipv6PeeringConfig,
        [parameter(mandatory=$False,HelpMessage='The secondary address prefix.)')]
        [string]
        $secondaryPeerAddressPrefix,
        [parameter(mandatory=$False,HelpMessage='The peering state.)')]
        [string]
        [ArgumentCompletions('Disabled', 'Enabled')]
        $state,
        [parameter(mandatory=$False,HelpMessage='The Azure ASN.)')]
        [int]
        $azureASN,
        [parameter(mandatory=$False,HelpMessage='The peer ASN.)')]
        [int]
        $peerASN,
        [parameter(mandatory=$False,HelpMessage='The reference to the RouteFilter resource.)')]
        [SubResource]
        $routeFilter,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The secondary port.)')]
        [string]
        $secondaryAzurePort,
        [parameter(mandatory=$False,HelpMessage='The peering stats of express route circuit.)')]
        [ExpressRouteCircuitStats]
        $stats,
        [parameter(mandatory=$False,HelpMessage='The VLAN ID.)')]
        [int]
        $vlanId,
        [parameter(mandatory=$False,HelpMessage='The primary port.)')]
        [string]
        $primaryAzurePort,
        [parameter(mandatory=$False,HelpMessage='The name of the express route circuit.)')]
        [string]
        $circuitName,
        [parameter(mandatory=$False,HelpMessage='The name of the peering.)')]
        [string]
        $peeringName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ExpressRouteCircuitPeering")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["circuitName"] = $circuitName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'gatewayManagerEtag')
        {
            $resource.properties["gatewayManagerEtag"] = $gatewayManagerEtag
        }

        if($PSBoundParameters.Keys -icontains 'connections')
        {
            $resource.properties["connections"] = $connections
        }

        if($PSBoundParameters.Keys -icontains 'peeringType')
        {
            $resource.properties["peeringType"] = $peeringType
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'microsoftPeeringConfig')
        {
            $resource.properties["microsoftPeeringConfig"] = $microsoftPeeringConfig
        }

        if($PSBoundParameters.Keys -icontains 'sharedKey')
        {
            $resource.properties["sharedKey"] = $sharedKey
        }

        if($PSBoundParameters.Keys -icontains 'primaryPeerAddressPrefix')
        {
            $resource.properties["primaryPeerAddressPrefix"] = $primaryPeerAddressPrefix
        }

        if($PSBoundParameters.Keys -icontains 'ipv6PeeringConfig')
        {
            $resource.properties["ipv6PeeringConfig"] = $ipv6PeeringConfig
        }

        if($PSBoundParameters.Keys -icontains 'secondaryPeerAddressPrefix')
        {
            $resource.properties["secondaryPeerAddressPrefix"] = $secondaryPeerAddressPrefix
        }

        if($PSBoundParameters.Keys -icontains 'state')
        {
            $resource.properties["state"] = $state
        }

        if($PSBoundParameters.Keys -icontains 'azureASN')
        {
            $resource.properties["azureASN"] = $azureASN
        }

        if($PSBoundParameters.Keys -icontains 'peerASN')
        {
            $resource.properties["peerASN"] = $peerASN
        }

        if($PSBoundParameters.Keys -icontains 'routeFilter')
        {
            $resource.properties["routeFilter"] = $routeFilter
        }

        if($PSBoundParameters.Keys -icontains 'secondaryAzurePort')
        {
            $resource.properties["secondaryAzurePort"] = $secondaryAzurePort
        }

        if($PSBoundParameters.Keys -icontains 'stats')
        {
            $resource.properties["stats"] = $stats
        }

        if($PSBoundParameters.Keys -icontains 'vlanId')
        {
            $resource.properties["vlanId"] = $vlanId
        }

        if($PSBoundParameters.Keys -icontains 'primaryAzurePort')
        {
            $resource.properties["primaryAzurePort"] = $primaryAzurePort
        }

        if($PSBoundParameters.Keys -icontains 'peeringName')
        {
            $resource.properties["peeringName"] = $peeringName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class BreakOutCategoryPolicies
{
    [bool] $optimize
    [bool] $default
    [bool] $allow
}
function New-AzureNativeTypeNetworkBreakOutCategoryPolicies
{
    param (
        [parameter(mandatory=$False,HelpMessage='Flag to control breakout of o365 optimize category.)')]
        [bool]
        $optimize,
        [parameter(mandatory=$False,HelpMessage='Flag to control breakout of o365 default category.)')]
        [bool]
        $default,
        [parameter(mandatory=$False,HelpMessage='Flag to control breakout of o365 allow category.)')]
        [bool]
        $allow
    )

    process
    {
        return $([BreakOutCategoryPolicies]$PSBoundParameters)
    }
}
class Office365PolicyProperties
{
    [BreakOutCategoryPolicies] $breakOutCategories
}
function New-AzureNativeTypeNetworkOffice365PolicyProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Office 365 breakout categories.)')]
        [BreakOutCategoryPolicies]
        $breakOutCategories
    )

    process
    {
        return $([Office365PolicyProperties]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkVirtualApplianceSite
{
    [Alias('azure_native_network_virtualappliancesite')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the site.)')]
        [string]
        $siteName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Office 365 Policy.)')]
        [Office365PolicyProperties]
        $o365Policy,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Address Prefix.)')]
        [string]
        $addressPrefix,
        [parameter(mandatory=$False,HelpMessage='Name of the virtual appliance site.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the Network Virtual Appliance.)')]
        [string]
        $networkVirtualApplianceName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VirtualApplianceSite")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["networkVirtualApplianceName"] = $networkVirtualApplianceName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'siteName')
        {
            $resource.properties["siteName"] = $siteName
        }

        if($PSBoundParameters.Keys -icontains 'o365Policy')
        {
            $resource.properties["o365Policy"] = $o365Policy
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'addressPrefix')
        {
            $resource.properties["addressPrefix"] = $addressPrefix
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkScopeConnection
{
    [Alias('azure_native_network_scopeconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='A description of the scope connection.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $resourceId,
        [parameter(mandatory=$False,HelpMessage='Name for the cross-tenant connection.)')]
        [string]
        $scopeConnectionName,
        [parameter(mandatory=$False,HelpMessage='Tenant ID.)')]
        [string]
        $tenantId,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ScopeConnection")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["networkManagerName"] = $networkManagerName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'description')
        {
            $resource.properties["description"] = $description
        }

        if($PSBoundParameters.Keys -icontains 'resourceId')
        {
            $resource.properties["resourceId"] = $resourceId
        }

        if($PSBoundParameters.Keys -icontains 'scopeConnectionName')
        {
            $resource.properties["scopeConnectionName"] = $scopeConnectionName
        }

        if($PSBoundParameters.Keys -icontains 'tenantId')
        {
            $resource.properties["tenantId"] = $tenantId
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class FirewallPolicySku
{
    [ArgumentCompletions('Standard', 'Premium')]
    [string] $tier
}
function New-AzureNativeTypeNetworkFirewallPolicySku
{
    param (
        [parameter(mandatory=$False,HelpMessage='Tier of Firewall Policy.)')]
        [string]
        [ArgumentCompletions('Standard', 'Premium')]
        $tier
    )

    process
    {
        return $([FirewallPolicySku]$PSBoundParameters)
    }
}
class FirewallPolicyCertificateAuthority
{
    [string] $name
    [string] $keyVaultSecretId
}
function New-AzureNativeTypeNetworkFirewallPolicyCertificateAuthority
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the CA certificate.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Secret Id of (base-64 encoded unencrypted pfx) ''Secret'' or ''Certificate'' object stored in KeyVault.)')]
        [string]
        $keyVaultSecretId
    )

    process
    {
        return $([FirewallPolicyCertificateAuthority]$PSBoundParameters)
    }
}
class FirewallPolicyTransportSecurity
{
    [FirewallPolicyCertificateAuthority] $certificateAuthority
}
function New-AzureNativeTypeNetworkFirewallPolicyTransportSecurity
{
    param (
        [parameter(mandatory=$False,HelpMessage='The CA used for intermediate CA generation.)')]
        [FirewallPolicyCertificateAuthority]
        $certificateAuthority
    )

    process
    {
        return $([FirewallPolicyTransportSecurity]$PSBoundParameters)
    }
}
class FirewallPolicyThreatIntelWhitelist
{
    [string[]] $fqdns
    [string[]] $ipAddresses
}
function New-AzureNativeTypeNetworkFirewallPolicyThreatIntelWhitelist
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of FQDNs for the ThreatIntel Whitelist.)')]
        [string[]]
        $fqdns,
        [parameter(mandatory=$False,HelpMessage='List of IP addresses for the ThreatIntel Whitelist.)')]
        [string[]]
        $ipAddresses
    )

    process
    {
        return $([FirewallPolicyThreatIntelWhitelist]$PSBoundParameters)
    }
}
class FirewallPolicyLogAnalyticsWorkspace
{
    [string] $region
    [SubResource] $workspaceId
}
function New-AzureNativeTypeNetworkFirewallPolicyLogAnalyticsWorkspace
{
    param (
        [parameter(mandatory=$False,HelpMessage='Region to configure the Workspace.)')]
        [string]
        $region,
        [parameter(mandatory=$False,HelpMessage='The workspace Id for Firewall Policy Insights.)')]
        [SubResource]
        $workspaceId
    )

    process
    {
        return $([FirewallPolicyLogAnalyticsWorkspace]$PSBoundParameters)
    }
}
class FirewallPolicyLogAnalyticsResources
{
    [FirewallPolicyLogAnalyticsWorkspace[]] $workspaces
    [SubResource] $defaultWorkspaceId
}
function New-AzureNativeTypeNetworkFirewallPolicyLogAnalyticsResources
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of workspaces for Firewall Policy Insights.)')]
        $workspaces,
        [parameter(mandatory=$False,HelpMessage='The default workspace Id for Firewall Policy Insights.)')]
        [SubResource]
        $defaultWorkspaceId
    )

    process
    {
        return $([FirewallPolicyLogAnalyticsResources]$PSBoundParameters)
    }
}
class FirewallPolicyInsights
{
    [bool] $isEnabled
    [int] $retentionDays
    [FirewallPolicyLogAnalyticsResources] $logAnalyticsResources
}
function New-AzureNativeTypeNetworkFirewallPolicyInsights
{
    param (
        [parameter(mandatory=$False,HelpMessage='A flag to indicate if the insights are enabled on the policy.)')]
        [bool]
        $isEnabled,
        [parameter(mandatory=$False,HelpMessage='Number of days the insights should be enabled on the policy.)')]
        [int]
        $retentionDays,
        [parameter(mandatory=$False,HelpMessage='Workspaces needed to configure the Firewall Policy Insights.)')]
        [FirewallPolicyLogAnalyticsResources]
        $logAnalyticsResources
    )

    process
    {
        return $([FirewallPolicyInsights]$PSBoundParameters)
    }
}
class FirewallPolicySNAT
{
    [string[]] $privateRanges
}
function New-AzureNativeTypeNetworkFirewallPolicySNAT
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of private IP addresses/IP address ranges to not be SNAT.)')]
        [string[]]
        $privateRanges
    )

    process
    {
        return $([FirewallPolicySNAT]$PSBoundParameters)
    }
}
class FirewallPolicyIntrusionDetectionSignatureSpecification
{
    [string] $id
    [ArgumentCompletions('Off', 'Alert', 'Deny')]
    [string] $mode
}
function New-AzureNativeTypeNetworkFirewallPolicyIntrusionDetectionSignatureSpecification
{
    param (
        [parameter(mandatory=$False,HelpMessage='Signature id.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The signature state.)')]
        [string]
        [ArgumentCompletions('Off', 'Alert', 'Deny')]
        $mode
    )

    process
    {
        return $([FirewallPolicyIntrusionDetectionSignatureSpecification]$PSBoundParameters)
    }
}
class FirewallPolicyIntrusionDetectionBypassTrafficSpecifications
{
    [string[]] $sourceAddresses
    [string[]] $destinationIpGroups
    [ArgumentCompletions('TCP', 'UDP', 'ICMP', 'ANY')]
    [string] $protocol
    [string[]] $sourceIpGroups
    [string[]] $destinationAddresses
    [string] $name
    [string[]] $destinationPorts
    [string] $description
}
function New-AzureNativeTypeNetworkFirewallPolicyIntrusionDetectionBypassTrafficSpecifications
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of source IP addresses or ranges for this rule.)')]
        [string[]]
        $sourceAddresses,
        [parameter(mandatory=$False,HelpMessage='List of destination IpGroups for this rule.)')]
        [string[]]
        $destinationIpGroups,
        [parameter(mandatory=$False,HelpMessage='The rule bypass protocol.)')]
        [string]
        [ArgumentCompletions('TCP', 'UDP', 'ICMP', 'ANY')]
        $protocol,
        [parameter(mandatory=$False,HelpMessage='List of source IpGroups for this rule.)')]
        [string[]]
        $sourceIpGroups,
        [parameter(mandatory=$False,HelpMessage='List of destination IP addresses or ranges for this rule.)')]
        [string[]]
        $destinationAddresses,
        [parameter(mandatory=$False,HelpMessage='Name of the bypass traffic rule.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='List of destination ports or ranges.)')]
        [string[]]
        $destinationPorts,
        [parameter(mandatory=$False,HelpMessage='Description of the bypass traffic rule.)')]
        [string]
        $description
    )

    process
    {
        return $([FirewallPolicyIntrusionDetectionBypassTrafficSpecifications]$PSBoundParameters)
    }
}
class FirewallPolicyIntrusionDetectionConfiguration
{
    [FirewallPolicyIntrusionDetectionSignatureSpecification[]] $signatureOverrides
    [FirewallPolicyIntrusionDetectionBypassTrafficSpecifications[]] $bypassTrafficSettings
}
function New-AzureNativeTypeNetworkFirewallPolicyIntrusionDetectionConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of specific signatures states.)')]
        $signatureOverrides,
        [parameter(mandatory=$False,HelpMessage='List of rules for traffic to bypass.)')]
        $bypassTrafficSettings
    )

    process
    {
        return $([FirewallPolicyIntrusionDetectionConfiguration]$PSBoundParameters)
    }
}
class FirewallPolicyIntrusionDetection
{
    [FirewallPolicyIntrusionDetectionConfiguration] $configuration
    [ArgumentCompletions('Off', 'Alert', 'Deny')]
    [string] $mode
}
function New-AzureNativeTypeNetworkFirewallPolicyIntrusionDetection
{
    param (
        [parameter(mandatory=$False,HelpMessage='Intrusion detection configuration properties.)')]
        [FirewallPolicyIntrusionDetectionConfiguration]
        $configuration,
        [parameter(mandatory=$False,HelpMessage='Intrusion detection general state.)')]
        [string]
        [ArgumentCompletions('Off', 'Alert', 'Deny')]
        $mode
    )

    process
    {
        return $([FirewallPolicyIntrusionDetection]$PSBoundParameters)
    }
}
class DnsSettings
{
    [bool] $requireProxyForNetworkRules
    [bool] $enableProxy
    [string[]] $servers
}
function New-AzureNativeTypeNetworkDnsSettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='FQDNs in Network Rules are supported when set to true.)')]
        [bool]
        $requireProxyForNetworkRules,
        [parameter(mandatory=$False,HelpMessage='Enable DNS Proxy on Firewalls attached to the Firewall Policy.)')]
        [bool]
        $enableProxy,
        [parameter(mandatory=$False,HelpMessage='List of Custom DNS Servers.)')]
        [string[]]
        $servers
    )

    process
    {
        return $([DnsSettings]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkFirewallPolicy
{
    [Alias('azure_native_network_firewallpolicy')]
    param (
        [parameter(mandatory=$False,HelpMessage='The operation mode for Threat Intelligence.)')]
        [string]
        [ArgumentCompletions('Alert', 'Deny', 'Off')]
        $threatIntelMode,
        [parameter(mandatory=$False,HelpMessage='The name of the Firewall Policy.)')]
        [string]
        $firewallPolicyName,
        [parameter(mandatory=$False,HelpMessage='The Firewall Policy SKU.)')]
        [FirewallPolicySku]
        $sku,
        [parameter(mandatory=$False,HelpMessage='TLS Configuration definition.)')]
        [FirewallPolicyTransportSecurity]
        $transportSecurity,
        [parameter(mandatory=$False,HelpMessage='ThreatIntel Whitelist for Firewall Policy.)')]
        [FirewallPolicyThreatIntelWhitelist]
        $threatIntelWhitelist,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Insights on Firewall Policy.)')]
        [FirewallPolicyInsights]
        $insights,
        [parameter(mandatory=$False,HelpMessage='The parent firewall policy from which rules are inherited.)')]
        [SubResource]
        $basePolicy,
        [parameter(mandatory=$False,HelpMessage='The private IP addresses/IP ranges to which traffic will not be SNAT.)')]
        [FirewallPolicySNAT]
        $snat,
        [parameter(mandatory=$False,HelpMessage='The configuration for Intrusion detection.)')]
        [FirewallPolicyIntrusionDetection]
        $intrusionDetection,
        [parameter(mandatory=$False,HelpMessage='The identity of the firewall policy.)')]
        [ManagedServiceIdentity]
        $identity,
        [parameter(mandatory=$False,HelpMessage='DNS Proxy Settings definition.)')]
        [DnsSettings]
        $dnsSettings,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:FirewallPolicy")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'threatIntelMode')
        {
            $resource.properties["threatIntelMode"] = $threatIntelMode
        }

        if($PSBoundParameters.Keys -icontains 'firewallPolicyName')
        {
            $resource.properties["firewallPolicyName"] = $firewallPolicyName
        }

        if($PSBoundParameters.Keys -icontains 'sku')
        {
            $resource.properties["sku"] = $sku
        }

        if($PSBoundParameters.Keys -icontains 'transportSecurity')
        {
            $resource.properties["transportSecurity"] = $transportSecurity
        }

        if($PSBoundParameters.Keys -icontains 'threatIntelWhitelist')
        {
            $resource.properties["threatIntelWhitelist"] = $threatIntelWhitelist
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'insights')
        {
            $resource.properties["insights"] = $insights
        }

        if($PSBoundParameters.Keys -icontains 'basePolicy')
        {
            $resource.properties["basePolicy"] = $basePolicy
        }

        if($PSBoundParameters.Keys -icontains 'snat')
        {
            $resource.properties["snat"] = $snat
        }

        if($PSBoundParameters.Keys -icontains 'intrusionDetection')
        {
            $resource.properties["intrusionDetection"] = $intrusionDetection
        }

        if($PSBoundParameters.Keys -icontains 'identity')
        {
            $resource.properties["identity"] = $identity
        }

        if($PSBoundParameters.Keys -icontains 'dnsSettings')
        {
            $resource.properties["dnsSettings"] = $dnsSettings
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class VirtualHubRoute
{
    [string[]] $addressPrefixes
    [string] $nextHopIpAddress
}
function New-AzureNativeTypeNetworkVirtualHubRoute
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of all addressPrefixes.)')]
        [string[]]
        $addressPrefixes,
        [parameter(mandatory=$False,HelpMessage='NextHop ip address.)')]
        [string]
        $nextHopIpAddress
    )

    process
    {
        return $([VirtualHubRoute]$PSBoundParameters)
    }
}
class VirtualHubRouteTable
{
    [VirtualHubRoute[]] $routes
}
function New-AzureNativeTypeNetworkVirtualHubRouteTable
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of all routes.)')]
        $routes
    )

    process
    {
        return $([VirtualHubRouteTable]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkVirtualHub
{
    [Alias('azure_native_network_virtualhub')]
    param (
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The P2SVpnGateway associated with this VirtualHub.)')]
        [SubResource]
        $p2SVpnGateway,
        [parameter(mandatory=$False,HelpMessage='The routeTable associated with this virtual hub.)')]
        [VirtualHubRouteTable]
        $routeTable,
        [parameter(mandatory=$False,HelpMessage='List of all virtual hub route table v2s associated with this VirtualHub.)')]
        $virtualHubRouteTableV2s,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VirtualHub.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The VpnGateway associated with this VirtualHub.)')]
        [SubResource]
        $vpnGateway,
        [parameter(mandatory=$False,HelpMessage='The Security Provider name.)')]
        [string]
        $securityProviderName,
        [parameter(mandatory=$False,HelpMessage='The sku of this VirtualHub.)')]
        [string]
        $sku,
        [parameter(mandatory=$False,HelpMessage='VirtualRouter ASN.)')]
        [int]
        $virtualRouterAsn,
        [parameter(mandatory=$False,HelpMessage='Flag to control transit for VirtualRouter hub.)')]
        [bool]
        $allowBranchToBranchTraffic,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The azureFirewall associated with this VirtualHub.)')]
        [SubResource]
        $azureFirewall,
        [parameter(mandatory=$False,HelpMessage='The VirtualWAN to which the VirtualHub belongs.)')]
        [SubResource]
        $virtualWan,
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualHub.)')]
        [string]
        $virtualHubName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Address-prefix for this VirtualHub.)')]
        [string]
        $addressPrefix,
        [parameter(mandatory=$False,HelpMessage='VirtualRouter IPs.)')]
        [string[]]
        $virtualRouterIps,
        [parameter(mandatory=$False,HelpMessage='The securityPartnerProvider associated with this VirtualHub.)')]
        [SubResource]
        $securityPartnerProvider,
        [parameter(mandatory=$False,HelpMessage='The expressRouteGateway associated with this VirtualHub.)')]
        [SubResource]
        $expressRouteGateway,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VirtualHub")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'p2SVpnGateway')
        {
            $resource.properties["p2SVpnGateway"] = $p2SVpnGateway
        }

        if($PSBoundParameters.Keys -icontains 'routeTable')
        {
            $resource.properties["routeTable"] = $routeTable
        }

        if($PSBoundParameters.Keys -icontains 'virtualHubRouteTableV2s')
        {
            $resource.properties["virtualHubRouteTableV2s"] = $virtualHubRouteTableV2s
        }

        if($PSBoundParameters.Keys -icontains 'vpnGateway')
        {
            $resource.properties["vpnGateway"] = $vpnGateway
        }

        if($PSBoundParameters.Keys -icontains 'securityProviderName')
        {
            $resource.properties["securityProviderName"] = $securityProviderName
        }

        if($PSBoundParameters.Keys -icontains 'sku')
        {
            $resource.properties["sku"] = $sku
        }

        if($PSBoundParameters.Keys -icontains 'virtualRouterAsn')
        {
            $resource.properties["virtualRouterAsn"] = $virtualRouterAsn
        }

        if($PSBoundParameters.Keys -icontains 'allowBranchToBranchTraffic')
        {
            $resource.properties["allowBranchToBranchTraffic"] = $allowBranchToBranchTraffic
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'azureFirewall')
        {
            $resource.properties["azureFirewall"] = $azureFirewall
        }

        if($PSBoundParameters.Keys -icontains 'virtualWan')
        {
            $resource.properties["virtualWan"] = $virtualWan
        }

        if($PSBoundParameters.Keys -icontains 'virtualHubName')
        {
            $resource.properties["virtualHubName"] = $virtualHubName
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'addressPrefix')
        {
            $resource.properties["addressPrefix"] = $addressPrefix
        }

        if($PSBoundParameters.Keys -icontains 'virtualRouterIps')
        {
            $resource.properties["virtualRouterIps"] = $virtualRouterIps
        }

        if($PSBoundParameters.Keys -icontains 'securityPartnerProvider')
        {
            $resource.properties["securityPartnerProvider"] = $securityPartnerProvider
        }

        if($PSBoundParameters.Keys -icontains 'expressRouteGateway')
        {
            $resource.properties["expressRouteGateway"] = $expressRouteGateway
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class DhcpOptions
{
    [string[]] $dnsServers
}
function New-AzureNativeTypeNetworkDhcpOptions
{
    param (
        [parameter(mandatory=$False,HelpMessage='The list of DNS servers IP addresses.)')]
        [string[]]
        $dnsServers
    )

    process
    {
        return $([DhcpOptions]$PSBoundParameters)
    }
}
class VirtualNetworkBgpCommunities
{
    [string] $virtualNetworkCommunity
}
function New-AzureNativeTypeNetworkVirtualNetworkBgpCommunities
{
    param (
        [parameter(mandatory=$False,HelpMessage='The BGP community associated with the virtual network.)')]
        [string]
        $virtualNetworkCommunity
    )

    process
    {
        return $([VirtualNetworkBgpCommunities]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkVirtualNetwork
{
    [Alias('azure_native_network_virtualnetwork')]
    param (
        [parameter(mandatory=$False,HelpMessage='The dhcpOptions that contains an array of DNS servers available to VMs deployed in the virtual network.)')]
        [DhcpOptions]
        $dhcpOptions,
        [parameter(mandatory=$False,HelpMessage='Bgp Communities sent over ExpressRoute with each route corresponding to a prefix in this VNET.)')]
        [VirtualNetworkBgpCommunities]
        $bgpCommunities,
        [parameter(mandatory=$False,HelpMessage='The extended location of the virtual network.)')]
        [ExtendedLocation]
        $extendedLocation,
        [parameter(mandatory=$False,HelpMessage='The DDoS protection plan associated with the virtual network.)')]
        [SubResource]
        $ddosProtectionPlan,
        [parameter(mandatory=$False,HelpMessage='A list of subnets in a Virtual Network.)')]
        $subnets,
        [parameter(mandatory=$False,HelpMessage='Array of IpAllocation which reference this VNET.)')]
        $ipAllocations,
        [parameter(mandatory=$False,HelpMessage='Indicates if DDoS protection is enabled for all the protected resources in the virtual network. It requires a DDoS protection plan associated with the resource.)')]
        [bool]
        $enableDdosProtection,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Indicates if VM protection is enabled for all the subnets in the virtual network.)')]
        [bool]
        $enableVmProtection,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network.)')]
        [string]
        $virtualNetworkName,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The AddressSpace that contains an array of IP address ranges that can be used by subnets.)')]
        [AddressSpace]
        $addressSpace,
        [parameter(mandatory=$False,HelpMessage='A list of peerings in a Virtual Network.)')]
        $virtualNetworkPeerings,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VirtualNetwork")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'dhcpOptions')
        {
            $resource.properties["dhcpOptions"] = $dhcpOptions
        }

        if($PSBoundParameters.Keys -icontains 'bgpCommunities')
        {
            $resource.properties["bgpCommunities"] = $bgpCommunities
        }

        if($PSBoundParameters.Keys -icontains 'extendedLocation')
        {
            $resource.properties["extendedLocation"] = $extendedLocation
        }

        if($PSBoundParameters.Keys -icontains 'ddosProtectionPlan')
        {
            $resource.properties["ddosProtectionPlan"] = $ddosProtectionPlan
        }

        if($PSBoundParameters.Keys -icontains 'subnets')
        {
            $resource.properties["subnets"] = $subnets
        }

        if($PSBoundParameters.Keys -icontains 'ipAllocations')
        {
            $resource.properties["ipAllocations"] = $ipAllocations
        }

        if($PSBoundParameters.Keys -icontains 'enableDdosProtection')
        {
            $resource.properties["enableDdosProtection"] = $enableDdosProtection
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'enableVmProtection')
        {
            $resource.properties["enableVmProtection"] = $enableVmProtection
        }

        if($PSBoundParameters.Keys -icontains 'virtualNetworkName')
        {
            $resource.properties["virtualNetworkName"] = $virtualNetworkName
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'addressSpace')
        {
            $resource.properties["addressSpace"] = $addressSpace
        }

        if($PSBoundParameters.Keys -icontains 'virtualNetworkPeerings')
        {
            $resource.properties["virtualNetworkPeerings"] = $virtualNetworkPeerings
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class ApplicationGatewayBackendAddress
{
    [string] $fqdn
    [string] $ipAddress
}
function New-AzureNativeTypeNetworkApplicationGatewayBackendAddress
{
    param (
        [parameter(mandatory=$False,HelpMessage='Fully qualified domain name (FQDN).)')]
        [string]
        $fqdn,
        [parameter(mandatory=$False,HelpMessage='IP address.)')]
        [string]
        $ipAddress
    )

    process
    {
        return $([ApplicationGatewayBackendAddress]$PSBoundParameters)
    }
}
class ApplicationGatewayBackendAddressPool
{
    [string] $name
    [ApplicationGatewayBackendAddress[]] $backendAddresses
    [string] $id
}
function New-AzureNativeTypeNetworkApplicationGatewayBackendAddressPool
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the backend address pool that is unique within an Application Gateway.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Backend addresses.)')]
        $backendAddresses,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id
    )

    process
    {
        return $([ApplicationGatewayBackendAddressPool]$PSBoundParameters)
    }
}
class InboundNatRule
{
    [bool] $enableTcpReset
    [int] $backendPort
    [int] $idleTimeoutInMinutes
    [string] $id
    [SubResource] $frontendIPConfiguration
    [ArgumentCompletions('Udp', 'Tcp', 'All')]
    [string] $protocol
    [bool] $enableFloatingIP
    [string] $name
    [int] $frontendPort
}
function New-AzureNativeTypeNetworkInboundNatRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Receive bidirectional TCP Reset on TCP flow idle timeout or unexpected connection termination. This element is only used when the protocol is set to TCP.)')]
        [bool]
        $enableTcpReset,
        [parameter(mandatory=$False,HelpMessage='The port used for the internal endpoint. Acceptable values range from 1 to 65535.)')]
        [int]
        $backendPort,
        [parameter(mandatory=$False,HelpMessage='The timeout for the TCP idle connection. The value can be set between 4 and 30 minutes. The default value is 4 minutes. This element is only used when the protocol is set to TCP.)')]
        [int]
        $idleTimeoutInMinutes,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='A reference to frontend IP addresses.)')]
        [SubResource]
        $frontendIPConfiguration,
        [parameter(mandatory=$False,HelpMessage='The reference to the transport protocol used by the load balancing rule.)')]
        [string]
        [ArgumentCompletions('Udp', 'Tcp', 'All')]
        $protocol,
        [parameter(mandatory=$False,HelpMessage='Configures a virtual machine''s endpoint for the floating IP capability required to configure a SQL AlwaysOn Availability Group. This setting is required when using the SQL AlwaysOn Availability Groups in SQL server. This setting can''t be changed after you create the endpoint.)')]
        [bool]
        $enableFloatingIP,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within the set of inbound NAT rules used by the load balancer. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The port for the external endpoint. Port numbers for each rule must be unique within the Load Balancer. Acceptable values range from 1 to 65534.)')]
        [int]
        $frontendPort
    )

    process
    {
        return $([InboundNatRule]$PSBoundParameters)
    }
}
class LoadBalancerBackendAddress
{
    [SubResource] $virtualNetwork
    [string] $name
    [string] $ipAddress
    [SubResource] $loadBalancerFrontendIPConfiguration
    [SubResource] $subnet
}
function New-AzureNativeTypeNetworkLoadBalancerBackendAddress
{
    param (
        [parameter(mandatory=$False,HelpMessage='Reference to an existing virtual network.)')]
        [SubResource]
        $virtualNetwork,
        [parameter(mandatory=$False,HelpMessage='Name of the backend address.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='IP Address belonging to the referenced virtual network.)')]
        [string]
        $ipAddress,
        [parameter(mandatory=$False,HelpMessage='Reference to the frontend ip address configuration defined in regional loadbalancer.)')]
        [SubResource]
        $loadBalancerFrontendIPConfiguration,
        [parameter(mandatory=$False,HelpMessage='Reference to an existing subnet.)')]
        [SubResource]
        $subnet
    )

    process
    {
        return $([LoadBalancerBackendAddress]$PSBoundParameters)
    }
}
class BackendAddressPool
{
    [string] $name
    [LoadBalancerBackendAddress[]] $loadBalancerBackendAddresses
    [string] $id
}
function New-AzureNativeTypeNetworkBackendAddressPool
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within the set of backend address pools used by the load balancer. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='An array of backend addresses.)')]
        $loadBalancerBackendAddresses,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id
    )

    process
    {
        return $([BackendAddressPool]$PSBoundParameters)
    }
}
class NetworkInterfaceIPConfiguration
{
    [Subnet] $subnet
    [ApplicationGatewayBackendAddressPool[]] $applicationGatewayBackendAddressPools
    [string] $privateIPAddress
    [string] $type
    [ApplicationSecurityGroup[]] $applicationSecurityGroups
    [PublicIPAddress] $publicIPAddress
    [bool] $primary
    [InboundNatRule[]] $loadBalancerInboundNatRules
    [string] $name
    [BackendAddressPool[]] $loadBalancerBackendAddressPools
    [VirtualNetworkTap[]] $virtualNetworkTaps
    [ArgumentCompletions('Static', 'Dynamic')]
    [string] $privateIPAllocationMethod
    [ArgumentCompletions('IPv4', 'IPv6')]
    [string] $privateIPAddressVersion
    [string] $id
}
function New-AzureNativeTypeNetworkNetworkInterfaceIPConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='Subnet bound to the IP configuration.)')]
        [Subnet]
        $subnet,
        [parameter(mandatory=$False,HelpMessage='The reference to ApplicationGatewayBackendAddressPool resource.)')]
        $applicationGatewayBackendAddressPools,
        [parameter(mandatory=$False,HelpMessage='Private IP address of the IP configuration.)')]
        [string]
        $privateIPAddress,
        [parameter(mandatory=$False,HelpMessage='Resource type.)')]
        [string]
        $type,
        [parameter(mandatory=$False,HelpMessage='Application security groups in which the IP configuration is included.)')]
        $applicationSecurityGroups,
        [parameter(mandatory=$False,HelpMessage='Public IP address bound to the IP configuration.)')]
        [PublicIPAddress]
        $publicIPAddress,
        [parameter(mandatory=$False,HelpMessage='Whether this is a primary customer address on the network interface.)')]
        [bool]
        $primary,
        [parameter(mandatory=$False,HelpMessage='A list of references of LoadBalancerInboundNatRules.)')]
        $loadBalancerInboundNatRules,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The reference to LoadBalancerBackendAddressPool resource.)')]
        $loadBalancerBackendAddressPools,
        [parameter(mandatory=$False,HelpMessage='The reference to Virtual Network Taps.)')]
        $virtualNetworkTaps,
        [parameter(mandatory=$False,HelpMessage='The private IP address allocation method.)')]
        [string]
        [ArgumentCompletions('Static', 'Dynamic')]
        $privateIPAllocationMethod,
        [parameter(mandatory=$False,HelpMessage='Whether the specific IP configuration is IPv4 or IPv6. Default is IPv4.)')]
        [string]
        [ArgumentCompletions('IPv4', 'IPv6')]
        $privateIPAddressVersion,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id
    )

    process
    {
        return $([NetworkInterfaceIPConfiguration]$PSBoundParameters)
    }
}
class FrontendIPConfiguration
{
    [Subnet] $subnet
    [SubResource] $publicIPPrefix
    [string] $id
    [string[]] $zones
    [string] $privateIPAddress
    [string] $name
    [ArgumentCompletions('IPv4', 'IPv6')]
    [string] $privateIPAddressVersion
    [PublicIPAddress] $publicIPAddress
    [ArgumentCompletions('Static', 'Dynamic')]
    [string] $privateIPAllocationMethod
}
function New-AzureNativeTypeNetworkFrontendIPConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The reference to the subnet resource.)')]
        [Subnet]
        $subnet,
        [parameter(mandatory=$False,HelpMessage='The reference to the Public IP Prefix resource.)')]
        [SubResource]
        $publicIPPrefix,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='A list of availability zones denoting the IP allocated for the resource needs to come from.)')]
        [string[]]
        $zones,
        [parameter(mandatory=$False,HelpMessage='The private IP address of the IP configuration.)')]
        [string]
        $privateIPAddress,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within the set of frontend IP configurations used by the load balancer. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4.)')]
        [string]
        [ArgumentCompletions('IPv4', 'IPv6')]
        $privateIPAddressVersion,
        [parameter(mandatory=$False,HelpMessage='The reference to the Public IP resource.)')]
        [PublicIPAddress]
        $publicIPAddress,
        [parameter(mandatory=$False,HelpMessage='The Private IP allocation method.)')]
        [string]
        [ArgumentCompletions('Static', 'Dynamic')]
        $privateIPAllocationMethod
    )

    process
    {
        return $([FrontendIPConfiguration]$PSBoundParameters)
    }
}
class VirtualNetworkTap
{
    [string] $location
    [int] $destinationPort
    [string] $id
    [NetworkInterfaceIPConfiguration] $destinationNetworkInterfaceIPConfiguration
    [object] $tags
    [FrontendIPConfiguration] $destinationLoadBalancerFrontEndIPConfiguration
}
function New-AzureNativeTypeNetworkVirtualNetworkTap
{
    param (
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The VXLAN destination port that will receive the tapped traffic.)')]
        [int]
        $destinationPort,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The reference to the private IP Address of the collector nic that will receive the tap.)')]
        [NetworkInterfaceIPConfiguration]
        $destinationNetworkInterfaceIPConfiguration,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The reference to the private IP address on the internal Load Balancer that will receive the tap.)')]
        [FrontendIPConfiguration]
        $destinationLoadBalancerFrontEndIPConfiguration
    )

    process
    {
        return $([VirtualNetworkTap]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkNetworkInterfaceTapConfiguration
{
    [Alias('azure_native_network_networkinterfacetapconfiguration')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the network interface.)')]
        [string]
        $networkInterfaceName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the tap configuration.)')]
        [string]
        $tapConfigurationName,
        [parameter(mandatory=$False,HelpMessage='The reference to the Virtual Network Tap resource.)')]
        [VirtualNetworkTap]
        $virtualNetworkTap,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:NetworkInterfaceTapConfiguration")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["networkInterfaceName"] = $networkInterfaceName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'tapConfigurationName')
        {
            $resource.properties["tapConfigurationName"] = $tapConfigurationName
        }

        if($PSBoundParameters.Keys -icontains 'virtualNetworkTap')
        {
            $resource.properties["virtualNetworkTap"] = $virtualNetworkTap
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkSubnet
{
    [Alias('azure_native_network_subnet')]
    param (
        [parameter(mandatory=$False,HelpMessage='Resource type.)')]
        [string]
        $type,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='List of address prefixes for the subnet.)')]
        [string[]]
        $addressPrefixes,
        [parameter(mandatory=$False,HelpMessage='The reference to the RouteTable resource.)')]
        [RouteTable]
        $routeTable,
        [parameter(mandatory=$False,HelpMessage='Enable or Disable apply network policies on private end point in the subnet.)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $privateEndpointNetworkPolicies,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Nat gateway associated with this subnet.)')]
        [SubResource]
        $natGateway,
        [parameter(mandatory=$False,HelpMessage='The reference to the NetworkSecurityGroup resource.)')]
        [NetworkSecurityGroup]
        $networkSecurityGroup,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network.)')]
        [string]
        $virtualNetworkName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Enable or Disable apply network policies on private link service in the subnet.)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $privateLinkServiceNetworkPolicies,
        [parameter(mandatory=$False,HelpMessage='An array of references to the delegations on the subnet.)')]
        $delegations,
        [parameter(mandatory=$False,HelpMessage='An array of service endpoint policies.)')]
        $serviceEndpointPolicies,
        [parameter(mandatory=$False,HelpMessage='Application gateway IP configurations of virtual network resource.)')]
        $applicationGatewayIpConfigurations,
        [parameter(mandatory=$False,HelpMessage='An array of service endpoints.)')]
        $serviceEndpoints,
        [parameter(mandatory=$False,HelpMessage='The address prefix for the subnet.)')]
        [string]
        $addressPrefix,
        [parameter(mandatory=$False,HelpMessage='The name of the subnet.)')]
        [string]
        $subnetName,
        [parameter(mandatory=$False,HelpMessage='Array of IpAllocation which reference this subnet.)')]
        $ipAllocations,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:Subnet")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["virtualNetworkName"] = $virtualNetworkName

        if($PSBoundParameters.Keys -icontains 'type')
        {
            $resource.properties["type"] = $type
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'addressPrefixes')
        {
            $resource.properties["addressPrefixes"] = $addressPrefixes
        }

        if($PSBoundParameters.Keys -icontains 'routeTable')
        {
            $resource.properties["routeTable"] = $routeTable
        }

        if($PSBoundParameters.Keys -icontains 'privateEndpointNetworkPolicies')
        {
            $resource.properties["privateEndpointNetworkPolicies"] = $privateEndpointNetworkPolicies
        }

        if($PSBoundParameters.Keys -icontains 'natGateway')
        {
            $resource.properties["natGateway"] = $natGateway
        }

        if($PSBoundParameters.Keys -icontains 'networkSecurityGroup')
        {
            $resource.properties["networkSecurityGroup"] = $networkSecurityGroup
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'privateLinkServiceNetworkPolicies')
        {
            $resource.properties["privateLinkServiceNetworkPolicies"] = $privateLinkServiceNetworkPolicies
        }

        if($PSBoundParameters.Keys -icontains 'delegations')
        {
            $resource.properties["delegations"] = $delegations
        }

        if($PSBoundParameters.Keys -icontains 'serviceEndpointPolicies')
        {
            $resource.properties["serviceEndpointPolicies"] = $serviceEndpointPolicies
        }

        if($PSBoundParameters.Keys -icontains 'applicationGatewayIpConfigurations')
        {
            $resource.properties["applicationGatewayIpConfigurations"] = $applicationGatewayIpConfigurations
        }

        if($PSBoundParameters.Keys -icontains 'serviceEndpoints')
        {
            $resource.properties["serviceEndpoints"] = $serviceEndpoints
        }

        if($PSBoundParameters.Keys -icontains 'addressPrefix')
        {
            $resource.properties["addressPrefix"] = $addressPrefix
        }

        if($PSBoundParameters.Keys -icontains 'subnetName')
        {
            $resource.properties["subnetName"] = $subnetName
        }

        if($PSBoundParameters.Keys -icontains 'ipAllocations')
        {
            $resource.properties["ipAllocations"] = $ipAllocations
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkUserRule
{
    [Alias('azure_native_network_userrule')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the rule.)')]
        [string]
        $ruleName,
        [parameter(mandatory=$False,HelpMessage='Whether the rule is custom or default.)')]
        [string]
        [ArgumentCompletions('Custom', 'Default')]
        $kind,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration rule collection.)')]
        [string]
        $ruleCollectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration.)')]
        [string]
        $configurationName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:UserRule")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["configurationName"] = $configurationName
        $resource.properties["kind"] = $kind
        $resource.properties["networkManagerName"] = $networkManagerName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["ruleCollectionName"] = $ruleCollectionName

        if($PSBoundParameters.Keys -icontains 'ruleName')
        {
            $resource.properties["ruleName"] = $ruleName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkStaticMember
{
    [Alias('azure_native_network_staticmember')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the static member.)')]
        [string]
        $staticMemberName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='The name of the network group.)')]
        [string]
        $networkGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource Id.)')]
        [string]
        $resourceId,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:StaticMember")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["networkGroupName"] = $networkGroupName
        $resource.properties["networkManagerName"] = $networkManagerName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'staticMemberName')
        {
            $resource.properties["staticMemberName"] = $staticMemberName
        }

        if($PSBoundParameters.Keys -icontains 'resourceId')
        {
            $resource.properties["resourceId"] = $resourceId
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkPublicIPAddress
{
    [Alias('azure_native_network_publicipaddress')]
    param (
        [parameter(mandatory=$False,HelpMessage='The FQDN of the DNS record associated with the public IP address.)')]
        [PublicIPAddressDnsSettings]
        $dnsSettings,
        [parameter(mandatory=$False,HelpMessage='The name of the public IP address.)')]
        [string]
        $publicIpAddressName,
        [parameter(mandatory=$False,HelpMessage='The public IP address allocation method.)')]
        [string]
        [ArgumentCompletions('Static', 'Dynamic')]
        $publicIPAllocationMethod,
        [parameter(mandatory=$False,HelpMessage='Migration phase of Public IP Address.)')]
        [string]
        [ArgumentCompletions('None', 'Prepare', 'Commit', 'Abort', 'Committed')]
        $migrationPhase,
        [parameter(mandatory=$False,HelpMessage='The Public IP Prefix this Public IP Address should be allocated from.)')]
        [SubResource]
        $publicIPPrefix,
        [parameter(mandatory=$False,HelpMessage='The IP address associated with the public IP address resource.)')]
        [string]
        $ipAddress,
        [parameter(mandatory=$False,HelpMessage='The public IP address SKU.)')]
        [PublicIPAddressSku]
        $sku,
        [parameter(mandatory=$False,HelpMessage='The NatGateway for the Public IP address.)')]
        [NatGateway]
        $natGateway,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The linked public IP address of the public IP address resource.)')]
        [PublicIPAddress]
        $linkedPublicIPAddress,
        [parameter(mandatory=$False,HelpMessage='The service public IP address of the public IP address resource.)')]
        [PublicIPAddress]
        $servicePublicIPAddress,
        [parameter(mandatory=$False,HelpMessage='The list of tags associated with the public IP address.)')]
        $ipTags,
        [parameter(mandatory=$False,HelpMessage='The extended location of the public ip address.)')]
        [ExtendedLocation]
        $extendedLocation,
        [parameter(mandatory=$False,HelpMessage='The DDoS protection custom policy associated with the public IP address.)')]
        [DdosSettings]
        $ddosSettings,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='A list of availability zones denoting the IP allocated for the resource needs to come from.)')]
        [string[]]
        $zones,
        [parameter(mandatory=$False,HelpMessage='The public IP address version.)')]
        [string]
        [ArgumentCompletions('IPv4', 'IPv6')]
        $publicIPAddressVersion,
        [parameter(mandatory=$False,HelpMessage='The idle timeout of the public IP address.)')]
        [int]
        $idleTimeoutInMinutes,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:PublicIPAddress")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'dnsSettings')
        {
            $resource.properties["dnsSettings"] = $dnsSettings
        }

        if($PSBoundParameters.Keys -icontains 'publicIpAddressName')
        {
            $resource.properties["publicIpAddressName"] = $publicIpAddressName
        }

        if($PSBoundParameters.Keys -icontains 'publicIPAllocationMethod')
        {
            $resource.properties["publicIPAllocationMethod"] = $publicIPAllocationMethod
        }

        if($PSBoundParameters.Keys -icontains 'migrationPhase')
        {
            $resource.properties["migrationPhase"] = $migrationPhase
        }

        if($PSBoundParameters.Keys -icontains 'publicIPPrefix')
        {
            $resource.properties["publicIPPrefix"] = $publicIPPrefix
        }

        if($PSBoundParameters.Keys -icontains 'ipAddress')
        {
            $resource.properties["ipAddress"] = $ipAddress
        }

        if($PSBoundParameters.Keys -icontains 'sku')
        {
            $resource.properties["sku"] = $sku
        }

        if($PSBoundParameters.Keys -icontains 'natGateway')
        {
            $resource.properties["natGateway"] = $natGateway
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'linkedPublicIPAddress')
        {
            $resource.properties["linkedPublicIPAddress"] = $linkedPublicIPAddress
        }

        if($PSBoundParameters.Keys -icontains 'servicePublicIPAddress')
        {
            $resource.properties["servicePublicIPAddress"] = $servicePublicIPAddress
        }

        if($PSBoundParameters.Keys -icontains 'ipTags')
        {
            $resource.properties["ipTags"] = $ipTags
        }

        if($PSBoundParameters.Keys -icontains 'extendedLocation')
        {
            $resource.properties["extendedLocation"] = $extendedLocation
        }

        if($PSBoundParameters.Keys -icontains 'ddosSettings')
        {
            $resource.properties["ddosSettings"] = $ddosSettings
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'zones')
        {
            $resource.properties["zones"] = $zones
        }

        if($PSBoundParameters.Keys -icontains 'publicIPAddressVersion')
        {
            $resource.properties["publicIPAddressVersion"] = $publicIPAddressVersion
        }

        if($PSBoundParameters.Keys -icontains 'idleTimeoutInMinutes')
        {
            $resource.properties["idleTimeoutInMinutes"] = $idleTimeoutInMinutes
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkRouteFilterRule
{
    [Alias('azure_native_network_routefilterrule')]
    param (
        [parameter(mandatory=$False,HelpMessage='The rule type of the rule.)')]
        [string]
        [ArgumentCompletions('Community')]
        $routeFilterRuleType,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The collection for bgp community values to filter on. e.g. [''12076:5010'',''12076:5020''].)')]
        [string[]]
        $communities,
        [parameter(mandatory=$False,HelpMessage='The name of the route filter.)')]
        [string]
        $routeFilterName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the route filter rule.)')]
        [string]
        $ruleName,
        [parameter(mandatory=$False,HelpMessage='The access type of the rule.)')]
        [string]
        [ArgumentCompletions('Allow', 'Deny')]
        $access,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:RouteFilterRule")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["access"] = $access
        $resource.properties["communities"] = $communities
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["routeFilterName"] = $routeFilterName
        $resource.properties["routeFilterRuleType"] = $routeFilterRuleType

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'ruleName')
        {
            $resource.properties["ruleName"] = $ruleName
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkNetworkWatcher
{
    [Alias('azure_native_network_networkwatcher')]
    param (
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network watcher.)')]
        [string]
        $networkWatcherName,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:NetworkWatcher")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'networkWatcherName')
        {
            $resource.properties["networkWatcherName"] = $networkWatcherName
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkManagementGroupNetworkManagerConnection
{
    [Alias('azure_native_network_managementgroupnetworkmanagerconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='Network Manager Id.)')]
        [string]
        $networkManagerId,
        [parameter(mandatory=$False,HelpMessage='Name for the network manager connection.)')]
        [string]
        $networkManagerConnectionName,
        [parameter(mandatory=$False,HelpMessage='A description of the scope connection.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The management group Id which uniquely identify the Microsoft Azure management group.)')]
        [string]
        $managementGroupId,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ManagementGroupNetworkManagerConnection")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["managementGroupId"] = $managementGroupId

        if($PSBoundParameters.Keys -icontains 'networkManagerId')
        {
            $resource.properties["networkManagerId"] = $networkManagerId
        }

        if($PSBoundParameters.Keys -icontains 'networkManagerConnectionName')
        {
            $resource.properties["networkManagerConnectionName"] = $networkManagerConnectionName
        }

        if($PSBoundParameters.Keys -icontains 'description')
        {
            $resource.properties["description"] = $description
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkVirtualHubBgpConnection
{
    [Alias('azure_native_network_virtualhubbgpconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VirtualHub.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Peer IP.)')]
        [string]
        $peerIp,
        [parameter(mandatory=$False,HelpMessage='The name of the connection.)')]
        [string]
        $connectionName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Name of the connection.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Peer ASN.)')]
        [int]
        $peerAsn,
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualHub.)')]
        [string]
        $virtualHubName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VirtualHubBgpConnection")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["virtualHubName"] = $virtualHubName

        if($PSBoundParameters.Keys -icontains 'peerIp')
        {
            $resource.properties["peerIp"] = $peerIp
        }

        if($PSBoundParameters.Keys -icontains 'connectionName')
        {
            $resource.properties["connectionName"] = $connectionName
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'peerAsn')
        {
            $resource.properties["peerAsn"] = $peerAsn
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkConnectivityConfiguration
{
    [Alias('azure_native_network_connectivityconfiguration')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='Connectivity topology type.)')]
        [string]
        [ArgumentCompletions('HubAndSpoke', 'Mesh')]
        $connectivityTopology,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager connectivity configuration.)')]
        [string]
        $configurationName,
        [parameter(mandatory=$False,HelpMessage='Groups for configuration)')]
        $appliesToGroups,
        [parameter(mandatory=$False,HelpMessage='A description of the connectivity configuration.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='A friendly name for the resource.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='List of hubItems)')]
        $hubs,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Flag if need to remove current existing peerings.)')]
        [string]
        [ArgumentCompletions('False', 'True')]
        $deleteExistingPeering,
        [parameter(mandatory=$False,HelpMessage='Flag if global mesh is supported.)')]
        [string]
        [ArgumentCompletions('False', 'True')]
        $isGlobal,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ConnectivityConfiguration")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["connectivityTopology"] = $connectivityTopology
        $resource.properties["networkManagerName"] = $networkManagerName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'configurationName')
        {
            $resource.properties["configurationName"] = $configurationName
        }

        if($PSBoundParameters.Keys -icontains 'appliesToGroups')
        {
            $resource.properties["appliesToGroups"] = $appliesToGroups
        }

        if($PSBoundParameters.Keys -icontains 'description')
        {
            $resource.properties["description"] = $description
        }

        if($PSBoundParameters.Keys -icontains 'displayName')
        {
            $resource.properties["displayName"] = $displayName
        }

        if($PSBoundParameters.Keys -icontains 'hubs')
        {
            $resource.properties["hubs"] = $hubs
        }

        if($PSBoundParameters.Keys -icontains 'deleteExistingPeering')
        {
            $resource.properties["deleteExistingPeering"] = $deleteExistingPeering
        }

        if($PSBoundParameters.Keys -icontains 'isGlobal')
        {
            $resource.properties["isGlobal"] = $isGlobal
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkExpressRoutePort
{
    [Alias('azure_native_network_expressrouteport')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the ExpressRoutePort resource.)')]
        [string]
        $expressRoutePortName,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Bandwidth of procured ports in Gbps.)')]
        [int]
        $bandwidthInGbps,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Encapsulation method on physical ports.)')]
        [string]
        [ArgumentCompletions('Dot1Q', 'QinQ')]
        $encapsulation,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the peering location that the ExpressRoutePort is mapped to physically.)')]
        [string]
        $peeringLocation,
        [parameter(mandatory=$False,HelpMessage='The set of physical links of the ExpressRoutePort resource.)')]
        $links,
        [parameter(mandatory=$False,HelpMessage='The identity of ExpressRoutePort, if configured.)')]
        [ManagedServiceIdentity]
        $identity,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ExpressRoutePort")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expressRoutePortName')
        {
            $resource.properties["expressRoutePortName"] = $expressRoutePortName
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'bandwidthInGbps')
        {
            $resource.properties["bandwidthInGbps"] = $bandwidthInGbps
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'encapsulation')
        {
            $resource.properties["encapsulation"] = $encapsulation
        }

        if($PSBoundParameters.Keys -icontains 'peeringLocation')
        {
            $resource.properties["peeringLocation"] = $peeringLocation
        }

        if($PSBoundParameters.Keys -icontains 'links')
        {
            $resource.properties["links"] = $links
        }

        if($PSBoundParameters.Keys -icontains 'identity')
        {
            $resource.properties["identity"] = $identity
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkSecurityUserConfiguration
{
    [Alias('azure_native_network_securityuserconfiguration')]
    param (
        [parameter(mandatory=$False,HelpMessage='A display name of the security configuration.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='A description of the security configuration.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='Flag if need to delete existing network security groups.)')]
        [string]
        [ArgumentCompletions('False', 'True')]
        $deleteExistingNSGs,
        [parameter(mandatory=$False,HelpMessage='Security Type.)')]
        [string]
        [ArgumentCompletions('AdminPolicy', 'UserPolicy')]
        $securityType,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration.)')]
        [string]
        $configurationName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:SecurityUserConfiguration")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["networkManagerName"] = $networkManagerName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'displayName')
        {
            $resource.properties["displayName"] = $displayName
        }

        if($PSBoundParameters.Keys -icontains 'description')
        {
            $resource.properties["description"] = $description
        }

        if($PSBoundParameters.Keys -icontains 'deleteExistingNSGs')
        {
            $resource.properties["deleteExistingNSGs"] = $deleteExistingNSGs
        }

        if($PSBoundParameters.Keys -icontains 'securityType')
        {
            $resource.properties["securityType"] = $securityType
        }

        if($PSBoundParameters.Keys -icontains 'configurationName')
        {
            $resource.properties["configurationName"] = $configurationName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class ManagedRuleOverride
{
    [string] $ruleId
    [ArgumentCompletions('Disabled')]
    [string] $state
}
function New-AzureNativeTypeNetworkManagedRuleOverride
{
    param (
        [parameter(mandatory=$False,HelpMessage='Identifier for the managed rule.)')]
        [string]
        $ruleId,
        [parameter(mandatory=$False,HelpMessage='The state of the managed rule. Defaults to Disabled if not specified.)')]
        [string]
        [ArgumentCompletions('Disabled')]
        $state
    )

    process
    {
        return $([ManagedRuleOverride]$PSBoundParameters)
    }
}
class ManagedRuleGroupOverride
{
    [ManagedRuleOverride[]] $rules
    [string] $ruleGroupName
}
function New-AzureNativeTypeNetworkManagedRuleGroupOverride
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of rules that will be disabled. If none specified, all rules in the group will be disabled.)')]
        $rules,
        [parameter(mandatory=$False,HelpMessage='The managed rule group to override.)')]
        [string]
        $ruleGroupName
    )

    process
    {
        return $([ManagedRuleGroupOverride]$PSBoundParameters)
    }
}
class ManagedRuleSet
{
    [string] $ruleSetType
    [ManagedRuleGroupOverride[]] $ruleGroupOverrides
    [string] $ruleSetVersion
}
function New-AzureNativeTypeNetworkManagedRuleSet
{
    param (
        [parameter(mandatory=$False,HelpMessage='Defines the rule set type to use.)')]
        [string]
        $ruleSetType,
        [parameter(mandatory=$False,HelpMessage='Defines the rule group overrides to apply to the rule set.)')]
        $ruleGroupOverrides,
        [parameter(mandatory=$False,HelpMessage='Defines the version of the rule set to use.)')]
        [string]
        $ruleSetVersion
    )

    process
    {
        return $([ManagedRuleSet]$PSBoundParameters)
    }
}
class OwaspCrsExclusionEntry
{
    [ArgumentCompletions('RequestHeaderNames', 'RequestCookieNames', 'RequestArgNames')]
    [string] $matchVariable
    [string] $selector
    [ArgumentCompletions('Equals', 'Contains', 'StartsWith', 'EndsWith', 'EqualsAny')]
    [string] $selectorMatchOperator
}
function New-AzureNativeTypeNetworkOwaspCrsExclusionEntry
{
    param (
        [parameter(mandatory=$False,HelpMessage='The variable to be excluded.)')]
        [string]
        [ArgumentCompletions('RequestHeaderNames', 'RequestCookieNames', 'RequestArgNames')]
        $matchVariable,
        [parameter(mandatory=$False,HelpMessage='When matchVariable is a collection, operator used to specify which elements in the collection this exclusion applies to.)')]
        [string]
        $selector,
        [parameter(mandatory=$False,HelpMessage='When matchVariable is a collection, operate on the selector to specify which elements in the collection this exclusion applies to.)')]
        [string]
        [ArgumentCompletions('Equals', 'Contains', 'StartsWith', 'EndsWith', 'EqualsAny')]
        $selectorMatchOperator
    )

    process
    {
        return $([OwaspCrsExclusionEntry]$PSBoundParameters)
    }
}
class ManagedRulesDefinition
{
    [ManagedRuleSet[]] $managedRuleSets
    [OwaspCrsExclusionEntry[]] $exclusions
}
function New-AzureNativeTypeNetworkManagedRulesDefinition
{
    param (
        [parameter(mandatory=$False,HelpMessage='The managed rule sets that are associated with the policy.)')]
        $managedRuleSets,
        [parameter(mandatory=$False,HelpMessage='The Exclusions that are applied on the policy.)')]
        $exclusions
    )

    process
    {
        return $([ManagedRulesDefinition]$PSBoundParameters)
    }
}
class PolicySettings
{
    [int] $maxRequestBodySizeInKb
    [ArgumentCompletions('Disabled', 'Enabled')]
    [string] $state
    [int] $fileUploadLimitInMb
    [bool] $requestBodyCheck
    [ArgumentCompletions('Prevention', 'Detection')]
    [string] $mode
}
function New-AzureNativeTypeNetworkPolicySettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='Maximum request body size in Kb for WAF.)')]
        [int]
        $maxRequestBodySizeInKb,
        [parameter(mandatory=$False,HelpMessage='The state of the policy.)')]
        [string]
        [ArgumentCompletions('Disabled', 'Enabled')]
        $state,
        [parameter(mandatory=$False,HelpMessage='Maximum file upload size in Mb for WAF.)')]
        [int]
        $fileUploadLimitInMb,
        [parameter(mandatory=$False,HelpMessage='Whether to allow WAF to check request Body.)')]
        [bool]
        $requestBodyCheck,
        [parameter(mandatory=$False,HelpMessage='The mode of the policy.)')]
        [string]
        [ArgumentCompletions('Prevention', 'Detection')]
        $mode
    )

    process
    {
        return $([PolicySettings]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkWebApplicationFirewallPolicy
{
    [Alias('azure_native_network_webapplicationfirewallpolicy')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the policy.)')]
        [string]
        $policyName,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Describes the managedRules structure.)')]
        [ManagedRulesDefinition]
        $managedRules,
        [parameter(mandatory=$False,HelpMessage='The PolicySettings for policy.)')]
        [PolicySettings]
        $policySettings,
        [parameter(mandatory=$False,HelpMessage='The custom rules inside the policy.)')]
        $customRules,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:WebApplicationFirewallPolicy")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["managedRules"] = $managedRules
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'policyName')
        {
            $resource.properties["policyName"] = $policyName
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'policySettings')
        {
            $resource.properties["policySettings"] = $policySettings
        }

        if($PSBoundParameters.Keys -icontains 'customRules')
        {
            $resource.properties["customRules"] = $customRules
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class Ipv6CircuitConnectionConfig
{
    [string] $addressPrefix
}
function New-AzureNativeTypeNetworkIpv6CircuitConnectionConfig
{
    param (
        [parameter(mandatory=$False,HelpMessage='/125 IP address space to carve out customer addresses for global reach.)')]
        [string]
        $addressPrefix
    )

    process
    {
        return $([Ipv6CircuitConnectionConfig]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkExpressRouteCircuitConnection
{
    [Alias('azure_native_network_expressroutecircuitconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='IPv6 Address PrefixProperties of the express route circuit connection.)')]
        [Ipv6CircuitConnectionConfig]
        $ipv6CircuitConnectionConfig,
        [parameter(mandatory=$False,HelpMessage='The name of the express route circuit.)')]
        [string]
        $circuitName,
        [parameter(mandatory=$False,HelpMessage='The authorization key.)')]
        [string]
        $authorizationKey,
        [parameter(mandatory=$False,HelpMessage='The name of the express route circuit connection.)')]
        [string]
        $connectionName,
        [parameter(mandatory=$False,HelpMessage='/29 IP address space to carve out Customer addresses for tunnels.)')]
        [string]
        $addressPrefix,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the peering.)')]
        [string]
        $peeringName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Reference to Express Route Circuit Private Peering Resource of the circuit initiating connection.)')]
        [SubResource]
        $expressRouteCircuitPeering,
        [parameter(mandatory=$False,HelpMessage='Reference to Express Route Circuit Private Peering Resource of the peered circuit.)')]
        [SubResource]
        $peerExpressRouteCircuitPeering,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ExpressRouteCircuitConnection")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["circuitName"] = $circuitName
        $resource.properties["peeringName"] = $peeringName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'ipv6CircuitConnectionConfig')
        {
            $resource.properties["ipv6CircuitConnectionConfig"] = $ipv6CircuitConnectionConfig
        }

        if($PSBoundParameters.Keys -icontains 'authorizationKey')
        {
            $resource.properties["authorizationKey"] = $authorizationKey
        }

        if($PSBoundParameters.Keys -icontains 'connectionName')
        {
            $resource.properties["connectionName"] = $connectionName
        }

        if($PSBoundParameters.Keys -icontains 'addressPrefix')
        {
            $resource.properties["addressPrefix"] = $addressPrefix
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'expressRouteCircuitPeering')
        {
            $resource.properties["expressRouteCircuitPeering"] = $expressRouteCircuitPeering
        }

        if($PSBoundParameters.Keys -icontains 'peerExpressRouteCircuitPeering')
        {
            $resource.properties["peerExpressRouteCircuitPeering"] = $peerExpressRouteCircuitPeering
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class PrivateLinkServiceIpConfiguration
{
    [bool] $primary
    [string] $id
    [string] $privateIPAddress
    [ArgumentCompletions('Static', 'Dynamic')]
    [string] $privateIPAllocationMethod
    [string] $name
    [ArgumentCompletions('IPv4', 'IPv6')]
    [string] $privateIPAddressVersion
    [Subnet] $subnet
}
function New-AzureNativeTypeNetworkPrivateLinkServiceIpConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='Whether the ip configuration is primary or not.)')]
        [bool]
        $primary,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The private IP address of the IP configuration.)')]
        [string]
        $privateIPAddress,
        [parameter(mandatory=$False,HelpMessage='The private IP address allocation method.)')]
        [string]
        [ArgumentCompletions('Static', 'Dynamic')]
        $privateIPAllocationMethod,
        [parameter(mandatory=$False,HelpMessage='The name of private link service ip configuration.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Whether the specific IP configuration is IPv4 or IPv6. Default is IPv4.)')]
        [string]
        [ArgumentCompletions('IPv4', 'IPv6')]
        $privateIPAddressVersion,
        [parameter(mandatory=$False,HelpMessage='The reference to the subnet resource.)')]
        [Subnet]
        $subnet
    )

    process
    {
        return $([PrivateLinkServiceIpConfiguration]$PSBoundParameters)
    }
}
class PrivateLinkServicePropertiesVisibility
{
    [string[]] $subscriptions
}
function New-AzureNativeTypeNetworkPrivateLinkServicePropertiesVisibility
{
    param (
        [parameter(mandatory=$False,HelpMessage='The list of subscriptions.)')]
        [string[]]
        $subscriptions
    )

    process
    {
        return $([PrivateLinkServicePropertiesVisibility]$PSBoundParameters)
    }
}
class PrivateLinkServicePropertiesAutoApproval
{
    [string[]] $subscriptions
}
function New-AzureNativeTypeNetworkPrivateLinkServicePropertiesAutoApproval
{
    param (
        [parameter(mandatory=$False,HelpMessage='The list of subscriptions.)')]
        [string[]]
        $subscriptions
    )

    process
    {
        return $([PrivateLinkServicePropertiesAutoApproval]$PSBoundParameters)
    }
}
class PrivateLinkService
{
    [object] $tags
    [string] $id
    [PrivateLinkServiceIpConfiguration[]] $ipConfigurations
    [ExtendedLocation] $extendedLocation
    [PrivateLinkServicePropertiesVisibility] $visibility
    [FrontendIPConfiguration[]] $loadBalancerFrontendIpConfigurations
    [PrivateLinkServicePropertiesAutoApproval] $autoApproval
    [bool] $enableProxyProtocol
    [string[]] $fqdns
    [string] $location
}
function New-AzureNativeTypeNetworkPrivateLinkService
{
    param (
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='An array of private link service IP configurations.)')]
        $ipConfigurations,
        [parameter(mandatory=$False,HelpMessage='The extended location of the load balancer.)')]
        [ExtendedLocation]
        $extendedLocation,
        [parameter(mandatory=$False,HelpMessage='The visibility list of the private link service.)')]
        [PrivateLinkServicePropertiesVisibility]
        $visibility,
        [parameter(mandatory=$False,HelpMessage='An array of references to the load balancer IP configurations.)')]
        $loadBalancerFrontendIpConfigurations,
        [parameter(mandatory=$False,HelpMessage='The auto-approval list of the private link service.)')]
        [PrivateLinkServicePropertiesAutoApproval]
        $autoApproval,
        [parameter(mandatory=$False,HelpMessage='Whether the private link service is enabled for proxy protocol or not.)')]
        [bool]
        $enableProxyProtocol,
        [parameter(mandatory=$False,HelpMessage='The list of Fqdn.)')]
        [string[]]
        $fqdns,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location
    )

    process
    {
        return $([PrivateLinkService]$PSBoundParameters)
    }
}
class NetworkInterfaceDnsSettings
{
    [string] $internalDnsNameLabel
    [string[]] $dnsServers
}
function New-AzureNativeTypeNetworkNetworkInterfaceDnsSettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='Relative DNS name for this NIC used for internal communications between VMs in the same virtual network.)')]
        [string]
        $internalDnsNameLabel,
        [parameter(mandatory=$False,HelpMessage='List of DNS servers IP addresses. Use ''AzureProvidedDNS'' to switch to azure provided DNS resolution. ''AzureProvidedDNS'' value cannot be combined with other IPs, it must be the only value in dnsServers collection.)')]
        [string[]]
        $dnsServers
    )

    process
    {
        return $([NetworkInterfaceDnsSettings]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkNetworkInterface
{
    [Alias('azure_native_network_networkinterface')]
    param (
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Migration phase of Network Interface resource.)')]
        [string]
        [ArgumentCompletions('None', 'Prepare', 'Commit', 'Abort', 'Committed')]
        $migrationPhase,
        [parameter(mandatory=$False,HelpMessage='The extended location of the network interface.)')]
        [ExtendedLocation]
        $extendedLocation,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Indicates whether IP forwarding is enabled on this network interface.)')]
        [bool]
        $enableIPForwarding,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='If the network interface is accelerated networking enabled.)')]
        [bool]
        $enableAcceleratedNetworking,
        [parameter(mandatory=$False,HelpMessage='A list of IPConfigurations of the network interface.)')]
        $ipConfigurations,
        [parameter(mandatory=$False,HelpMessage='Privatelinkservice of the network interface resource.)')]
        [PrivateLinkService]
        $privateLinkService,
        [parameter(mandatory=$False,HelpMessage='Type of Network Interface resource.)')]
        [string]
        [ArgumentCompletions('Standard', 'Elastic')]
        $nicType,
        [parameter(mandatory=$False,HelpMessage='The name of the network interface.)')]
        [string]
        $networkInterfaceName,
        [parameter(mandatory=$False,HelpMessage='The reference to the NetworkSecurityGroup resource.)')]
        [NetworkSecurityGroup]
        $networkSecurityGroup,
        [parameter(mandatory=$False,HelpMessage='The DNS settings in network interface.)')]
        [NetworkInterfaceDnsSettings]
        $dnsSettings,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:NetworkInterface")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'migrationPhase')
        {
            $resource.properties["migrationPhase"] = $migrationPhase
        }

        if($PSBoundParameters.Keys -icontains 'extendedLocation')
        {
            $resource.properties["extendedLocation"] = $extendedLocation
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'enableIPForwarding')
        {
            $resource.properties["enableIPForwarding"] = $enableIPForwarding
        }

        if($PSBoundParameters.Keys -icontains 'enableAcceleratedNetworking')
        {
            $resource.properties["enableAcceleratedNetworking"] = $enableAcceleratedNetworking
        }

        if($PSBoundParameters.Keys -icontains 'ipConfigurations')
        {
            $resource.properties["ipConfigurations"] = $ipConfigurations
        }

        if($PSBoundParameters.Keys -icontains 'privateLinkService')
        {
            $resource.properties["privateLinkService"] = $privateLinkService
        }

        if($PSBoundParameters.Keys -icontains 'nicType')
        {
            $resource.properties["nicType"] = $nicType
        }

        if($PSBoundParameters.Keys -icontains 'networkInterfaceName')
        {
            $resource.properties["networkInterfaceName"] = $networkInterfaceName
        }

        if($PSBoundParameters.Keys -icontains 'networkSecurityGroup')
        {
            $resource.properties["networkSecurityGroup"] = $networkSecurityGroup
        }

        if($PSBoundParameters.Keys -icontains 'dnsSettings')
        {
            $resource.properties["dnsSettings"] = $dnsSettings
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkRouteTable
{
    [Alias('azure_native_network_routetable')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Whether to disable the routes learned by BGP on that route table. True means disable.)')]
        [bool]
        $disableBgpRoutePropagation,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Collection of routes contained within a route table.)')]
        $routes,
        [parameter(mandatory=$False,HelpMessage='The name of the route table.)')]
        [string]
        $routeTableName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:RouteTable")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'disableBgpRoutePropagation')
        {
            $resource.properties["disableBgpRoutePropagation"] = $disableBgpRoutePropagation
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'routes')
        {
            $resource.properties["routes"] = $routes
        }

        if($PSBoundParameters.Keys -icontains 'routeTableName')
        {
            $resource.properties["routeTableName"] = $routeTableName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkNetworkExperimentProfile
{
    [Alias('azure_native_network_networkexperimentprofile')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Resource group within the Azure subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The state of the Experiment)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $enabledState,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the Profile)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The Profile identifier associated with the Tenant and Partner)')]
        [string]
        $profileName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:NetworkExperimentProfile")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'enabledState')
        {
            $resource.properties["enabledState"] = $enabledState
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'profileName')
        {
            $resource.properties["profileName"] = $profileName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkVirtualRouterPeering
{
    [Alias('azure_native_network_virtualrouterpeering')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Virtual Router Peering.)')]
        [string]
        $peeringName,
        [parameter(mandatory=$False,HelpMessage='Peer IP.)')]
        [string]
        $peerIp,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Name of the virtual router peering that is unique within a virtual router.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the Virtual Router.)')]
        [string]
        $virtualRouterName,
        [parameter(mandatory=$False,HelpMessage='Peer ASN.)')]
        [int]
        $peerAsn,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VirtualRouterPeering")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["virtualRouterName"] = $virtualRouterName

        if($PSBoundParameters.Keys -icontains 'peeringName')
        {
            $resource.properties["peeringName"] = $peeringName
        }

        if($PSBoundParameters.Keys -icontains 'peerIp')
        {
            $resource.properties["peerIp"] = $peerIp
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'peerAsn')
        {
            $resource.properties["peerAsn"] = $peerAsn
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class VirtualHubId
{
    [string] $id
}
function New-AzureNativeTypeNetworkVirtualHubId
{
    param (
        [parameter(mandatory=$False,HelpMessage='The resource URI for the Virtual Hub where the ExpressRoute gateway is or will be deployed. The Virtual Hub resource and the ExpressRoute gateway resource reside in the same subscription.)')]
        [string]
        $id
    )

    process
    {
        return $([VirtualHubId]$PSBoundParameters)
    }
}
class ExpressRouteGatewayPropertiesBounds
{
    [int] $max
    [int] $min
}
function New-AzureNativeTypeNetworkExpressRouteGatewayPropertiesBounds
{
    param (
        [parameter(mandatory=$False,HelpMessage='Maximum number of scale units deployed for ExpressRoute gateway.)')]
        [int]
        $max,
        [parameter(mandatory=$False,HelpMessage='Minimum number of scale units deployed for ExpressRoute gateway.)')]
        [int]
        $min
    )

    process
    {
        return $([ExpressRouteGatewayPropertiesBounds]$PSBoundParameters)
    }
}
class ExpressRouteGatewayPropertiesAutoScaleConfiguration
{
    [ExpressRouteGatewayPropertiesBounds] $bounds
}
function New-AzureNativeTypeNetworkExpressRouteGatewayPropertiesAutoScaleConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='Minimum and maximum number of scale units to deploy.)')]
        [ExpressRouteGatewayPropertiesBounds]
        $bounds
    )

    process
    {
        return $([ExpressRouteGatewayPropertiesAutoScaleConfiguration]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkExpressRouteGateway
{
    [Alias('azure_native_network_expressroutegateway')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The Virtual Hub where the ExpressRoute gateway is or will be deployed.)')]
        [VirtualHubId]
        $virtualHub,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Configuration for auto scaling.)')]
        [ExpressRouteGatewayPropertiesAutoScaleConfiguration]
        $autoScaleConfiguration,
        [parameter(mandatory=$False,HelpMessage='The name of the ExpressRoute gateway.)')]
        [string]
        $expressRouteGatewayName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ExpressRouteGateway")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["virtualHub"] = $virtualHub

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'autoScaleConfiguration')
        {
            $resource.properties["autoScaleConfiguration"] = $autoScaleConfiguration
        }

        if($PSBoundParameters.Keys -icontains 'expressRouteGatewayName')
        {
            $resource.properties["expressRouteGatewayName"] = $expressRouteGatewayName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkExpressRouteCrossConnectionPeering
{
    [Alias('azure_native_network_expressroutecrossconnectionpeering')]
    param (
        [parameter(mandatory=$False,HelpMessage='The IPv6 peering configuration.)')]
        [Ipv6ExpressRouteCircuitPeeringConfig]
        $ipv6PeeringConfig,
        [parameter(mandatory=$False,HelpMessage='The secondary address prefix.)')]
        [string]
        $secondaryPeerAddressPrefix,
        [parameter(mandatory=$False,HelpMessage='The name of the ExpressRouteCrossConnection.)')]
        [string]
        $crossConnectionName,
        [parameter(mandatory=$False,HelpMessage='The VLAN ID.)')]
        [int]
        $vlanId,
        [parameter(mandatory=$False,HelpMessage='The shared key.)')]
        [string]
        $sharedKey,
        [parameter(mandatory=$False,HelpMessage='The GatewayManager Etag.)')]
        [string]
        $gatewayManagerEtag,
        [parameter(mandatory=$False,HelpMessage='The primary address prefix.)')]
        [string]
        $primaryPeerAddressPrefix,
        [parameter(mandatory=$False,HelpMessage='The peering state.)')]
        [string]
        [ArgumentCompletions('Disabled', 'Enabled')]
        $state,
        [parameter(mandatory=$False,HelpMessage='The name of the peering.)')]
        [string]
        $peeringName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The peer ASN.)')]
        [int]
        $peerASN,
        [parameter(mandatory=$False,HelpMessage='The Microsoft peering configuration.)')]
        [ExpressRouteCircuitPeeringConfig]
        $microsoftPeeringConfig,
        [parameter(mandatory=$False,HelpMessage='The peering type.)')]
        [string]
        [ArgumentCompletions('AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering')]
        $peeringType,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ExpressRouteCrossConnectionPeering")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["crossConnectionName"] = $crossConnectionName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'ipv6PeeringConfig')
        {
            $resource.properties["ipv6PeeringConfig"] = $ipv6PeeringConfig
        }

        if($PSBoundParameters.Keys -icontains 'secondaryPeerAddressPrefix')
        {
            $resource.properties["secondaryPeerAddressPrefix"] = $secondaryPeerAddressPrefix
        }

        if($PSBoundParameters.Keys -icontains 'vlanId')
        {
            $resource.properties["vlanId"] = $vlanId
        }

        if($PSBoundParameters.Keys -icontains 'sharedKey')
        {
            $resource.properties["sharedKey"] = $sharedKey
        }

        if($PSBoundParameters.Keys -icontains 'gatewayManagerEtag')
        {
            $resource.properties["gatewayManagerEtag"] = $gatewayManagerEtag
        }

        if($PSBoundParameters.Keys -icontains 'primaryPeerAddressPrefix')
        {
            $resource.properties["primaryPeerAddressPrefix"] = $primaryPeerAddressPrefix
        }

        if($PSBoundParameters.Keys -icontains 'state')
        {
            $resource.properties["state"] = $state
        }

        if($PSBoundParameters.Keys -icontains 'peeringName')
        {
            $resource.properties["peeringName"] = $peeringName
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'peerASN')
        {
            $resource.properties["peerASN"] = $peerASN
        }

        if($PSBoundParameters.Keys -icontains 'microsoftPeeringConfig')
        {
            $resource.properties["microsoftPeeringConfig"] = $microsoftPeeringConfig
        }

        if($PSBoundParameters.Keys -icontains 'peeringType')
        {
            $resource.properties["peeringType"] = $peeringType
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkNspProfile
{
    [Alias('azure_native_network_nspprofile')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the network security perimeter.)')]
        [string]
        $networkSecurityPerimeterName,
        [parameter(mandatory=$False,HelpMessage='The name of the NSP profile.)')]
        [string]
        $profileName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the profile resource that is unique within a perimeter. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:NspProfile")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["networkSecurityPerimeterName"] = $networkSecurityPerimeterName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'profileName')
        {
            $resource.properties["profileName"] = $profileName
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkFirewallPolicyRuleGroup
{
    [Alias('azure_native_network_firewallpolicyrulegroup')]
    param (
        [parameter(mandatory=$False,HelpMessage='Group of Firewall Policy rules.)')]
        $rules,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the FirewallPolicyRuleGroup.)')]
        [string]
        $ruleGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the Firewall Policy.)')]
        [string]
        $firewallPolicyName,
        [parameter(mandatory=$False,HelpMessage='Priority of the Firewall Policy Rule Group resource.)')]
        [int]
        $priority,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:FirewallPolicyRuleGroup")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["firewallPolicyName"] = $firewallPolicyName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'rules')
        {
            $resource.properties["rules"] = $rules
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'ruleGroupName')
        {
            $resource.properties["ruleGroupName"] = $ruleGroupName
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'priority')
        {
            $resource.properties["priority"] = $priority
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkIpGroup
{
    [Alias('azure_native_network_ipgroup')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='IpAddresses/IpAddressPrefixes in the IpGroups resource.)')]
        [string[]]
        $ipAddresses,
        [parameter(mandatory=$False,HelpMessage='The name of the ipGroups.)')]
        [string]
        $ipGroupsName,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:IpGroup")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'ipAddresses')
        {
            $resource.properties["ipAddresses"] = $ipAddresses
        }

        if($PSBoundParameters.Keys -icontains 'ipGroupsName')
        {
            $resource.properties["ipGroupsName"] = $ipGroupsName
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class Sku
{
    [ArgumentCompletions('Classic_AzureFrontDoor', 'Standard_AzureFrontDoor', 'Premium_AzureFrontDoor')]
    [string] $name
}
function New-AzureNativeTypeNetworkSku
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the pricing tier.)')]
        [string]
        [ArgumentCompletions('Classic_AzureFrontDoor', 'Standard_AzureFrontDoor', 'Premium_AzureFrontDoor')]
        $name
    )

    process
    {
        return $([Sku]$PSBoundParameters)
    }
}
class ManagedRuleExclusion
{
    [ArgumentCompletions('RequestHeaderNames', 'RequestCookieNames', 'QueryStringArgNames', 'RequestBodyPostArgNames', 'RequestBodyJsonArgNames')]
    [string] $matchVariable
    [string] $selector
    [ArgumentCompletions('Equals', 'Contains', 'StartsWith', 'EndsWith', 'EqualsAny')]
    [string] $selectorMatchOperator
}
function New-AzureNativeTypeNetworkManagedRuleExclusion
{
    param (
        [parameter(mandatory=$False,HelpMessage='The variable type to be excluded.)')]
        [string]
        [ArgumentCompletions('RequestHeaderNames', 'RequestCookieNames', 'QueryStringArgNames', 'RequestBodyPostArgNames', 'RequestBodyJsonArgNames')]
        $matchVariable,
        [parameter(mandatory=$False,HelpMessage='Selector value for which elements in the collection this exclusion applies to.)')]
        [string]
        $selector,
        [parameter(mandatory=$False,HelpMessage='Comparison operator to apply to the selector when specifying which elements in the collection this exclusion applies to.)')]
        [string]
        [ArgumentCompletions('Equals', 'Contains', 'StartsWith', 'EndsWith', 'EqualsAny')]
        $selectorMatchOperator
    )

    process
    {
        return $([ManagedRuleExclusion]$PSBoundParameters)
    }
}
class FrontDoorManagedRuleOverride
{
    [ArgumentCompletions('Disabled')]
    [string] $enabledState
    [ManagedRuleExclusion[]] $exclusions
    [string] $ruleId
    [ArgumentCompletions('Allow', 'Block', 'Log', 'Redirect')]
    [string] $action
}
function New-AzureNativeTypeNetworkFrontDoorManagedRuleOverride
{
    param (
        [parameter(mandatory=$False,HelpMessage='Describes if the managed rule is in enabled or disabled state. Defaults to Disabled if not specified.)')]
        [string]
        [ArgumentCompletions('Disabled')]
        $enabledState,
        [parameter(mandatory=$False,HelpMessage='Describes the exclusions that are applied to this specific rule.)')]
        $exclusions,
        [parameter(mandatory=$False,HelpMessage='Identifier for the managed rule.)')]
        [string]
        $ruleId,
        [parameter(mandatory=$False,HelpMessage='Describes the override action to be applied when rule matches.)')]
        [string]
        [ArgumentCompletions('Allow', 'Block', 'Log', 'Redirect')]
        $action
    )

    process
    {
        return $([FrontDoorManagedRuleOverride]$PSBoundParameters)
    }
}
class FrontDoorManagedRuleGroupOverride
{
    [ManagedRuleExclusion[]] $exclusions
    [string] $ruleGroupName
    [FrontDoorManagedRuleOverride[]] $rules
}
function New-AzureNativeTypeNetworkFrontDoorManagedRuleGroupOverride
{
    param (
        [parameter(mandatory=$False,HelpMessage='Describes the exclusions that are applied to all rules in the group.)')]
        $exclusions,
        [parameter(mandatory=$False,HelpMessage='Describes the managed rule group to override.)')]
        [string]
        $ruleGroupName,
        [parameter(mandatory=$False,HelpMessage='List of rules that will be disabled. If none specified, all rules in the group will be disabled.)')]
        $rules
    )

    process
    {
        return $([FrontDoorManagedRuleGroupOverride]$PSBoundParameters)
    }
}
class FrontDoorManagedRuleSet
{
    [string] $ruleSetVersion
    [string] $ruleSetType
    [ManagedRuleExclusion[]] $exclusions
    [FrontDoorManagedRuleGroupOverride[]] $ruleGroupOverrides
    [ArgumentCompletions('Block', 'Log', 'Redirect')]
    [string] $ruleSetAction
}
function New-AzureNativeTypeNetworkFrontDoorManagedRuleSet
{
    param (
        [parameter(mandatory=$False,HelpMessage='Defines the version of the rule set to use.)')]
        [string]
        $ruleSetVersion,
        [parameter(mandatory=$False,HelpMessage='Defines the rule set type to use.)')]
        [string]
        $ruleSetType,
        [parameter(mandatory=$False,HelpMessage='Describes the exclusions that are applied to all rules in the set.)')]
        $exclusions,
        [parameter(mandatory=$False,HelpMessage='Defines the rule group overrides to apply to the rule set.)')]
        $ruleGroupOverrides,
        [parameter(mandatory=$False,HelpMessage='Defines the action to take when a managed rule set score threshold is met.)')]
        [string]
        [ArgumentCompletions('Block', 'Log', 'Redirect')]
        $ruleSetAction
    )

    process
    {
        return $([FrontDoorManagedRuleSet]$PSBoundParameters)
    }
}
class ManagedRuleSetList
{
    [FrontDoorManagedRuleSet[]] $managedRuleSets
}
function New-AzureNativeTypeNetworkManagedRuleSetList
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of rule sets.)')]
        $managedRuleSets
    )

    process
    {
        return $([ManagedRuleSetList]$PSBoundParameters)
    }
}
class FrontDoorPolicySettings
{
    [int] $customBlockResponseStatusCode
    [string] $customBlockResponseBody
    [ArgumentCompletions('Prevention', 'Detection')]
    [string] $mode
    [string] $redirectUrl
    [ArgumentCompletions('Disabled', 'Enabled')]
    [string] $requestBodyCheck
    [ArgumentCompletions('Disabled', 'Enabled')]
    [string] $enabledState
}
function New-AzureNativeTypeNetworkFrontDoorPolicySettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='If the action type is block, customer can override the response status code.)')]
        [int]
        $customBlockResponseStatusCode,
        [parameter(mandatory=$False,HelpMessage='If the action type is block, customer can override the response body. The body must be specified in base64 encoding.)')]
        [string]
        $customBlockResponseBody,
        [parameter(mandatory=$False,HelpMessage='Describes if it is in detection mode or prevention mode at policy level.)')]
        [string]
        [ArgumentCompletions('Prevention', 'Detection')]
        $mode,
        [parameter(mandatory=$False,HelpMessage='If action type is redirect, this field represents redirect URL for the client.)')]
        [string]
        $redirectUrl,
        [parameter(mandatory=$False,HelpMessage='Describes if policy managed rules will inspect the request body content.)')]
        [string]
        [ArgumentCompletions('Disabled', 'Enabled')]
        $requestBodyCheck,
        [parameter(mandatory=$False,HelpMessage='Describes if the policy is in enabled or disabled state. Defaults to Enabled if not specified.)')]
        [string]
        [ArgumentCompletions('Disabled', 'Enabled')]
        $enabledState
    )

    process
    {
        return $([FrontDoorPolicySettings]$PSBoundParameters)
    }
}
class FrontDoorMatchCondition
{
    [bool] $negateCondition
    [string] $selector
    [string[]] $transforms
    [string[]] $matchValue
    [ArgumentCompletions('RemoteAddr', 'RequestMethod', 'QueryString', 'PostArgs', 'RequestUri', 'RequestHeader', 'RequestBody', 'Cookies', 'SocketAddr')]
    [string] $matchVariable
    [ArgumentCompletions('Any', 'IPMatch', 'GeoMatch', 'Equal', 'Contains', 'LessThan', 'GreaterThan', 'LessThanOrEqual', 'GreaterThanOrEqual', 'BeginsWith', 'EndsWith', 'RegEx')]
    [string] $operator
}
function New-AzureNativeTypeNetworkFrontDoorMatchCondition
{
    param (
        [parameter(mandatory=$False,HelpMessage='Describes if the result of this condition should be negated.)')]
        [bool]
        $negateCondition,
        [parameter(mandatory=$False,HelpMessage='Match against a specific key from the QueryString, PostArgs, RequestHeader or Cookies variables. Default is null.)')]
        [string]
        $selector,
        [parameter(mandatory=$False,HelpMessage='List of transforms.)')]
        $transforms,
        [parameter(mandatory=$False,HelpMessage='List of possible match values.)')]
        [string[]]
        $matchValue,
        [parameter(mandatory=$False,HelpMessage='Request variable to compare with.)')]
        [string]
        [ArgumentCompletions('RemoteAddr', 'RequestMethod', 'QueryString', 'PostArgs', 'RequestUri', 'RequestHeader', 'RequestBody', 'Cookies', 'SocketAddr')]
        $matchVariable,
        [parameter(mandatory=$False,HelpMessage='Comparison type to use for matching with the variable value.)')]
        [string]
        [ArgumentCompletions('Any', 'IPMatch', 'GeoMatch', 'Equal', 'Contains', 'LessThan', 'GreaterThan', 'LessThanOrEqual', 'GreaterThanOrEqual', 'BeginsWith', 'EndsWith', 'RegEx')]
        $operator
    )

    process
    {
        return $([FrontDoorMatchCondition]$PSBoundParameters)
    }
}
class CustomRule
{
    [ArgumentCompletions('MatchRule', 'RateLimitRule')]
    [string] $ruleType
    [int] $priority
    [ArgumentCompletions('Allow', 'Block', 'Log', 'Redirect')]
    [string] $action
    [ArgumentCompletions('Disabled', 'Enabled')]
    [string] $enabledState
    [FrontDoorMatchCondition[]] $matchConditions
    [string] $name
    [int] $rateLimitThreshold
    [int] $rateLimitDurationInMinutes
}
function New-AzureNativeTypeNetworkCustomRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Describes type of rule.)')]
        [string]
        [ArgumentCompletions('MatchRule', 'RateLimitRule')]
        $ruleType,
        [parameter(mandatory=$False,HelpMessage='Describes priority of the rule. Rules with a lower value will be evaluated before rules with a higher value.)')]
        [int]
        $priority,
        [parameter(mandatory=$False,HelpMessage='Describes what action to be applied when rule matches.)')]
        [string]
        [ArgumentCompletions('Allow', 'Block', 'Log', 'Redirect')]
        $action,
        [parameter(mandatory=$False,HelpMessage='Describes if the custom rule is in enabled or disabled state. Defaults to Enabled if not specified.)')]
        [string]
        [ArgumentCompletions('Disabled', 'Enabled')]
        $enabledState,
        [parameter(mandatory=$False,HelpMessage='List of match conditions.)')]
        $matchConditions,
        [parameter(mandatory=$False,HelpMessage='Describes the name of the rule.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Number of allowed requests per client within the time window.)')]
        [int]
        $rateLimitThreshold,
        [parameter(mandatory=$False,HelpMessage='Time window for resetting the rate limit count. Default is 1 minute.)')]
        [int]
        $rateLimitDurationInMinutes
    )

    process
    {
        return $([CustomRule]$PSBoundParameters)
    }
}
class CustomRuleList
{
    [CustomRule[]] $rules
}
function New-AzureNativeTypeNetworkCustomRuleList
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of rules)')]
        $rules
    )

    process
    {
        return $([CustomRuleList]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkPolicy
{
    [Alias('azure_native_network_policy')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the Web Application Firewall Policy.)')]
        [string]
        $policyName,
        [parameter(mandatory=$False,HelpMessage='The pricing tier of web application firewall policy. Defaults to Classic_AzureFrontDoor if not specified.)')]
        [Sku]
        $sku,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Describes managed rules inside the policy.)')]
        [ManagedRuleSetList]
        $managedRules,
        [parameter(mandatory=$False,HelpMessage='Describes settings for the policy.)')]
        [FrontDoorPolicySettings]
        $policySettings,
        [parameter(mandatory=$False,HelpMessage='Describes custom rules inside the policy.)')]
        [CustomRuleList]
        $customRules,
        [parameter(mandatory=$False,HelpMessage='Name of the Resource group within the Azure subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:Policy")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'policyName')
        {
            $resource.properties["policyName"] = $policyName
        }

        if($PSBoundParameters.Keys -icontains 'sku')
        {
            $resource.properties["sku"] = $sku
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'managedRules')
        {
            $resource.properties["managedRules"] = $managedRules
        }

        if($PSBoundParameters.Keys -icontains 'policySettings')
        {
            $resource.properties["policySettings"] = $policySettings
        }

        if($PSBoundParameters.Keys -icontains 'customRules')
        {
            $resource.properties["customRules"] = $customRules
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkPrivateDnsZoneGroup
{
    [Alias('azure_native_network_privatednszonegroup')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='A collection of private dns zone configurations of the private dns zone group.)')]
        $privateDnsZoneConfigs,
        [parameter(mandatory=$False,HelpMessage='Name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the private dns zone group.)')]
        [string]
        $privateDnsZoneGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint.)')]
        [string]
        $privateEndpointName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:PrivateDnsZoneGroup")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["privateEndpointName"] = $privateEndpointName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'privateDnsZoneConfigs')
        {
            $resource.properties["privateDnsZoneConfigs"] = $privateDnsZoneConfigs
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'privateDnsZoneGroupName')
        {
            $resource.properties["privateDnsZoneGroupName"] = $privateDnsZoneGroupName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkNetworkSecurityGroup
{
    [Alias('azure_native_network_networksecuritygroup')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the network security group.)')]
        [string]
        $networkSecurityGroupName,
        [parameter(mandatory=$False,HelpMessage='A collection of security rules of the network security group.)')]
        $securityRules,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:NetworkSecurityGroup")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'networkSecurityGroupName')
        {
            $resource.properties["networkSecurityGroupName"] = $networkSecurityGroupName
        }

        if($PSBoundParameters.Keys -icontains 'securityRules')
        {
            $resource.properties["securityRules"] = $securityRules
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkInboundNatRule
{
    [Alias('azure_native_network_inboundnatrule')]
    param (
        [parameter(mandatory=$False,HelpMessage='Receive bidirectional TCP Reset on TCP flow idle timeout or unexpected connection termination. This element is only used when the protocol is set to TCP.)')]
        [bool]
        $enableTcpReset,
        [parameter(mandatory=$False,HelpMessage='The port used for the internal endpoint. Acceptable values range from 1 to 65535.)')]
        [int]
        $backendPort,
        [parameter(mandatory=$False,HelpMessage='The timeout for the TCP idle connection. The value can be set between 4 and 30 minutes. The default value is 4 minutes. This element is only used when the protocol is set to TCP.)')]
        [int]
        $idleTimeoutInMinutes,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within the set of inbound NAT rules used by the load balancer. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the inbound nat rule.)')]
        [string]
        $inboundNatRuleName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='A reference to frontend IP addresses.)')]
        [SubResource]
        $frontendIPConfiguration,
        [parameter(mandatory=$False,HelpMessage='The reference to the transport protocol used by the load balancing rule.)')]
        [string]
        [ArgumentCompletions('Udp', 'Tcp', 'All')]
        $protocol,
        [parameter(mandatory=$False,HelpMessage='Configures a virtual machine''s endpoint for the floating IP capability required to configure a SQL AlwaysOn Availability Group. This setting is required when using the SQL AlwaysOn Availability Groups in SQL server. This setting can''t be changed after you create the endpoint.)')]
        [bool]
        $enableFloatingIP,
        [parameter(mandatory=$False,HelpMessage='The name of the load balancer.)')]
        [string]
        $loadBalancerName,
        [parameter(mandatory=$False,HelpMessage='The port for the external endpoint. Port numbers for each rule must be unique within the Load Balancer. Acceptable values range from 1 to 65534.)')]
        [int]
        $frontendPort,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:InboundNatRule")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["loadBalancerName"] = $loadBalancerName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'enableTcpReset')
        {
            $resource.properties["enableTcpReset"] = $enableTcpReset
        }

        if($PSBoundParameters.Keys -icontains 'backendPort')
        {
            $resource.properties["backendPort"] = $backendPort
        }

        if($PSBoundParameters.Keys -icontains 'idleTimeoutInMinutes')
        {
            $resource.properties["idleTimeoutInMinutes"] = $idleTimeoutInMinutes
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'inboundNatRuleName')
        {
            $resource.properties["inboundNatRuleName"] = $inboundNatRuleName
        }

        if($PSBoundParameters.Keys -icontains 'frontendIPConfiguration')
        {
            $resource.properties["frontendIPConfiguration"] = $frontendIPConfiguration
        }

        if($PSBoundParameters.Keys -icontains 'protocol')
        {
            $resource.properties["protocol"] = $protocol
        }

        if($PSBoundParameters.Keys -icontains 'enableFloatingIP')
        {
            $resource.properties["enableFloatingIP"] = $enableFloatingIP
        }

        if($PSBoundParameters.Keys -icontains 'frontendPort')
        {
            $resource.properties["frontendPort"] = $frontendPort
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkSecurityPartnerProvider
{
    [Alias('azure_native_network_securitypartnerprovider')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The virtualHub to which the Security Partner Provider belongs.)')]
        [SubResource]
        $virtualHub,
        [parameter(mandatory=$False,HelpMessage='The name of the Security Partner Provider.)')]
        [string]
        $securityPartnerProviderName,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The security provider name.)')]
        [string]
        [ArgumentCompletions('ZScaler', 'IBoss', 'Checkpoint')]
        $securityProviderName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:SecurityPartnerProvider")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'virtualHub')
        {
            $resource.properties["virtualHub"] = $virtualHub
        }

        if($PSBoundParameters.Keys -icontains 'securityPartnerProviderName')
        {
            $resource.properties["securityPartnerProviderName"] = $securityPartnerProviderName
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'securityProviderName')
        {
            $resource.properties["securityProviderName"] = $securityProviderName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkPrivateRecordSet
{
    [Alias('azure_native_network_privaterecordset')]
    param (
        [parameter(mandatory=$False,HelpMessage='The CNAME record in the record set.)')]
        [CnameRecord]
        $cnameRecord,
        [parameter(mandatory=$False,HelpMessage='The list of TXT records in the record set.)')]
        $txtRecords,
        [parameter(mandatory=$False,HelpMessage='The list of MX records in the record set.)')]
        $mxRecords,
        [parameter(mandatory=$False,HelpMessage='The name of the Private DNS zone (without a terminating dot).)')]
        [string]
        $privateZoneName,
        [parameter(mandatory=$False,HelpMessage='The metadata attached to the record set.)')]
        [hashtable]
        $metadata,
        [parameter(mandatory=$False,HelpMessage='The list of AAAA records in the record set.)')]
        $aaaaRecords,
        [parameter(mandatory=$False,HelpMessage='The SOA record in the record set.)')]
        [SoaRecord]
        $soaRecord,
        [parameter(mandatory=$False,HelpMessage='The name of the record set, relative to the name of the zone.)')]
        [string]
        $relativeRecordSetName,
        [parameter(mandatory=$False,HelpMessage='The list of SRV records in the record set.)')]
        $srvRecords,
        [parameter(mandatory=$False,HelpMessage='The list of A records in the record set.)')]
        $aRecords,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The list of PTR records in the record set.)')]
        $ptrRecords,
        [parameter(mandatory=$False,HelpMessage='The type of DNS record in this record set. Record sets of type SOA can be updated but not created (they are created when the Private DNS zone is created).)')]
        [string]
        $recordType,
        [parameter(mandatory=$False,HelpMessage='The TTL (time-to-live) of the records in the record set.)')]
        [int]
        $ttl,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:PrivateRecordSet")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["privateZoneName"] = $privateZoneName
        $resource.properties["recordType"] = $recordType
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'cnameRecord')
        {
            $resource.properties["cnameRecord"] = $cnameRecord
        }

        if($PSBoundParameters.Keys -icontains 'txtRecords')
        {
            $resource.properties["txtRecords"] = $txtRecords
        }

        if($PSBoundParameters.Keys -icontains 'mxRecords')
        {
            $resource.properties["mxRecords"] = $mxRecords
        }

        if($PSBoundParameters.Keys -icontains 'metadata')
        {
            $resource.properties["metadata"] = $metadata
        }

        if($PSBoundParameters.Keys -icontains 'aaaaRecords')
        {
            $resource.properties["aaaaRecords"] = $aaaaRecords
        }

        if($PSBoundParameters.Keys -icontains 'soaRecord')
        {
            $resource.properties["soaRecord"] = $soaRecord
        }

        if($PSBoundParameters.Keys -icontains 'relativeRecordSetName')
        {
            $resource.properties["relativeRecordSetName"] = $relativeRecordSetName
        }

        if($PSBoundParameters.Keys -icontains 'srvRecords')
        {
            $resource.properties["srvRecords"] = $srvRecords
        }

        if($PSBoundParameters.Keys -icontains 'aRecords')
        {
            $resource.properties["aRecords"] = $aRecords
        }

        if($PSBoundParameters.Keys -icontains 'ptrRecords')
        {
            $resource.properties["ptrRecords"] = $ptrRecords
        }

        if($PSBoundParameters.Keys -icontains 'ttl')
        {
            $resource.properties["ttl"] = $ttl
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkP2sVpnGateway
{
    [Alias('azure_native_network_p2svpngateway')]
    param (
        [parameter(mandatory=$False,HelpMessage='List of all p2s connection configurations of the gateway.)')]
        $p2SConnectionConfigurations,
        [parameter(mandatory=$False,HelpMessage='List of all customer specified DNS servers IP addresses.)')]
        [string[]]
        $customDnsServers,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Enable Routing Preference property for the Public IP Interface of the P2SVpnGateway.)')]
        [bool]
        $isRoutingPreferenceInternet,
        [parameter(mandatory=$False,HelpMessage='The scale unit for this p2s vpn gateway.)')]
        [int]
        $vpnGatewayScaleUnit,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the P2SVpnGateway.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The VpnServerConfiguration to which the p2sVpnGateway is attached to.)')]
        [SubResource]
        $vpnServerConfiguration,
        [parameter(mandatory=$False,HelpMessage='The VirtualHub to which the gateway belongs.)')]
        [SubResource]
        $virtualHub,
        [parameter(mandatory=$False,HelpMessage='The name of the gateway.)')]
        [string]
        $gatewayName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:P2sVpnGateway")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'p2SConnectionConfigurations')
        {
            $resource.properties["p2SConnectionConfigurations"] = $p2SConnectionConfigurations
        }

        if($PSBoundParameters.Keys -icontains 'customDnsServers')
        {
            $resource.properties["customDnsServers"] = $customDnsServers
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'isRoutingPreferenceInternet')
        {
            $resource.properties["isRoutingPreferenceInternet"] = $isRoutingPreferenceInternet
        }

        if($PSBoundParameters.Keys -icontains 'vpnGatewayScaleUnit')
        {
            $resource.properties["vpnGatewayScaleUnit"] = $vpnGatewayScaleUnit
        }

        if($PSBoundParameters.Keys -icontains 'vpnServerConfiguration')
        {
            $resource.properties["vpnServerConfiguration"] = $vpnServerConfiguration
        }

        if($PSBoundParameters.Keys -icontains 'virtualHub')
        {
            $resource.properties["virtualHub"] = $virtualHub
        }

        if($PSBoundParameters.Keys -icontains 'gatewayName')
        {
            $resource.properties["gatewayName"] = $gatewayName
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkFirewallPolicyRuleCollectionGroup
{
    [Alias('azure_native_network_firewallpolicyrulecollectiongroup')]
    param (
        [parameter(mandatory=$False,HelpMessage='Group of Firewall Policy rule collections.)')]
        $ruleCollections,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the FirewallPolicyRuleCollectionGroup.)')]
        [string]
        $ruleCollectionGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the Firewall Policy.)')]
        [string]
        $firewallPolicyName,
        [parameter(mandatory=$False,HelpMessage='Priority of the Firewall Policy Rule Collection Group resource.)')]
        [int]
        $priority,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:FirewallPolicyRuleCollectionGroup")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["firewallPolicyName"] = $firewallPolicyName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'ruleCollections')
        {
            $resource.properties["ruleCollections"] = $ruleCollections
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'ruleCollectionGroupName')
        {
            $resource.properties["ruleCollectionGroupName"] = $ruleCollectionGroupName
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'priority')
        {
            $resource.properties["priority"] = $priority
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class FlowLogFormatParameters
{
    [ArgumentCompletions('JSON')]
    [string] $type
    [int] $version
}
function New-AzureNativeTypeNetworkFlowLogFormatParameters
{
    param (
        [parameter(mandatory=$False,HelpMessage='The file type of flow log.)')]
        [string]
        [ArgumentCompletions('JSON')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The version (revision) of the flow log.)')]
        [int]
        $version
    )

    process
    {
        return $([FlowLogFormatParameters]$PSBoundParameters)
    }
}
class RetentionPolicyParameters
{
    [bool] $enabled
    [int] $days
}
function New-AzureNativeTypeNetworkRetentionPolicyParameters
{
    param (
        [parameter(mandatory=$False,HelpMessage='Flag to enable/disable retention.)')]
        [bool]
        $enabled,
        [parameter(mandatory=$False,HelpMessage='Number of days to retain flow log records.)')]
        [int]
        $days
    )

    process
    {
        return $([RetentionPolicyParameters]$PSBoundParameters)
    }
}
class TrafficAnalyticsConfigurationProperties
{
    [int] $trafficAnalyticsInterval
    [string] $workspaceId
    [string] $workspaceRegion
    [string] $workspaceResourceId
    [bool] $enabled
}
function New-AzureNativeTypeNetworkTrafficAnalyticsConfigurationProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The interval in minutes which would decide how frequently TA service should do flow analytics.)')]
        [int]
        $trafficAnalyticsInterval,
        [parameter(mandatory=$False,HelpMessage='The resource guid of the attached workspace.)')]
        [string]
        $workspaceId,
        [parameter(mandatory=$False,HelpMessage='The location of the attached workspace.)')]
        [string]
        $workspaceRegion,
        [parameter(mandatory=$False,HelpMessage='Resource Id of the attached workspace.)')]
        [string]
        $workspaceResourceId,
        [parameter(mandatory=$False,HelpMessage='Flag to enable/disable traffic analytics.)')]
        [bool]
        $enabled
    )

    process
    {
        return $([TrafficAnalyticsConfigurationProperties]$PSBoundParameters)
    }
}
class TrafficAnalyticsProperties
{
    [TrafficAnalyticsConfigurationProperties] $networkWatcherFlowAnalyticsConfiguration
}
function New-AzureNativeTypeNetworkTrafficAnalyticsProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Parameters that define the configuration of traffic analytics.)')]
        [TrafficAnalyticsConfigurationProperties]
        $networkWatcherFlowAnalyticsConfiguration
    )

    process
    {
        return $([TrafficAnalyticsProperties]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkFlowLog
{
    [Alias('azure_native_network_flowlog')]
    param (
        [parameter(mandatory=$False,HelpMessage='Parameters that define the flow log format.)')]
        [FlowLogFormatParameters]
        $format,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='ID of the storage account which is used to store the flow log.)')]
        [string]
        $storageId,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Parameters that define the retention policy for flow log.)')]
        [RetentionPolicyParameters]
        $retentionPolicy,
        [parameter(mandatory=$False,HelpMessage='Parameters that define the configuration of traffic analytics.)')]
        [TrafficAnalyticsProperties]
        $flowAnalyticsConfiguration,
        [parameter(mandatory=$False,HelpMessage='Flag to enable/disable flow logging.)')]
        [bool]
        $enabled,
        [parameter(mandatory=$False,HelpMessage='The name of the flow log.)')]
        [string]
        $flowLogName,
        [parameter(mandatory=$False,HelpMessage='ID of network security group to which flow log will be applied.)')]
        [string]
        $targetResourceId,
        [parameter(mandatory=$False,HelpMessage='The name of the network watcher.)')]
        [string]
        $networkWatcherName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:FlowLog")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["networkWatcherName"] = $networkWatcherName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["storageId"] = $storageId
        $resource.properties["targetResourceId"] = $targetResourceId

        if($PSBoundParameters.Keys -icontains 'format')
        {
            $resource.properties["format"] = $format
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'retentionPolicy')
        {
            $resource.properties["retentionPolicy"] = $retentionPolicy
        }

        if($PSBoundParameters.Keys -icontains 'flowAnalyticsConfiguration')
        {
            $resource.properties["flowAnalyticsConfiguration"] = $flowAnalyticsConfiguration
        }

        if($PSBoundParameters.Keys -icontains 'enabled')
        {
            $resource.properties["enabled"] = $enabled
        }

        if($PSBoundParameters.Keys -icontains 'flowLogName')
        {
            $resource.properties["flowLogName"] = $flowLogName
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkSecurityRule
{
    [Alias('azure_native_network_securityrule')]
    param (
        [parameter(mandatory=$False,HelpMessage='The CIDR or source IP range. Asterisk ''*'' can also be used to match all source IPs. Default tags such as ''VirtualNetwork'', ''AzureLoadBalancer'' and ''Internet'' can also be used. If this is an ingress rule, specifies where network traffic originates from.)')]
        [string]
        $sourceAddressPrefix,
        [parameter(mandatory=$False,HelpMessage='The source port or range. Integer or range between 0 and 65535. Asterisk ''*'' can also be used to match all ports.)')]
        [string]
        $sourcePortRange,
        [parameter(mandatory=$False,HelpMessage='The source port ranges.)')]
        [string[]]
        $sourcePortRanges,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The direction of the rule. The direction specifies if rule will be evaluated on incoming or outgoing traffic.)')]
        [string]
        [ArgumentCompletions('Inbound', 'Outbound')]
        $direction,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The destination port ranges.)')]
        [string[]]
        $destinationPortRanges,
        [parameter(mandatory=$False,HelpMessage='The network traffic is allowed or denied.)')]
        [string]
        [ArgumentCompletions('Allow', 'Deny')]
        $access,
        [parameter(mandatory=$False,HelpMessage='The application security group specified as source.)')]
        $sourceApplicationSecurityGroups,
        [parameter(mandatory=$False,HelpMessage='A description for this rule. Restricted to 140 chars.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The CIDR or source IP ranges.)')]
        [string[]]
        $sourceAddressPrefixes,
        [parameter(mandatory=$False,HelpMessage='The type of the resource.)')]
        [string]
        $type,
        [parameter(mandatory=$False,HelpMessage='The destination address prefixes. CIDR or destination IP ranges.)')]
        [string[]]
        $destinationAddressPrefixes,
        [parameter(mandatory=$False,HelpMessage='The application security group specified as destination.)')]
        $destinationApplicationSecurityGroups,
        [parameter(mandatory=$False,HelpMessage='The priority of the rule. The value can be between 100 and 4096. The priority number must be unique for each rule in the collection. The lower the priority number, the higher the priority of the rule.)')]
        [int]
        $priority,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The destination address prefix. CIDR or destination IP range. Asterisk ''*'' can also be used to match all source IPs. Default tags such as ''VirtualNetwork'', ''AzureLoadBalancer'' and ''Internet'' can also be used.)')]
        [string]
        $destinationAddressPrefix,
        [parameter(mandatory=$False,HelpMessage='The name of the network security group.)')]
        [string]
        $networkSecurityGroupName,
        [parameter(mandatory=$False,HelpMessage='Network protocol this rule applies to.)')]
        [string]
        [ArgumentCompletions('Tcp', 'Udp', 'Icmp', 'Esp', '*', 'Ah')]
        $protocol,
        [parameter(mandatory=$False,HelpMessage='The destination port or range. Integer or range between 0 and 65535. Asterisk ''*'' can also be used to match all ports.)')]
        [string]
        $destinationPortRange,
        [parameter(mandatory=$False,HelpMessage='The name of the security rule.)')]
        [string]
        $securityRuleName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:SecurityRule")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["access"] = $access
        $resource.properties["direction"] = $direction
        $resource.properties["networkSecurityGroupName"] = $networkSecurityGroupName
        $resource.properties["protocol"] = $protocol
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'sourceAddressPrefix')
        {
            $resource.properties["sourceAddressPrefix"] = $sourceAddressPrefix
        }

        if($PSBoundParameters.Keys -icontains 'sourcePortRange')
        {
            $resource.properties["sourcePortRange"] = $sourcePortRange
        }

        if($PSBoundParameters.Keys -icontains 'sourcePortRanges')
        {
            $resource.properties["sourcePortRanges"] = $sourcePortRanges
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'destinationPortRanges')
        {
            $resource.properties["destinationPortRanges"] = $destinationPortRanges
        }

        if($PSBoundParameters.Keys -icontains 'sourceApplicationSecurityGroups')
        {
            $resource.properties["sourceApplicationSecurityGroups"] = $sourceApplicationSecurityGroups
        }

        if($PSBoundParameters.Keys -icontains 'description')
        {
            $resource.properties["description"] = $description
        }

        if($PSBoundParameters.Keys -icontains 'sourceAddressPrefixes')
        {
            $resource.properties["sourceAddressPrefixes"] = $sourceAddressPrefixes
        }

        if($PSBoundParameters.Keys -icontains 'type')
        {
            $resource.properties["type"] = $type
        }

        if($PSBoundParameters.Keys -icontains 'destinationAddressPrefixes')
        {
            $resource.properties["destinationAddressPrefixes"] = $destinationAddressPrefixes
        }

        if($PSBoundParameters.Keys -icontains 'destinationApplicationSecurityGroups')
        {
            $resource.properties["destinationApplicationSecurityGroups"] = $destinationApplicationSecurityGroups
        }

        if($PSBoundParameters.Keys -icontains 'priority')
        {
            $resource.properties["priority"] = $priority
        }

        if($PSBoundParameters.Keys -icontains 'destinationAddressPrefix')
        {
            $resource.properties["destinationAddressPrefix"] = $destinationAddressPrefix
        }

        if($PSBoundParameters.Keys -icontains 'destinationPortRange')
        {
            $resource.properties["destinationPortRange"] = $destinationPortRange
        }

        if($PSBoundParameters.Keys -icontains 'securityRuleName')
        {
            $resource.properties["securityRuleName"] = $securityRuleName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class BackendPoolsSettings
{
    [int] $sendRecvTimeoutSeconds
    [ArgumentCompletions('Enabled', 'Disabled')]
    [string] $enforceCertificateNameCheck
}
function New-AzureNativeTypeNetworkBackendPoolsSettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='Send and receive timeout on forwarding request to the backend. When timeout is reached, the request fails and returns.)')]
        [int]
        $sendRecvTimeoutSeconds,
        [parameter(mandatory=$False,HelpMessage='Whether to enforce certificate name check on HTTPS requests to all backend pools. No effect on non-HTTPS requests.)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $enforceCertificateNameCheck
    )

    process
    {
        return $([BackendPoolsSettings]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkFrontDoor
{
    [Alias('azure_native_network_frontdoor')]
    param (
        [parameter(mandatory=$False,HelpMessage='Operational status of the Front Door load balancer. Permitted values are ''Enabled'' or ''Disabled'')')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $enabledState,
        [parameter(mandatory=$False,HelpMessage='Routing rules associated with this Front Door.)')]
        $routingRules,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Name of the Resource group within the Azure subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='A friendly name for the frontDoor)')]
        [string]
        $friendlyName,
        [parameter(mandatory=$False,HelpMessage='Backend pools available to routing rules.)')]
        $backendPools,
        [parameter(mandatory=$False,HelpMessage='Load balancing settings associated with this Front Door instance.)')]
        $loadBalancingSettings,
        [parameter(mandatory=$False,HelpMessage='Settings for all backendPools)')]
        [BackendPoolsSettings]
        $backendPoolsSettings,
        [parameter(mandatory=$False,HelpMessage='Name of the Front Door which is globally unique.)')]
        [string]
        $frontDoorName,
        [parameter(mandatory=$False,HelpMessage='Frontend endpoints available to routing rules.)')]
        $frontendEndpoints,
        [parameter(mandatory=$False,HelpMessage='Health probe settings associated with this Front Door instance.)')]
        $healthProbeSettings,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:FrontDoor")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'enabledState')
        {
            $resource.properties["enabledState"] = $enabledState
        }

        if($PSBoundParameters.Keys -icontains 'routingRules')
        {
            $resource.properties["routingRules"] = $routingRules
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'friendlyName')
        {
            $resource.properties["friendlyName"] = $friendlyName
        }

        if($PSBoundParameters.Keys -icontains 'backendPools')
        {
            $resource.properties["backendPools"] = $backendPools
        }

        if($PSBoundParameters.Keys -icontains 'loadBalancingSettings')
        {
            $resource.properties["loadBalancingSettings"] = $loadBalancingSettings
        }

        if($PSBoundParameters.Keys -icontains 'backendPoolsSettings')
        {
            $resource.properties["backendPoolsSettings"] = $backendPoolsSettings
        }

        if($PSBoundParameters.Keys -icontains 'frontDoorName')
        {
            $resource.properties["frontDoorName"] = $frontDoorName
        }

        if($PSBoundParameters.Keys -icontains 'frontendEndpoints')
        {
            $resource.properties["frontendEndpoints"] = $frontendEndpoints
        }

        if($PSBoundParameters.Keys -icontains 'healthProbeSettings')
        {
            $resource.properties["healthProbeSettings"] = $healthProbeSettings
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class DeviceProperties
{
    [string] $deviceVendor
    [string] $deviceModel
    [int] $linkSpeedInMbps
}
function New-AzureNativeTypeNetworkDeviceProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the device Vendor.)')]
        [string]
        $deviceVendor,
        [parameter(mandatory=$False,HelpMessage='Model of the device.)')]
        [string]
        $deviceModel,
        [parameter(mandatory=$False,HelpMessage='Link speed.)')]
        [int]
        $linkSpeedInMbps
    )

    process
    {
        return $([DeviceProperties]$PSBoundParameters)
    }
}
class O365BreakOutCategoryPolicies
{
    [bool] $optimize
    [bool] $default
    [bool] $allow
}
function New-AzureNativeTypeNetworkO365BreakOutCategoryPolicies
{
    param (
        [parameter(mandatory=$False,HelpMessage='Flag to control optimize category.)')]
        [bool]
        $optimize,
        [parameter(mandatory=$False,HelpMessage='Flag to control default category.)')]
        [bool]
        $default,
        [parameter(mandatory=$False,HelpMessage='Flag to control allow category.)')]
        [bool]
        $allow
    )

    process
    {
        return $([O365BreakOutCategoryPolicies]$PSBoundParameters)
    }
}
class O365PolicyProperties
{
    [O365BreakOutCategoryPolicies] $breakOutCategories
}
function New-AzureNativeTypeNetworkO365PolicyProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Office365 breakout categories.)')]
        [O365BreakOutCategoryPolicies]
        $breakOutCategories
    )

    process
    {
        return $([O365PolicyProperties]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkVpnSite
{
    [Alias('azure_native_network_vpnsite')]
    param (
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='List of all vpn site links.)')]
        $vpnSiteLinks,
        [parameter(mandatory=$False,HelpMessage='The ip-address for the vpn-site.)')]
        [string]
        $ipAddress,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The device properties.)')]
        [DeviceProperties]
        $deviceProperties,
        [parameter(mandatory=$False,HelpMessage='IsSecuritySite flag.)')]
        [bool]
        $isSecuritySite,
        [parameter(mandatory=$False,HelpMessage='The key for vpn-site that can be used for connections.)')]
        [string]
        $siteKey,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VpnSite.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the VpnSite being created or updated.)')]
        [string]
        $vpnSiteName,
        [parameter(mandatory=$False,HelpMessage='The VirtualWAN to which the vpnSite belongs.)')]
        [SubResource]
        $virtualWan,
        [parameter(mandatory=$False,HelpMessage='Office365 Policy.)')]
        [O365PolicyProperties]
        $o365Policy,
        [parameter(mandatory=$False,HelpMessage='The AddressSpace that contains an array of IP address ranges.)')]
        [AddressSpace]
        $addressSpace,
        [parameter(mandatory=$False,HelpMessage='The set of bgp properties.)')]
        [BgpSettings]
        $bgpProperties,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VpnSite")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'vpnSiteLinks')
        {
            $resource.properties["vpnSiteLinks"] = $vpnSiteLinks
        }

        if($PSBoundParameters.Keys -icontains 'ipAddress')
        {
            $resource.properties["ipAddress"] = $ipAddress
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'deviceProperties')
        {
            $resource.properties["deviceProperties"] = $deviceProperties
        }

        if($PSBoundParameters.Keys -icontains 'isSecuritySite')
        {
            $resource.properties["isSecuritySite"] = $isSecuritySite
        }

        if($PSBoundParameters.Keys -icontains 'siteKey')
        {
            $resource.properties["siteKey"] = $siteKey
        }

        if($PSBoundParameters.Keys -icontains 'vpnSiteName')
        {
            $resource.properties["vpnSiteName"] = $vpnSiteName
        }

        if($PSBoundParameters.Keys -icontains 'virtualWan')
        {
            $resource.properties["virtualWan"] = $virtualWan
        }

        if($PSBoundParameters.Keys -icontains 'o365Policy')
        {
            $resource.properties["o365Policy"] = $o365Policy
        }

        if($PSBoundParameters.Keys -icontains 'addressSpace')
        {
            $resource.properties["addressSpace"] = $addressSpace
        }

        if($PSBoundParameters.Keys -icontains 'bgpProperties')
        {
            $resource.properties["bgpProperties"] = $bgpProperties
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkVirtualWan
{
    [Alias('azure_native_network_virtualwan')]
    param (
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Vpn encryption to be disabled or not.)')]
        [bool]
        $disableVpnEncryption,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VirtualWan.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='True if branch to branch traffic is allowed.)')]
        [bool]
        $allowBranchToBranchTraffic,
        [parameter(mandatory=$False,HelpMessage='The type of the VirtualWAN.)')]
        [string]
        $type,
        [parameter(mandatory=$False,HelpMessage='True if Vnet to Vnet traffic is allowed.)')]
        [bool]
        $allowVnetToVnetTraffic,
        [parameter(mandatory=$False,HelpMessage='The name of the VirtualWAN being created or updated.)')]
        [string]
        $virtualWANName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VirtualWan")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'disableVpnEncryption')
        {
            $resource.properties["disableVpnEncryption"] = $disableVpnEncryption
        }

        if($PSBoundParameters.Keys -icontains 'allowBranchToBranchTraffic')
        {
            $resource.properties["allowBranchToBranchTraffic"] = $allowBranchToBranchTraffic
        }

        if($PSBoundParameters.Keys -icontains 'type')
        {
            $resource.properties["type"] = $type
        }

        if($PSBoundParameters.Keys -icontains 'allowVnetToVnetTraffic')
        {
            $resource.properties["allowVnetToVnetTraffic"] = $allowVnetToVnetTraffic
        }

        if($PSBoundParameters.Keys -icontains 'virtualWANName')
        {
            $resource.properties["virtualWANName"] = $virtualWANName
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkVpnGateway
{
    [Alias('azure_native_network_vpngateway')]
    param (
        [parameter(mandatory=$False,HelpMessage='List of all the nat Rules associated with the gateway.)')]
        $natRules,
        [parameter(mandatory=$False,HelpMessage='List of all vpn connections to the gateway.)')]
        $connections,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Enable Routing Preference property for the Public IP Interface of the VpnGateway.)')]
        [bool]
        $isRoutingPreferenceInternet,
        [parameter(mandatory=$False,HelpMessage='The scale unit for this vpn gateway.)')]
        [int]
        $vpnGatewayScaleUnit,
        [parameter(mandatory=$False,HelpMessage='The resource group name of the VpnGateway.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Local network gateway''s BGP speaker settings.)')]
        [BgpSettings]
        $bgpSettings,
        [parameter(mandatory=$False,HelpMessage='The VirtualHub to which the gateway belongs.)')]
        [SubResource]
        $virtualHub,
        [parameter(mandatory=$False,HelpMessage='The name of the gateway.)')]
        [string]
        $gatewayName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VpnGateway")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'natRules')
        {
            $resource.properties["natRules"] = $natRules
        }

        if($PSBoundParameters.Keys -icontains 'connections')
        {
            $resource.properties["connections"] = $connections
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'isRoutingPreferenceInternet')
        {
            $resource.properties["isRoutingPreferenceInternet"] = $isRoutingPreferenceInternet
        }

        if($PSBoundParameters.Keys -icontains 'vpnGatewayScaleUnit')
        {
            $resource.properties["vpnGatewayScaleUnit"] = $vpnGatewayScaleUnit
        }

        if($PSBoundParameters.Keys -icontains 'bgpSettings')
        {
            $resource.properties["bgpSettings"] = $bgpSettings
        }

        if($PSBoundParameters.Keys -icontains 'virtualHub')
        {
            $resource.properties["virtualHub"] = $virtualHub
        }

        if($PSBoundParameters.Keys -icontains 'gatewayName')
        {
            $resource.properties["gatewayName"] = $gatewayName
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkPrivateLinkService
{
    [Alias('azure_native_network_privatelinkservice')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the private link service.)')]
        [string]
        $serviceName,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='An array of private link service IP configurations.)')]
        $ipConfigurations,
        [parameter(mandatory=$False,HelpMessage='The extended location of the load balancer.)')]
        [ExtendedLocation]
        $extendedLocation,
        [parameter(mandatory=$False,HelpMessage='The visibility list of the private link service.)')]
        [PrivateLinkServicePropertiesVisibility]
        $visibility,
        [parameter(mandatory=$False,HelpMessage='An array of references to the load balancer IP configurations.)')]
        $loadBalancerFrontendIpConfigurations,
        [parameter(mandatory=$False,HelpMessage='The auto-approval list of the private link service.)')]
        [PrivateLinkServicePropertiesAutoApproval]
        $autoApproval,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Whether the private link service is enabled for proxy protocol or not.)')]
        [bool]
        $enableProxyProtocol,
        [parameter(mandatory=$False,HelpMessage='The list of Fqdn.)')]
        [string[]]
        $fqdns,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:PrivateLinkService")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'serviceName')
        {
            $resource.properties["serviceName"] = $serviceName
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'ipConfigurations')
        {
            $resource.properties["ipConfigurations"] = $ipConfigurations
        }

        if($PSBoundParameters.Keys -icontains 'extendedLocation')
        {
            $resource.properties["extendedLocation"] = $extendedLocation
        }

        if($PSBoundParameters.Keys -icontains 'visibility')
        {
            $resource.properties["visibility"] = $visibility
        }

        if($PSBoundParameters.Keys -icontains 'loadBalancerFrontendIpConfigurations')
        {
            $resource.properties["loadBalancerFrontendIpConfigurations"] = $loadBalancerFrontendIpConfigurations
        }

        if($PSBoundParameters.Keys -icontains 'autoApproval')
        {
            $resource.properties["autoApproval"] = $autoApproval
        }

        if($PSBoundParameters.Keys -icontains 'enableProxyProtocol')
        {
            $resource.properties["enableProxyProtocol"] = $enableProxyProtocol
        }

        if($PSBoundParameters.Keys -icontains 'fqdns')
        {
            $resource.properties["fqdns"] = $fqdns
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class VirtualApplianceSkuProperties
{
    [string] $marketPlaceVersion
    [string] $bundledScaleUnit
    [string] $vendor
}
function New-AzureNativeTypeNetworkVirtualApplianceSkuProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Virtual Appliance Version.)')]
        [string]
        $marketPlaceVersion,
        [parameter(mandatory=$False,HelpMessage='Virtual Appliance Scale Unit.)')]
        [string]
        $bundledScaleUnit,
        [parameter(mandatory=$False,HelpMessage='Virtual Appliance Vendor.)')]
        [string]
        $vendor
    )

    process
    {
        return $([VirtualApplianceSkuProperties]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkNetworkVirtualAppliance
{
    [Alias('azure_native_network_networkvirtualappliance')]
    param (
        [parameter(mandatory=$False,HelpMessage='CloudInitConfiguration string in plain text.)')]
        [string]
        $cloudInitConfiguration,
        [parameter(mandatory=$False,HelpMessage='Network Virtual Appliance SKU.)')]
        [VirtualApplianceSkuProperties]
        $nvaSku,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of Network Virtual Appliance.)')]
        [string]
        $networkVirtualApplianceName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='VirtualAppliance ASN.)')]
        [int]
        $virtualApplianceAsn,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The Virtual Hub where Network Virtual Appliance is being deployed.)')]
        [SubResource]
        $virtualHub,
        [parameter(mandatory=$False,HelpMessage='The service principal that has read access to cloud-init and config blob.)')]
        [ManagedServiceIdentity]
        $identity,
        [parameter(mandatory=$False,HelpMessage='CloudInitConfigurationBlob storage URLs.)')]
        [string[]]
        $cloudInitConfigurationBlobs,
        [parameter(mandatory=$False,HelpMessage='BootStrapConfigurationBlobs storage URLs.)')]
        [string[]]
        $bootStrapConfigurationBlobs,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:NetworkVirtualAppliance")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'cloudInitConfiguration')
        {
            $resource.properties["cloudInitConfiguration"] = $cloudInitConfiguration
        }

        if($PSBoundParameters.Keys -icontains 'nvaSku')
        {
            $resource.properties["nvaSku"] = $nvaSku
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'networkVirtualApplianceName')
        {
            $resource.properties["networkVirtualApplianceName"] = $networkVirtualApplianceName
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'virtualApplianceAsn')
        {
            $resource.properties["virtualApplianceAsn"] = $virtualApplianceAsn
        }

        if($PSBoundParameters.Keys -icontains 'virtualHub')
        {
            $resource.properties["virtualHub"] = $virtualHub
        }

        if($PSBoundParameters.Keys -icontains 'identity')
        {
            $resource.properties["identity"] = $identity
        }

        if($PSBoundParameters.Keys -icontains 'cloudInitConfigurationBlobs')
        {
            $resource.properties["cloudInitConfigurationBlobs"] = $cloudInitConfigurationBlobs
        }

        if($PSBoundParameters.Keys -icontains 'bootStrapConfigurationBlobs')
        {
            $resource.properties["bootStrapConfigurationBlobs"] = $bootStrapConfigurationBlobs
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkUserRuleCollection
{
    [Alias('azure_native_network_userrulecollection')]
    param (
        [parameter(mandatory=$False,HelpMessage='A display name of the rule collection.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='A description of the rule collection.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration rule collection.)')]
        [string]
        $ruleCollectionName,
        [parameter(mandatory=$False,HelpMessage='Groups for configuration)')]
        $appliesToGroups,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration.)')]
        [string]
        $configurationName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:UserRuleCollection")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["configurationName"] = $configurationName
        $resource.properties["networkManagerName"] = $networkManagerName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'displayName')
        {
            $resource.properties["displayName"] = $displayName
        }

        if($PSBoundParameters.Keys -icontains 'description')
        {
            $resource.properties["description"] = $description
        }

        if($PSBoundParameters.Keys -icontains 'ruleCollectionName')
        {
            $resource.properties["ruleCollectionName"] = $ruleCollectionName
        }

        if($PSBoundParameters.Keys -icontains 'appliesToGroups')
        {
            $resource.properties["appliesToGroups"] = $appliesToGroups
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkPrivateZone
{
    [Alias('azure_native_network_privatezone')]
    param (
        [parameter(mandatory=$False,HelpMessage='The Azure Region where the resource lives)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the Private DNS zone (without a terminating dot).)')]
        [string]
        $privateZoneName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:PrivateZone")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'privateZoneName')
        {
            $resource.properties["privateZoneName"] = $privateZoneName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkRoute
{
    [Alias('azure_native_network_route')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the route.)')]
        [string]
        $routeName,
        [parameter(mandatory=$False,HelpMessage='The type of Azure hop the packet should be sent to.)')]
        [string]
        [ArgumentCompletions('VirtualNetworkGateway', 'VnetLocal', 'Internet', 'VirtualAppliance', 'None')]
        $nextHopType,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The destination CIDR to which the route applies.)')]
        [string]
        $addressPrefix,
        [parameter(mandatory=$False,HelpMessage='The type of the resource.)')]
        [string]
        $type,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the route table.)')]
        [string]
        $routeTableName,
        [parameter(mandatory=$False,HelpMessage='A value indicating whether this route overrides overlapping BGP routes regardless of LPM.)')]
        [bool]
        $hasBgpOverride,
        [parameter(mandatory=$False,HelpMessage='The IP address packets should be forwarded to. Next hop values are only allowed in routes where the next hop type is VirtualAppliance.)')]
        [string]
        $nextHopIpAddress,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:Route")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["nextHopType"] = $nextHopType
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["routeTableName"] = $routeTableName

        if($PSBoundParameters.Keys -icontains 'routeName')
        {
            $resource.properties["routeName"] = $routeName
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'addressPrefix')
        {
            $resource.properties["addressPrefix"] = $addressPrefix
        }

        if($PSBoundParameters.Keys -icontains 'type')
        {
            $resource.properties["type"] = $type
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'hasBgpOverride')
        {
            $resource.properties["hasBgpOverride"] = $hasBgpOverride
        }

        if($PSBoundParameters.Keys -icontains 'nextHopIpAddress')
        {
            $resource.properties["nextHopIpAddress"] = $nextHopIpAddress
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkRulesEngine
{
    [Alias('azure_native_network_rulesengine')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Rules Engine which is unique within the Front Door.)')]
        [string]
        $rulesEngineName,
        [parameter(mandatory=$False,HelpMessage='Name of the Front Door which is globally unique.)')]
        [string]
        $frontDoorName,
        [parameter(mandatory=$False,HelpMessage='Name of the Resource group within the Azure subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='A list of rules that define a particular Rules Engine Configuration.)')]
        $rules,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:RulesEngine")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["frontDoorName"] = $frontDoorName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'rulesEngineName')
        {
            $resource.properties["rulesEngineName"] = $rulesEngineName
        }

        if($PSBoundParameters.Keys -icontains 'rules')
        {
            $resource.properties["rules"] = $rules
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class LoadBalancerSku
{
    [ArgumentCompletions('Regional', 'Global')]
    [string] $tier
    [ArgumentCompletions('Basic', 'Standard')]
    [string] $name
}
function New-AzureNativeTypeNetworkLoadBalancerSku
{
    param (
        [parameter(mandatory=$False,HelpMessage='Tier of a load balancer SKU.)')]
        [string]
        [ArgumentCompletions('Regional', 'Global')]
        $tier,
        [parameter(mandatory=$False,HelpMessage='Name of a load balancer SKU.)')]
        [string]
        [ArgumentCompletions('Basic', 'Standard')]
        $name
    )

    process
    {
        return $([LoadBalancerSku]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkLoadBalancer
{
    [Alias('azure_native_network_loadbalancer')]
    param (
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The load balancer SKU.)')]
        [LoadBalancerSku]
        $sku,
        [parameter(mandatory=$False,HelpMessage='The extended location of the load balancer.)')]
        [ExtendedLocation]
        $extendedLocation,
        [parameter(mandatory=$False,HelpMessage='Collection of backend address pools used by a load balancer.)')]
        $backendAddressPools,
        [parameter(mandatory=$False,HelpMessage='The outbound rules.)')]
        $outboundRules,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Object collection representing the load balancing rules Gets the provisioning.)')]
        $loadBalancingRules,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Collection of inbound NAT Rules used by a load balancer. Defining inbound NAT rules on your load balancer is mutually exclusive with defining an inbound NAT pool. Inbound NAT pools are referenced from virtual machine scale sets. NICs that are associated with individual virtual machines cannot reference an Inbound NAT pool. They have to reference individual inbound NAT rules.)')]
        $inboundNatRules,
        [parameter(mandatory=$False,HelpMessage='Object representing the frontend IPs to be used for the load balancer.)')]
        $frontendIPConfigurations,
        [parameter(mandatory=$False,HelpMessage='Defines an external port range for inbound NAT to a single backend port on NICs associated with a load balancer. Inbound NAT rules are created automatically for each NIC associated with the Load Balancer using an external port from this range. Defining an Inbound NAT pool on your Load Balancer is mutually exclusive with defining inbound Nat rules. Inbound NAT pools are referenced from virtual machine scale sets. NICs that are associated with individual virtual machines cannot reference an inbound NAT pool. They have to reference individual inbound NAT rules.)')]
        $inboundNatPools,
        [parameter(mandatory=$False,HelpMessage='Collection of probe objects used in the load balancer.)')]
        $probes,
        [parameter(mandatory=$False,HelpMessage='The name of the load balancer.)')]
        [string]
        $loadBalancerName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:LoadBalancer")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'sku')
        {
            $resource.properties["sku"] = $sku
        }

        if($PSBoundParameters.Keys -icontains 'extendedLocation')
        {
            $resource.properties["extendedLocation"] = $extendedLocation
        }

        if($PSBoundParameters.Keys -icontains 'backendAddressPools')
        {
            $resource.properties["backendAddressPools"] = $backendAddressPools
        }

        if($PSBoundParameters.Keys -icontains 'outboundRules')
        {
            $resource.properties["outboundRules"] = $outboundRules
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'loadBalancingRules')
        {
            $resource.properties["loadBalancingRules"] = $loadBalancingRules
        }

        if($PSBoundParameters.Keys -icontains 'inboundNatRules')
        {
            $resource.properties["inboundNatRules"] = $inboundNatRules
        }

        if($PSBoundParameters.Keys -icontains 'frontendIPConfigurations')
        {
            $resource.properties["frontendIPConfigurations"] = $frontendIPConfigurations
        }

        if($PSBoundParameters.Keys -icontains 'inboundNatPools')
        {
            $resource.properties["inboundNatPools"] = $inboundNatPools
        }

        if($PSBoundParameters.Keys -icontains 'probes')
        {
            $resource.properties["probes"] = $probes
        }

        if($PSBoundParameters.Keys -icontains 'loadBalancerName')
        {
            $resource.properties["loadBalancerName"] = $loadBalancerName
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkServiceEndpointPolicy
{
    [Alias('azure_native_network_serviceendpointpolicy')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the service endpoint policy.)')]
        [string]
        $serviceEndpointPolicyName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='A collection of service endpoint policy definitions of the service endpoint policy.)')]
        $serviceEndpointPolicyDefinitions,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ServiceEndpointPolicy")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'serviceEndpointPolicyName')
        {
            $resource.properties["serviceEndpointPolicyName"] = $serviceEndpointPolicyName
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'serviceEndpointPolicyDefinitions')
        {
            $resource.properties["serviceEndpointPolicyDefinitions"] = $serviceEndpointPolicyDefinitions
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class NetworkManagerPropertiesNetworkManagerScopes
{
    [string[]] $subscriptions
    [string[]] $managementGroups
}
function New-AzureNativeTypeNetworkNetworkManagerPropertiesNetworkManagerScopes
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of subscriptions.)')]
        [string[]]
        $subscriptions,
        [parameter(mandatory=$False,HelpMessage='List of management groups.)')]
        [string[]]
        $managementGroups
    )

    process
    {
        return $([NetworkManagerPropertiesNetworkManagerScopes]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkNetworkManager
{
    [Alias('azure_native_network_networkmanager')]
    param (
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory=$False,HelpMessage='Scope of Network Manager.)')]
        [NetworkManagerPropertiesNetworkManagerScopes]
        $networkManagerScopes,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='A description of the network manager.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='A friendly name for the network manager.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Scope Access.)')]
        $networkManagerScopeAccesses,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:NetworkManager")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'networkManagerName')
        {
            $resource.properties["networkManagerName"] = $networkManagerName
        }

        if($PSBoundParameters.Keys -icontains 'networkManagerScopes')
        {
            $resource.properties["networkManagerScopes"] = $networkManagerScopes
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'description')
        {
            $resource.properties["description"] = $description
        }

        if($PSBoundParameters.Keys -icontains 'displayName')
        {
            $resource.properties["displayName"] = $displayName
        }

        if($PSBoundParameters.Keys -icontains 'networkManagerScopeAccesses')
        {
            $resource.properties["networkManagerScopeAccesses"] = $networkManagerScopeAccesses
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class DnsConfig
{
    [string] $relativeName
    [int] $ttl
}
function New-AzureNativeTypeNetworkDnsConfig
{
    param (
        [parameter(mandatory=$False,HelpMessage='The relative DNS name provided by this Traffic Manager profile. This value is combined with the DNS domain name used by Azure Traffic Manager to form the fully-qualified domain name (FQDN) of the profile.)')]
        [string]
        $relativeName,
        [parameter(mandatory=$False,HelpMessage='The DNS Time-To-Live (TTL), in seconds. This informs the local DNS resolvers and DNS clients how long to cache DNS responses provided by this Traffic Manager profile.)')]
        [int]
        $ttl
    )

    process
    {
        return $([DnsConfig]$PSBoundParameters)
    }
}
class MonitorConfigCustomHeaders
{
    [string] $name
    [string] $value
}
function New-AzureNativeTypeNetworkMonitorConfigCustomHeaders
{
    param (
        [parameter(mandatory=$False,HelpMessage='Header name.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Header value.)')]
        [string]
        $value
    )

    process
    {
        return $([MonitorConfigCustomHeaders]$PSBoundParameters)
    }
}
class MonitorConfigExpectedStatusCodeRanges
{
    [int] $max
    [int] $min
}
function New-AzureNativeTypeNetworkMonitorConfigExpectedStatusCodeRanges
{
    param (
        [parameter(mandatory=$False,HelpMessage='Max status code.)')]
        [int]
        $max,
        [parameter(mandatory=$False,HelpMessage='Min status code.)')]
        [int]
        $min
    )

    process
    {
        return $([MonitorConfigExpectedStatusCodeRanges]$PSBoundParameters)
    }
}
class MonitorConfig
{
    [string] $path
    [int] $port
    [int] $intervalInSeconds
    [MonitorConfigCustomHeaders[]] $customHeaders
    [int] $timeoutInSeconds
    [ArgumentCompletions('HTTP', 'HTTPS', 'TCP')]
    [string] $protocol
    [int] $toleratedNumberOfFailures
    [MonitorConfigExpectedStatusCodeRanges[]] $expectedStatusCodeRanges
    [ArgumentCompletions('CheckingEndpoints', 'Online', 'Degraded', 'Disabled', 'Inactive')]
    [string] $profileMonitorStatus
}
function New-AzureNativeTypeNetworkMonitorConfig
{
    param (
        [parameter(mandatory=$False,HelpMessage='The path relative to the endpoint domain name used to probe for endpoint health.)')]
        [string]
        $path,
        [parameter(mandatory=$False,HelpMessage='The TCP port used to probe for endpoint health.)')]
        [int]
        $port,
        [parameter(mandatory=$False,HelpMessage='The monitor interval for endpoints in this profile. This is the interval at which Traffic Manager will check the health of each endpoint in this profile.)')]
        [int]
        $intervalInSeconds,
        [parameter(mandatory=$False,HelpMessage='List of custom headers.)')]
        $customHeaders,
        [parameter(mandatory=$False,HelpMessage='The monitor timeout for endpoints in this profile. This is the time that Traffic Manager allows endpoints in this profile to response to the health check.)')]
        [int]
        $timeoutInSeconds,
        [parameter(mandatory=$False,HelpMessage='The protocol (HTTP, HTTPS or TCP) used to probe for endpoint health.)')]
        [string]
        [ArgumentCompletions('HTTP', 'HTTPS', 'TCP')]
        $protocol,
        [parameter(mandatory=$False,HelpMessage='The number of consecutive failed health check that Traffic Manager tolerates before declaring an endpoint in this profile Degraded after the next failed health check.)')]
        [int]
        $toleratedNumberOfFailures,
        [parameter(mandatory=$False,HelpMessage='List of expected status code ranges.)')]
        $expectedStatusCodeRanges,
        [parameter(mandatory=$False,HelpMessage='The profile-level monitoring status of the Traffic Manager profile.)')]
        [string]
        [ArgumentCompletions('CheckingEndpoints', 'Online', 'Degraded', 'Disabled', 'Inactive')]
        $profileMonitorStatus
    )

    process
    {
        return $([MonitorConfig]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkProfile
{
    [Alias('azure_native_network_profile')]
    param (
        [parameter(mandatory=$False,HelpMessage='The DNS settings of the Traffic Manager profile.)')]
        [DnsConfig]
        $dnsConfig,
        [parameter(mandatory=$False,HelpMessage='The traffic routing method of the Traffic Manager profile.)')]
        [string]
        [ArgumentCompletions('Performance', 'Priority', 'Weighted', 'Geographic', 'MultiValue', 'Subnet')]
        $trafficRoutingMethod,
        [parameter(mandatory=$False,HelpMessage='The status of the Traffic Manager profile.)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $profileStatus,
        [parameter(mandatory=$False,HelpMessage='The endpoint monitoring settings of the Traffic Manager profile.)')]
        [MonitorConfig]
        $monitorConfig,
        [parameter(mandatory=$False,HelpMessage='The list of endpoints in the Traffic Manager profile.)')]
        $endpoints,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group containing the Traffic Manager profile.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The Azure Region where the resource lives)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Maximum number of endpoints to be returned for MultiValue routing type.)')]
        [int]
        $maxReturn,
        [parameter(mandatory=$False,HelpMessage='The name of the resource)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The list of allowed endpoint record types.)')]
        $allowedEndpointRecordTypes,
        [parameter(mandatory=$False,HelpMessage='Indicates whether Traffic View is ''Enabled'' or ''Disabled'' for the Traffic Manager profile. Null, indicates ''Disabled''. Enabling this feature will increase the cost of the Traffic Manage profile.)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $trafficViewEnrollmentStatus,
        [parameter(mandatory=$False,HelpMessage='The type of the resource. Ex- Microsoft.Network/trafficManagerProfiles.)')]
        [string]
        $type,
        [parameter(mandatory=$False,HelpMessage='The name of the Traffic Manager profile.)')]
        [string]
        $profileName,
        [parameter(mandatory=$False,HelpMessage='Fully qualified resource Id for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/trafficManagerProfiles/{resourceName})')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:Profile")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'dnsConfig')
        {
            $resource.properties["dnsConfig"] = $dnsConfig
        }

        if($PSBoundParameters.Keys -icontains 'trafficRoutingMethod')
        {
            $resource.properties["trafficRoutingMethod"] = $trafficRoutingMethod
        }

        if($PSBoundParameters.Keys -icontains 'profileStatus')
        {
            $resource.properties["profileStatus"] = $profileStatus
        }

        if($PSBoundParameters.Keys -icontains 'monitorConfig')
        {
            $resource.properties["monitorConfig"] = $monitorConfig
        }

        if($PSBoundParameters.Keys -icontains 'endpoints')
        {
            $resource.properties["endpoints"] = $endpoints
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'maxReturn')
        {
            $resource.properties["maxReturn"] = $maxReturn
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'allowedEndpointRecordTypes')
        {
            $resource.properties["allowedEndpointRecordTypes"] = $allowedEndpointRecordTypes
        }

        if($PSBoundParameters.Keys -icontains 'trafficViewEnrollmentStatus')
        {
            $resource.properties["trafficViewEnrollmentStatus"] = $trafficViewEnrollmentStatus
        }

        if($PSBoundParameters.Keys -icontains 'type')
        {
            $resource.properties["type"] = $type
        }

        if($PSBoundParameters.Keys -icontains 'profileName')
        {
            $resource.properties["profileName"] = $profileName
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class ExpressRouteCircuitServiceProviderProperties
{
    [string] $peeringLocation
    [int] $bandwidthInMbps
    [string] $serviceProviderName
}
function New-AzureNativeTypeNetworkExpressRouteCircuitServiceProviderProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The peering location.)')]
        [string]
        $peeringLocation,
        [parameter(mandatory=$False,HelpMessage='The BandwidthInMbps.)')]
        [int]
        $bandwidthInMbps,
        [parameter(mandatory=$False,HelpMessage='The serviceProviderName.)')]
        [string]
        $serviceProviderName
    )

    process
    {
        return $([ExpressRouteCircuitServiceProviderProperties]$PSBoundParameters)
    }
}
class ExpressRouteCircuitSku
{
    [string] $name
    [ArgumentCompletions('Standard', 'Premium', 'Basic', 'Local')]
    [string] $tier
    [ArgumentCompletions('UnlimitedData', 'MeteredData')]
    [string] $family
}
function New-AzureNativeTypeNetworkExpressRouteCircuitSku
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the SKU.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The tier of the SKU.)')]
        [string]
        [ArgumentCompletions('Standard', 'Premium', 'Basic', 'Local')]
        $tier,
        [parameter(mandatory=$False,HelpMessage='The family of the SKU.)')]
        [string]
        [ArgumentCompletions('UnlimitedData', 'MeteredData')]
        $family
    )

    process
    {
        return $([ExpressRouteCircuitSku]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkExpressRouteCircuit
{
    [Alias('azure_native_network_expressroutecircuit')]
    param (
        [parameter(mandatory=$False,HelpMessage='The ServiceProviderProperties.)')]
        [ExpressRouteCircuitServiceProviderProperties]
        $serviceProviderProperties,
        [parameter(mandatory=$False,HelpMessage='The bandwidth of the circuit when the circuit is provisioned on an ExpressRoutePort resource.)')]
        [int]
        $bandwidthInGbps,
        [parameter(mandatory=$False,HelpMessage='The ServiceProviderProvisioningState state of the resource.)')]
        [string]
        [ArgumentCompletions('NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning')]
        $serviceProviderProvisioningState,
        [parameter(mandatory=$False,HelpMessage='The ServiceKey.)')]
        [string]
        $serviceKey,
        [parameter(mandatory=$False,HelpMessage='The GatewayManager Etag.)')]
        [string]
        $gatewayManagerEtag,
        [parameter(mandatory=$False,HelpMessage='The SKU.)')]
        [ExpressRouteCircuitSku]
        $sku,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the circuit.)')]
        [string]
        $circuitName,
        [parameter(mandatory=$False,HelpMessage='The reference to the ExpressRoutePort resource when the circuit is provisioned on an ExpressRoutePort resource.)')]
        [SubResource]
        $expressRoutePort,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Allow classic operations.)')]
        [bool]
        $allowClassicOperations,
        [parameter(mandatory=$False,HelpMessage='Flag denoting global reach status.)')]
        [bool]
        $globalReachEnabled,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The list of authorizations.)')]
        $authorizations,
        [parameter(mandatory=$False,HelpMessage='The list of peerings.)')]
        $peerings,
        [parameter(mandatory=$False,HelpMessage='The ServiceProviderNotes.)')]
        [string]
        $serviceProviderNotes,
        [parameter(mandatory=$False,HelpMessage='The CircuitProvisioningState state of the resource.)')]
        [string]
        $circuitProvisioningState,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ExpressRouteCircuit")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'serviceProviderProperties')
        {
            $resource.properties["serviceProviderProperties"] = $serviceProviderProperties
        }

        if($PSBoundParameters.Keys -icontains 'bandwidthInGbps')
        {
            $resource.properties["bandwidthInGbps"] = $bandwidthInGbps
        }

        if($PSBoundParameters.Keys -icontains 'serviceProviderProvisioningState')
        {
            $resource.properties["serviceProviderProvisioningState"] = $serviceProviderProvisioningState
        }

        if($PSBoundParameters.Keys -icontains 'serviceKey')
        {
            $resource.properties["serviceKey"] = $serviceKey
        }

        if($PSBoundParameters.Keys -icontains 'gatewayManagerEtag')
        {
            $resource.properties["gatewayManagerEtag"] = $gatewayManagerEtag
        }

        if($PSBoundParameters.Keys -icontains 'sku')
        {
            $resource.properties["sku"] = $sku
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'circuitName')
        {
            $resource.properties["circuitName"] = $circuitName
        }

        if($PSBoundParameters.Keys -icontains 'expressRoutePort')
        {
            $resource.properties["expressRoutePort"] = $expressRoutePort
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'allowClassicOperations')
        {
            $resource.properties["allowClassicOperations"] = $allowClassicOperations
        }

        if($PSBoundParameters.Keys -icontains 'globalReachEnabled')
        {
            $resource.properties["globalReachEnabled"] = $globalReachEnabled
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'authorizations')
        {
            $resource.properties["authorizations"] = $authorizations
        }

        if($PSBoundParameters.Keys -icontains 'peerings')
        {
            $resource.properties["peerings"] = $peerings
        }

        if($PSBoundParameters.Keys -icontains 'serviceProviderNotes')
        {
            $resource.properties["serviceProviderNotes"] = $serviceProviderNotes
        }

        if($PSBoundParameters.Keys -icontains 'circuitProvisioningState')
        {
            $resource.properties["circuitProvisioningState"] = $circuitProvisioningState
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkVirtualNetworkLink
{
    [Alias('azure_native_network_virtualnetworklink')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Private DNS zone (without a terminating dot).)')]
        [string]
        $privateZoneName,
        [parameter(mandatory=$False,HelpMessage='The Azure Region where the resource lives)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network link.)')]
        [string]
        $virtualNetworkLinkName,
        [parameter(mandatory=$False,HelpMessage='Is auto-registration of virtual machine records in the virtual network in the Private DNS zone enabled?)')]
        [bool]
        $registrationEnabled,
        [parameter(mandatory=$False,HelpMessage='The reference of the virtual network.)')]
        [SubResource]
        $virtualNetwork,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VirtualNetworkLink")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["privateZoneName"] = $privateZoneName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'virtualNetworkLinkName')
        {
            $resource.properties["virtualNetworkLinkName"] = $virtualNetworkLinkName
        }

        if($PSBoundParameters.Keys -icontains 'registrationEnabled')
        {
            $resource.properties["registrationEnabled"] = $registrationEnabled
        }

        if($PSBoundParameters.Keys -icontains 'virtualNetwork')
        {
            $resource.properties["virtualNetwork"] = $virtualNetwork
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkDnsResolver
{
    [Alias('azure_native_network_dnsresolver')]
    param (
        [parameter(mandatory=$False,HelpMessage='The geo-location where the resource lives)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the DNS resolver.)')]
        [string]
        $dnsResolverName,
        [parameter(mandatory=$False,HelpMessage='The reference to the virtual network. This cannot be changed after creation.)')]
        [SubResource]
        $virtualNetwork,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:DnsResolver")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["virtualNetwork"] = $virtualNetwork

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'dnsResolverName')
        {
            $resource.properties["dnsResolverName"] = $dnsResolverName
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkEndpoint
{
    [Alias('azure_native_network_endpoint')]
    param (
        [parameter(mandatory=$False,HelpMessage='The minimum number of endpoints that must be available in the child profile in order for the parent profile to be considered available. Only applicable to endpoint of type ''NestedEndpoints''.)')]
        [int]
        $minChildEndpoints,
        [parameter(mandatory=$False,HelpMessage='The Azure Resource URI of the of the endpoint. Not applicable to endpoints of type ''ExternalEndpoints''.)')]
        [string]
        $targetResourceId,
        [parameter(mandatory=$False,HelpMessage='The fully-qualified DNS name or IP address of the endpoint. Traffic Manager returns this value in DNS responses to direct traffic to this endpoint.)')]
        [string]
        $target,
        [parameter(mandatory=$False,HelpMessage='List of custom headers.)')]
        $customHeaders,
        [parameter(mandatory=$False,HelpMessage='The weight of this endpoint when using the ''Weighted'' traffic routing method. Possible values are from 1 to 1000.)')]
        [int]
        $weight,
        [parameter(mandatory=$False,HelpMessage='The minimum number of IPv6 (DNS record type AAAA) endpoints that must be available in the child profile in order for the parent profile to be considered available. Only applicable to endpoint of type ''NestedEndpoints''.)')]
        [int]
        $minChildEndpointsIPv6,
        [parameter(mandatory=$False,HelpMessage='The type of the Traffic Manager endpoint to be created or updated.)')]
        [string]
        $endpointType,
        [parameter(mandatory=$False,HelpMessage='The type of the resource. Ex- Microsoft.Network/trafficManagerProfiles.)')]
        [string]
        $type,
        [parameter(mandatory=$False,HelpMessage='Fully qualified resource Id for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/trafficManagerProfiles/{resourceName})')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the Traffic Manager endpoint to be created or updated.)')]
        [string]
        $endpointName,
        [parameter(mandatory=$False,HelpMessage='The monitoring status of the endpoint.)')]
        [string]
        [ArgumentCompletions('CheckingEndpoint', 'Online', 'Degraded', 'Disabled', 'Inactive', 'Stopped')]
        $endpointMonitorStatus,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group containing the Traffic Manager endpoint to be created or updated.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The list of subnets, IP addresses, and/or address ranges mapped to this endpoint when using the ''Subnet'' traffic routing method. An empty list will match all ranges not covered by other endpoints.)')]
        $subnets,
        [parameter(mandatory=$False,HelpMessage='The status of the endpoint. If the endpoint is Enabled, it is probed for endpoint health and is included in the traffic routing method.)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $endpointStatus,
        [parameter(mandatory=$False,HelpMessage='The list of countries/regions mapped to this endpoint when using the ''Geographic'' traffic routing method. Please consult Traffic Manager Geographic documentation for a full list of accepted values.)')]
        [string[]]
        $geoMapping,
        [parameter(mandatory=$False,HelpMessage='Specifies the location of the external or nested endpoints when using the ''Performance'' traffic routing method.)')]
        [string]
        $endpointLocation,
        [parameter(mandatory=$False,HelpMessage='The minimum number of IPv4 (DNS record type A) endpoints that must be available in the child profile in order for the parent profile to be considered available. Only applicable to endpoint of type ''NestedEndpoints''.)')]
        [int]
        $minChildEndpointsIPv4,
        [parameter(mandatory=$False,HelpMessage='The name of the Traffic Manager profile.)')]
        [string]
        $profileName,
        [parameter(mandatory=$False,HelpMessage='The priority of this endpoint when using the ''Priority'' traffic routing method. Possible values are from 1 to 1000, lower values represent higher priority. This is an optional parameter. If specified, it must be specified on all endpoints, and no two endpoints can share the same priority value.)')]
        [int]
        $priority,
        [parameter(mandatory=$False,HelpMessage='The name of the resource)')]
        [string]
        $name,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:Endpoint")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["endpointType"] = $endpointType
        $resource.properties["profileName"] = $profileName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'minChildEndpoints')
        {
            $resource.properties["minChildEndpoints"] = $minChildEndpoints
        }

        if($PSBoundParameters.Keys -icontains 'targetResourceId')
        {
            $resource.properties["targetResourceId"] = $targetResourceId
        }

        if($PSBoundParameters.Keys -icontains 'target')
        {
            $resource.properties["target"] = $target
        }

        if($PSBoundParameters.Keys -icontains 'customHeaders')
        {
            $resource.properties["customHeaders"] = $customHeaders
        }

        if($PSBoundParameters.Keys -icontains 'weight')
        {
            $resource.properties["weight"] = $weight
        }

        if($PSBoundParameters.Keys -icontains 'minChildEndpointsIPv6')
        {
            $resource.properties["minChildEndpointsIPv6"] = $minChildEndpointsIPv6
        }

        if($PSBoundParameters.Keys -icontains 'type')
        {
            $resource.properties["type"] = $type
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'endpointName')
        {
            $resource.properties["endpointName"] = $endpointName
        }

        if($PSBoundParameters.Keys -icontains 'endpointMonitorStatus')
        {
            $resource.properties["endpointMonitorStatus"] = $endpointMonitorStatus
        }

        if($PSBoundParameters.Keys -icontains 'subnets')
        {
            $resource.properties["subnets"] = $subnets
        }

        if($PSBoundParameters.Keys -icontains 'endpointStatus')
        {
            $resource.properties["endpointStatus"] = $endpointStatus
        }

        if($PSBoundParameters.Keys -icontains 'geoMapping')
        {
            $resource.properties["geoMapping"] = $geoMapping
        }

        if($PSBoundParameters.Keys -icontains 'endpointLocation')
        {
            $resource.properties["endpointLocation"] = $endpointLocation
        }

        if($PSBoundParameters.Keys -icontains 'minChildEndpointsIPv4')
        {
            $resource.properties["minChildEndpointsIPv4"] = $minChildEndpointsIPv4
        }

        if($PSBoundParameters.Keys -icontains 'priority')
        {
            $resource.properties["priority"] = $priority
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkNatGateway
{
    [Alias('azure_native_network_natgateway')]
    param (
        [parameter(mandatory=$False,HelpMessage='An array of public ip addresses associated with the nat gateway resource.)')]
        $publicIpAddresses,
        [parameter(mandatory=$False,HelpMessage='The idle timeout of the nat gateway.)')]
        [int]
        $idleTimeoutInMinutes,
        [parameter(mandatory=$False,HelpMessage='The nat gateway SKU.)')]
        [NatGatewaySku]
        $sku,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='An array of public ip prefixes associated with the nat gateway resource.)')]
        $publicIpPrefixes,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='A list of availability zones denoting the zone in which Nat Gateway should be deployed.)')]
        [string[]]
        $zones,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the nat gateway.)')]
        [string]
        $natGatewayName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:NatGateway")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'publicIpAddresses')
        {
            $resource.properties["publicIpAddresses"] = $publicIpAddresses
        }

        if($PSBoundParameters.Keys -icontains 'idleTimeoutInMinutes')
        {
            $resource.properties["idleTimeoutInMinutes"] = $idleTimeoutInMinutes
        }

        if($PSBoundParameters.Keys -icontains 'sku')
        {
            $resource.properties["sku"] = $sku
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'publicIpPrefixes')
        {
            $resource.properties["publicIpPrefixes"] = $publicIpPrefixes
        }

        if($PSBoundParameters.Keys -icontains 'zones')
        {
            $resource.properties["zones"] = $zones
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'natGatewayName')
        {
            $resource.properties["natGatewayName"] = $natGatewayName
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkNetworkGroup
{
    [Alias('azure_native_network_networkgroup')]
    param (
        [parameter(mandatory=$False,HelpMessage='Network group conditional filter.)')]
        [string]
        $conditionalMembership,
        [parameter(mandatory=$False,HelpMessage='A friendly name for the network group.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Group member type.)')]
        [string]
        $memberType,
        [parameter(mandatory=$False,HelpMessage='Group members of network group.)')]
        $groupMembers,
        [parameter(mandatory=$False,HelpMessage='A description of the network group.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The name of the network group to get.)')]
        [string]
        $networkGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:NetworkGroup")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["networkManagerName"] = $networkManagerName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'conditionalMembership')
        {
            $resource.properties["conditionalMembership"] = $conditionalMembership
        }

        if($PSBoundParameters.Keys -icontains 'displayName')
        {
            $resource.properties["displayName"] = $displayName
        }

        if($PSBoundParameters.Keys -icontains 'memberType')
        {
            $resource.properties["memberType"] = $memberType
        }

        if($PSBoundParameters.Keys -icontains 'groupMembers')
        {
            $resource.properties["groupMembers"] = $groupMembers
        }

        if($PSBoundParameters.Keys -icontains 'description')
        {
            $resource.properties["description"] = $description
        }

        if($PSBoundParameters.Keys -icontains 'networkGroupName')
        {
            $resource.properties["networkGroupName"] = $networkGroupName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class ConnectionMonitorSource
{
    [int] $port
    [string] $resourceId
}
function New-AzureNativeTypeNetworkConnectionMonitorSource
{
    param (
        [parameter(mandatory=$False,HelpMessage='The source port used by connection monitor.)')]
        [int]
        $port,
        [parameter(mandatory=$False,HelpMessage='The ID of the resource used as the source by connection monitor.)')]
        [string]
        $resourceId
    )

    process
    {
        return $([ConnectionMonitorSource]$PSBoundParameters)
    }
}
class ConnectionMonitorDestination
{
    [int] $port
    [string] $address
    [string] $resourceId
}
function New-AzureNativeTypeNetworkConnectionMonitorDestination
{
    param (
        [parameter(mandatory=$False,HelpMessage='The destination port used by connection monitor.)')]
        [int]
        $port,
        [parameter(mandatory=$False,HelpMessage='Address of the connection monitor destination (IP or domain name).)')]
        [string]
        $address,
        [parameter(mandatory=$False,HelpMessage='The ID of the resource used as the destination by connection monitor.)')]
        [string]
        $resourceId
    )

    process
    {
        return $([ConnectionMonitorDestination]$PSBoundParameters)
    }
}
function New-AzureNativeNetworkConnectionMonitor
{
    [Alias('azure_native_network_connectionmonitor')]
    param (
        [parameter(mandatory=$False,HelpMessage='Describes the source of connection monitor.)')]
        [ConnectionMonitorSource]
        $source,
        [parameter(mandatory=$False,HelpMessage='Monitoring interval in seconds.)')]
        [int]
        $monitoringIntervalInSeconds,
        [parameter(mandatory=$False,HelpMessage='Describes the destination of connection monitor.)')]
        [ConnectionMonitorDestination]
        $destination,
        [parameter(mandatory=$False,HelpMessage='Connection monitor tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='List of connection monitor test groups.)')]
        $testGroups,
        [parameter(mandatory=$False,HelpMessage='Connection monitor location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='List of connection monitor test configurations.)')]
        $testConfigurations,
        [parameter(mandatory=$False,HelpMessage='The name of the Network Watcher resource.)')]
        [string]
        $networkWatcherName,
        [parameter(mandatory=$False,HelpMessage='Optional notes to be associated with the connection monitor.)')]
        [string]
        $notes,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group containing Network Watcher.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Value indicating whether connection monitor V1 should be migrated to V2 format.)')]
        [string]
        $migrate,
        [parameter(mandatory=$False,HelpMessage='The name of the connection monitor.)')]
        [string]
        $connectionMonitorName,
        [parameter(mandatory=$False,HelpMessage='List of connection monitor outputs.)')]
        $outputs,
        [parameter(mandatory=$False,HelpMessage='List of connection monitor endpoints.)')]
        $endpoints,
        [parameter(mandatory=$False,HelpMessage='Determines if the connection monitor will start automatically once created.)')]
        [bool]
        $autoStart,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ConnectionMonitor")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["networkWatcherName"] = $networkWatcherName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'source')
        {
            $resource.properties["source"] = $source
        }

        if($PSBoundParameters.Keys -icontains 'monitoringIntervalInSeconds')
        {
            $resource.properties["monitoringIntervalInSeconds"] = $monitoringIntervalInSeconds
        }

        if($PSBoundParameters.Keys -icontains 'destination')
        {
            $resource.properties["destination"] = $destination
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'testGroups')
        {
            $resource.properties["testGroups"] = $testGroups
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'testConfigurations')
        {
            $resource.properties["testConfigurations"] = $testConfigurations
        }

        if($PSBoundParameters.Keys -icontains 'notes')
        {
            $resource.properties["notes"] = $notes
        }

        if($PSBoundParameters.Keys -icontains 'migrate')
        {
            $resource.properties["migrate"] = $migrate
        }

        if($PSBoundParameters.Keys -icontains 'connectionMonitorName')
        {
            $resource.properties["connectionMonitorName"] = $connectionMonitorName
        }

        if($PSBoundParameters.Keys -icontains 'outputs')
        {
            $resource.properties["outputs"] = $outputs
        }

        if($PSBoundParameters.Keys -icontains 'endpoints')
        {
            $resource.properties["endpoints"] = $endpoints
        }

        if($PSBoundParameters.Keys -icontains 'autoStart')
        {
            $resource.properties["autoStart"] = $autoStart
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkIpAllocation
{
    [Alias('azure_native_network_ipallocation')]
    param (
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The IPAM allocation ID.)')]
        [string]
        $ipamAllocationId,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The address prefix length for the IpAllocation.)')]
        [int]
        $prefixLength,
        [parameter(mandatory=$False,HelpMessage='The name of the IpAllocation.)')]
        [string]
        $ipAllocationName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The address prefix Type for the IpAllocation.)')]
        [string]
        [ArgumentCompletions('IPv4', 'IPv6')]
        $prefixType,
        [parameter(mandatory=$False,HelpMessage='The address prefix for the IpAllocation.)')]
        [string]
        $prefix,
        [parameter(mandatory=$False,HelpMessage='The type for the IpAllocation.)')]
        [string]
        [ArgumentCompletions('Undefined', 'Hypernet')]
        $type,
        [parameter(mandatory=$False,HelpMessage='IpAllocation tags.)')]
        [hashtable]
        $allocationTags,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:IpAllocation")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'ipamAllocationId')
        {
            $resource.properties["ipamAllocationId"] = $ipamAllocationId
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'prefixLength')
        {
            $resource.properties["prefixLength"] = $prefixLength
        }

        if($PSBoundParameters.Keys -icontains 'ipAllocationName')
        {
            $resource.properties["ipAllocationName"] = $ipAllocationName
        }

        if($PSBoundParameters.Keys -icontains 'prefixType')
        {
            $resource.properties["prefixType"] = $prefixType
        }

        if($PSBoundParameters.Keys -icontains 'prefix')
        {
            $resource.properties["prefix"] = $prefix
        }

        if($PSBoundParameters.Keys -icontains 'type')
        {
            $resource.properties["type"] = $type
        }

        if($PSBoundParameters.Keys -icontains 'allocationTags')
        {
            $resource.properties["allocationTags"] = $allocationTags
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkExpressRoutePortAuthorization
{
    [Alias('azure_native_network_expressrouteportauthorization')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the authorization.)')]
        [string]
        $authorizationName,
        [parameter(mandatory=$False,HelpMessage='The name of the express route port.)')]
        [string]
        $expressRoutePortName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:ExpressRoutePortAuthorization")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["expressRoutePortName"] = $expressRoutePortName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'authorizationName')
        {
            $resource.properties["authorizationName"] = $authorizationName
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkPrivateLinkServicePrivateEndpointConnection
{
    [Alias('azure_native_network_privatelinkserviceprivateendpointconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the private end point connection.)')]
        [string]
        $peConnectionName,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the private link service.)')]
        [string]
        $serviceName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='A collection of information about the state of the connection between service consumer and provider.)')]
        [PrivateLinkServiceConnectionState]
        $privateLinkServiceConnectionState,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:PrivateLinkServicePrivateEndpointConnection")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["serviceName"] = $serviceName

        if($PSBoundParameters.Keys -icontains 'peConnectionName')
        {
            $resource.properties["peConnectionName"] = $peConnectionName
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'privateLinkServiceConnectionState')
        {
            $resource.properties["privateLinkServiceConnectionState"] = $privateLinkServiceConnectionState
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkVirtualNetworkPeering
{
    [Alias('azure_native_network_virtualnetworkpeering')]
    param (
        [parameter(mandatory=$False,HelpMessage='If we need to verify the provisioning state of the remote gateway.)')]
        [bool]
        $doNotVerifyRemoteGateways,
        [parameter(mandatory=$False,HelpMessage='If gateway links can be used in remote virtual networking to link to this virtual network.)')]
        [bool]
        $allowGatewayTransit,
        [parameter(mandatory=$False,HelpMessage='The status of the virtual network peering.)')]
        [string]
        [ArgumentCompletions('Initiated', 'Connected', 'Disconnected')]
        $peeringState,
        [parameter(mandatory=$False,HelpMessage='Whether the forwarded traffic from the VMs in the local virtual network will be allowed/disallowed in remote virtual network.)')]
        [bool]
        $allowForwardedTraffic,
        [parameter(mandatory=$False,HelpMessage='Resource type.)')]
        [string]
        $type,
        [parameter(mandatory=$False,HelpMessage='The reference to the remote virtual network. The remote virtual network can be in the same or different region (preview). See here to register for the preview and learn more (https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-create-peering).)')]
        [SubResource]
        $remoteVirtualNetwork,
        [parameter(mandatory=$False,HelpMessage='Whether the VMs in the local virtual network space would be able to access the VMs in remote virtual network space.)')]
        [bool]
        $allowVirtualNetworkAccess,
        [parameter(mandatory=$False,HelpMessage='The reference to the remote virtual network''s Bgp Communities.)')]
        [VirtualNetworkBgpCommunities]
        $remoteBgpCommunities,
        [parameter(mandatory=$False,HelpMessage='If remote gateways can be used on this virtual network. If the flag is set to true, and allowGatewayTransit on remote peering is also true, virtual network will use gateways of remote virtual network for transit. Only one peering can have this flag set to true. This flag cannot be set if virtual network already has a gateway.)')]
        [bool]
        $useRemoteGateways,
        [parameter(mandatory=$False,HelpMessage='The name of the resource that is unique within a resource group. This name can be used to access the resource.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network.)')]
        [string]
        $virtualNetworkName,
        [parameter(mandatory=$False,HelpMessage='The name of the peering.)')]
        [string]
        $virtualNetworkPeeringName,
        [parameter(mandatory=$False,HelpMessage='The reference to the remote virtual network address space.)')]
        [AddressSpace]
        $remoteAddressSpace,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VirtualNetworkPeering")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["virtualNetworkName"] = $virtualNetworkName

        if($PSBoundParameters.Keys -icontains 'doNotVerifyRemoteGateways')
        {
            $resource.properties["doNotVerifyRemoteGateways"] = $doNotVerifyRemoteGateways
        }

        if($PSBoundParameters.Keys -icontains 'allowGatewayTransit')
        {
            $resource.properties["allowGatewayTransit"] = $allowGatewayTransit
        }

        if($PSBoundParameters.Keys -icontains 'peeringState')
        {
            $resource.properties["peeringState"] = $peeringState
        }

        if($PSBoundParameters.Keys -icontains 'allowForwardedTraffic')
        {
            $resource.properties["allowForwardedTraffic"] = $allowForwardedTraffic
        }

        if($PSBoundParameters.Keys -icontains 'type')
        {
            $resource.properties["type"] = $type
        }

        if($PSBoundParameters.Keys -icontains 'remoteVirtualNetwork')
        {
            $resource.properties["remoteVirtualNetwork"] = $remoteVirtualNetwork
        }

        if($PSBoundParameters.Keys -icontains 'allowVirtualNetworkAccess')
        {
            $resource.properties["allowVirtualNetworkAccess"] = $allowVirtualNetworkAccess
        }

        if($PSBoundParameters.Keys -icontains 'remoteBgpCommunities')
        {
            $resource.properties["remoteBgpCommunities"] = $remoteBgpCommunities
        }

        if($PSBoundParameters.Keys -icontains 'useRemoteGateways')
        {
            $resource.properties["useRemoteGateways"] = $useRemoteGateways
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'virtualNetworkPeeringName')
        {
            $resource.properties["virtualNetworkPeeringName"] = $virtualNetworkPeeringName
        }

        if($PSBoundParameters.Keys -icontains 'remoteAddressSpace')
        {
            $resource.properties["remoteAddressSpace"] = $remoteAddressSpace
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkVirtualNetworkTap
{
    [Alias('azure_native_network_virtualnetworktap')]
    param (
        [parameter(mandatory=$False,HelpMessage='The reference to the private IP address on the internal Load Balancer that will receive the tap.)')]
        [FrontendIPConfiguration]
        $destinationLoadBalancerFrontEndIPConfiguration,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network tap.)')]
        [string]
        $tapName,
        [parameter(mandatory=$False,HelpMessage='The VXLAN destination port that will receive the tapped traffic.)')]
        [int]
        $destinationPort,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The reference to the private IP Address of the collector nic that will receive the tap.)')]
        [NetworkInterfaceIPConfiguration]
        $destinationNetworkInterfaceIPConfiguration,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VirtualNetworkTap")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'destinationLoadBalancerFrontEndIPConfiguration')
        {
            $resource.properties["destinationLoadBalancerFrontEndIPConfiguration"] = $destinationLoadBalancerFrontEndIPConfiguration
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'tapName')
        {
            $resource.properties["tapName"] = $tapName
        }

        if($PSBoundParameters.Keys -icontains 'destinationPort')
        {
            $resource.properties["destinationPort"] = $destinationPort
        }

        if($PSBoundParameters.Keys -icontains 'destinationNetworkInterfaceIPConfiguration')
        {
            $resource.properties["destinationNetworkInterfaceIPConfiguration"] = $destinationNetworkInterfaceIPConfiguration
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkZone
{
    [Alias('azure_native_network_zone')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='A list of references to virtual networks that resolve records in this DNS zone. This is a only when ZoneType is Private.)')]
        $resolutionVirtualNetworks,
        [parameter(mandatory=$False,HelpMessage='The type of this DNS zone (Public or Private).)')]
        $zoneType,
        [parameter(mandatory=$False,HelpMessage='A list of references to virtual networks that register hostnames in this DNS zone. This is a only when ZoneType is Private.)')]
        $registrationVirtualNetworks,
        [parameter(mandatory=$False,HelpMessage='The name of the DNS zone (without a terminating dot).)')]
        [string]
        $zoneName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:Zone")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'resolutionVirtualNetworks')
        {
            $resource.properties["resolutionVirtualNetworks"] = $resolutionVirtualNetworks
        }

        if($PSBoundParameters.Keys -icontains 'zoneType')
        {
            $resource.properties["zoneType"] = $zoneType
        }

        if($PSBoundParameters.Keys -icontains 'registrationVirtualNetworks')
        {
            $resource.properties["registrationVirtualNetworks"] = $registrationVirtualNetworks
        }

        if($PSBoundParameters.Keys -icontains 'zoneName')
        {
            $resource.properties["zoneName"] = $zoneName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkAdminRule
{
    [Alias('azure_native_network_adminrule')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the rule.)')]
        [string]
        $ruleName,
        [parameter(mandatory=$False,HelpMessage='Whether the rule is custom or default.)')]
        [string]
        [ArgumentCompletions('Custom', 'Default')]
        $kind,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration rule collection.)')]
        [string]
        $ruleCollectionName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager security Configuration.)')]
        [string]
        $configurationName,
        [parameter(mandatory=$False,HelpMessage='The name of the network manager.)')]
        [string]
        $networkManagerName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:AdminRule")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["configurationName"] = $configurationName
        $resource.properties["kind"] = $kind
        $resource.properties["networkManagerName"] = $networkManagerName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["ruleCollectionName"] = $ruleCollectionName

        if($PSBoundParameters.Keys -icontains 'ruleName')
        {
            $resource.properties["ruleName"] = $ruleName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkVirtualNetworkGateway
{
    [Alias('azure_native_network_virtualnetworkgateway')]
    param (
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The reference to the LocalNetworkGateway resource which represents local network site having default routes. Assign Null value in case of removing existing default site setting.)')]
        [SubResource]
        $gatewayDefaultSite,
        [parameter(mandatory=$False,HelpMessage='The generation for this VirtualNetworkGateway. Must be None if gatewayType is not VPN.)')]
        [string]
        [ArgumentCompletions('None', 'Generation1', 'Generation2')]
        $vpnGatewayGeneration,
        [parameter(mandatory=$False,HelpMessage='The type of this virtual network gateway.)')]
        [string]
        [ArgumentCompletions('PolicyBased', 'RouteBased')]
        $vpnType,
        [parameter(mandatory=$False,HelpMessage='Customer vnet resource id. VirtualNetworkGateway of type local gateway is associated with the customer vnet.)')]
        [string]
        $vNetExtendedLocationResourceId,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network gateway.)')]
        [string]
        $virtualNetworkGatewayName,
        [parameter(mandatory=$False,HelpMessage='IP configurations for virtual network gateway.)')]
        $ipConfigurations,
        [parameter(mandatory=$False,HelpMessage='The reference to the VirtualNetworkGatewaySku resource which represents the SKU selected for Virtual network gateway.)')]
        [VirtualNetworkGatewaySku]
        $sku,
        [parameter(mandatory=$False,HelpMessage='The type of this virtual network gateway.)')]
        [string]
        [ArgumentCompletions('Vpn', 'ExpressRoute', 'LocalGateway')]
        $gatewayType,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Whether BGP is enabled for this virtual network gateway or not.)')]
        [bool]
        $enableBgp,
        [parameter(mandatory=$False,HelpMessage='The reference to the address space resource which represents the custom routes address space specified by the customer for virtual network gateway and VpnClient.)')]
        [AddressSpace]
        $customRoutes,
        [parameter(mandatory=$False,HelpMessage='Virtual network gateway''s BGP speaker settings.)')]
        [BgpSettings]
        $bgpSettings,
        [parameter(mandatory=$False,HelpMessage='The reference to the VpnClientConfiguration resource which represents the P2S VpnClient configurations.)')]
        [VpnClientConfiguration]
        $vpnClientConfiguration,
        [parameter(mandatory=$False,HelpMessage='The extended location of type local virtual network gateway.)')]
        [ExtendedLocation]
        $extendedLocation,
        [parameter(mandatory=$False,HelpMessage='ActiveActive flag.)')]
        [bool]
        $activeActive,
        [parameter(mandatory=$False,HelpMessage='Whether private IP needs to be enabled on this gateway for connections or not.)')]
        [bool]
        $enablePrivateIpAddress,
        [parameter(mandatory=$False,HelpMessage='Whether dns forwarding is enabled or not.)')]
        [bool]
        $enableDnsForwarding,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:VirtualNetworkGateway")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'gatewayDefaultSite')
        {
            $resource.properties["gatewayDefaultSite"] = $gatewayDefaultSite
        }

        if($PSBoundParameters.Keys -icontains 'vpnGatewayGeneration')
        {
            $resource.properties["vpnGatewayGeneration"] = $vpnGatewayGeneration
        }

        if($PSBoundParameters.Keys -icontains 'vpnType')
        {
            $resource.properties["vpnType"] = $vpnType
        }

        if($PSBoundParameters.Keys -icontains 'vNetExtendedLocationResourceId')
        {
            $resource.properties["vNetExtendedLocationResourceId"] = $vNetExtendedLocationResourceId
        }

        if($PSBoundParameters.Keys -icontains 'virtualNetworkGatewayName')
        {
            $resource.properties["virtualNetworkGatewayName"] = $virtualNetworkGatewayName
        }

        if($PSBoundParameters.Keys -icontains 'ipConfigurations')
        {
            $resource.properties["ipConfigurations"] = $ipConfigurations
        }

        if($PSBoundParameters.Keys -icontains 'sku')
        {
            $resource.properties["sku"] = $sku
        }

        if($PSBoundParameters.Keys -icontains 'gatewayType')
        {
            $resource.properties["gatewayType"] = $gatewayType
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'enableBgp')
        {
            $resource.properties["enableBgp"] = $enableBgp
        }

        if($PSBoundParameters.Keys -icontains 'customRoutes')
        {
            $resource.properties["customRoutes"] = $customRoutes
        }

        if($PSBoundParameters.Keys -icontains 'bgpSettings')
        {
            $resource.properties["bgpSettings"] = $bgpSettings
        }

        if($PSBoundParameters.Keys -icontains 'vpnClientConfiguration')
        {
            $resource.properties["vpnClientConfiguration"] = $vpnClientConfiguration
        }

        if($PSBoundParameters.Keys -icontains 'extendedLocation')
        {
            $resource.properties["extendedLocation"] = $extendedLocation
        }

        if($PSBoundParameters.Keys -icontains 'activeActive')
        {
            $resource.properties["activeActive"] = $activeActive
        }

        if($PSBoundParameters.Keys -icontains 'enablePrivateIpAddress')
        {
            $resource.properties["enablePrivateIpAddress"] = $enablePrivateIpAddress
        }

        if($PSBoundParameters.Keys -icontains 'enableDnsForwarding')
        {
            $resource.properties["enableDnsForwarding"] = $enableDnsForwarding
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkSubscriptionNetworkManagerConnection
{
    [Alias('azure_native_network_subscriptionnetworkmanagerconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='Network Manager Id.)')]
        [string]
        $networkManagerId,
        [parameter(mandatory=$False,HelpMessage='Name for the network manager connection.)')]
        [string]
        $networkManagerConnectionName,
        [parameter(mandatory=$False,HelpMessage='A description of the scope connection.)')]
        [string]
        $description,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:SubscriptionNetworkManagerConnection")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }

        if($PSBoundParameters.Keys -icontains 'networkManagerId')
        {
            $resource.properties["networkManagerId"] = $networkManagerId
        }

        if($PSBoundParameters.Keys -icontains 'networkManagerConnectionName')
        {
            $resource.properties["networkManagerConnectionName"] = $networkManagerConnectionName
        }

        if($PSBoundParameters.Keys -icontains 'description')
        {
            $resource.properties["description"] = $description
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeNetworkNetworkProfile
{
    [Alias('azure_native_network_networkprofile')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Resource location.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource ID.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='The name of the network profile.)')]
        [string]
        $networkProfileName,
        [parameter(mandatory=$False,HelpMessage='List of chid container network interface configurations.)')]
        $containerNetworkInterfaceConfigurations,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:network:NetworkProfile")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'id')
        {
            $resource.properties["id"] = $id
        }

        if($PSBoundParameters.Keys -icontains 'networkProfileName')
        {
            $resource.properties["networkProfileName"] = $networkProfileName
        }

        if($PSBoundParameters.Keys -icontains 'containerNetworkInterfaceConfigurations')
        {
            $resource.properties["containerNetworkInterfaceConfigurations"] = $containerNetworkInterfaceConfigurations
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        $global:pulumiresources += $resource
        return $resource
    }
}