functions/MDCA/New-MdcaSubnet.ps1

function New-MdcaSubnet {
    <#
    .SYNOPSIS
        Create a new MDCA subnet
     
    .DESCRIPTION
        Create a new MDCA subnet
     
    .PARAMETER Name
        Name of the subnet to create
     
    .PARAMETER Category
        The category the subnet should have
     
    .PARAMETER Subnets
        IPRanges / subnets that should be part of this subnet
     
    .PARAMETER Organization
        The organization this subnet is part of
     
    .PARAMETER Tag
        Any tags this subnet should have.
     
    .PARAMETER EnableException
        This parameters disables user-friendly warnings and enables the throwing of exceptions.
        This is less user friendly, but allows catching exceptions in calling scripts.
 
    .PARAMETER WhatIf
        if this switch is enabled, no actions are performed but informational messages will be displayed that explain what would happen if the command were to run.
 
    .PARAMETER Confirm
        If this switch is enabled, you will be prompted for confirmation before executing any operations that change state.
     
    .EXAMPLE
        PS C:\> New-MdcaSubnet -Name "europe" -Category Corporate -Subnets '10.1.0.0/16' -Organization ContosoEU -Tag europe, intranet
         
        Creates a new MDCA subnet
    #>

    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments','')]
    [CmdletBinding(SupportsShouldProcess = $true)]
    Param (
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)]
        [string]
        $Name,

        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)]
        [SubnetCategory]
        $Category,

        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)]
        [string[]]
        $Subnets,

        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [string]
        $Organization,

        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [Alias('tags')]
        [string[]]
        $Tag,

        [switch]
        $EnableException
    )
    
    begin {
        Assert-DefenderAPIConnection -Service MDCA -Cmdlet $PSCmdlet
    }
    process {
        $body = @{
            name     = $Name
            category = [int]$Category
            subnets  = $Subnets
        }
        if ($Organization) { $body.organization = $Organization }
        if ($Tag) { $body.tags = $Tag }

        Invoke-PSFProtectedCommand -ActionString 'New-MdcaSubnet.Create' -ActionStringValues $Name -Target $Name -ScriptBlock {
            $newID = Invoke-EntraRequest -Service 'DefenderAPI.MDCA' -Method Post -Path "subnet/create_rule/" -Body $body
        } -EnableException $EnableException -PSCmdlet $PSCmdlet

        Get-MdcaSubnet -ID $newID
    }
}