Set-DCAIPRange.ps1

Function Set-DCAIPRange
{
    <#
    .SYNOPSIS
        Set Defender Cloud Apps IP range.

    .NOTES
        Author: Michal Gajda

    .EXAMPLE
        $BaseUri = https://<tenant>.<region>.portal.cloudappsecurity.com
        $IPRanges = Set-DCAIPRange -Token $Token -BaseUri $BaseUri -IPRangeId "12345" -Name "My IP Range" -Category "Corporate" -Subnets @("192.168.1.0/24")

    .LINK
        https://learn.microsoft.com/en-us/defender-cloud-apps/api-data-enrichment-update
    #>

    [CmdletBinding(DefaultParameterSetName = "All")]
    Param
    (
        [Parameter(Mandatory = $true)]
        [String]$Token,
        [ValidateSet("Bearer","Token")]
        [String]$TokenType = "Bearer",
        [Parameter(Mandatory = $true)]
        $BaseUri,
        [Parameter(Mandatory = $true)]
        [String]$IPRangeId,
        [Parameter(Mandatory = $true)]
        [String]$Name,
        [Parameter(Mandatory = $true)]
        [ValidateSet("Corporate","Administrative","Risky","VPN","CloudProvider","Other")]
        [String]$Category,
        [Parameter(Mandatory = $true)]
        [String[]]$Subnets,
        [String[]]$Tags,
        [String]$Organization
    )

    Begin
    {
        if(!$MyInvocation.BoundParameters.ContainsKey("Token")) { $Token = $Global:Token }

        $Headers = @{
            'Content-Type' = 'application/json'
            Accept = 'application/json'
            Authorization = "$TokenType $Token"
        }

        $CategoryValue = @{
            "Corporate" = 1
            "Administrative" = 2
            "Risky" = 3
            "VPN" = 4
            "CloudProvider" = 5
            "Other" = 6
        }
        $Results = @()
    }

    Process
    {
        $Uri = "$BaseUri/api/v1/subnet/$IPRangeId/update_rule/"

        $Body = @{
            name = $Name
            category = $CategoryValue[$Category]
            subnets = $Subnets
        }
        if($Tags) { $Body['tags'] = $Tags }
        if($Organization) { $Body['organization'] = $Organization }

        $Request = @{
            Method = "POST"
            Uri = $Uri
            Headers = $Headers
            Body = $Body | ConvertTo-Json -Depth 5
            ErrorAction = "Stop"
        }

        Write-Verbose $Uri
        Write-Verbose "$($Body | ConvertTo-Json -Depth 5 -Compress)"
        $Response = Invoke-RestMethod @Request
    }

    End
    {
        Return $Response
    }
}