functions/Set-DrmmDeviceUdf.ps1

function Set-DrmmDeviceUdf {

    <#
    .SYNOPSIS
    Sets a Datto RMM Device User Defined Field

    .DESCRIPTION
    Any user defined field supplied with an empty value will be set to null.
    All user defined fields not supplied will retain their current value

    .PARAMETER deviceUid
    Provide device uid which will be used to set UDF(s)

    .PARAMETER udf1
    When provided it will set user defined field 1

    .PARAMETER udf2
    When provided it will set user defined field 2

    .PARAMETER udf3
    When provided it will set user defined field 3
    
    .PARAMETER udf4
    When provided it will set user defined field 4

    .PARAMETER udf5
    When provided it will set user defined field 5

    .PARAMETER udf6
    When provided it will set user defined field 6

    .PARAMETER udf7
    When provided it will set user defined field 7

    .PARAMETER udf8
    When provided it will set user defined field 8

    .PARAMETER udf9
    When provided it will set user defined field 9

    .PARAMETER udf10
    When provided it will set user defined field 10

    .PARAMETER udf11
    When provided it will set user defined field 11

    .PARAMETER udf12
    When provided it will set user defined field 12

    .PARAMETER udf13
    When provided it will set user defined field 13

    .PARAMETER udf14
    When provided it will set user defined field 14

    .PARAMETER udf15
    When provided it will set user defined field 15

    .PARAMETER udf16
    When provided it will set user defined field 16

    .PARAMETER udf17
    When provided it will set user defined field 17

    .PARAMETER udf18
    When provided it will set user defined field 18

    .PARAMETER udf19
    When provided it will set user defined field 19

    .PARAMETER udf20
    When provided it will set user defined field 20

    .PARAMETER udf21
    When provided it will set user defined field 21

    .PARAMETER udf22
    When provided it will set user defined field 22

    .PARAMETER udf23
    When provided it will set user defined field 23

    .PARAMETER udf24
    When provided it will set user defined field 24

    .PARAMETER udf25
    When provided it will set user defined field 25

    .PARAMETER udf26
    When provided it will set user defined field 26

    .PARAMETER udf27
    When provided it will set user defined field 27

    .PARAMETER udf28
    When provided it will set user defined field 28

    .PARAMETER udf29
    When provided it will set user defined field 29

    .PARAMETER udf30
    When provided it will set user defined field 30

    #>


    # Function Parameters
    Param(
        [Parameter(Mandatory=$True)] 
        $deviceUid,

        [Parameter(Mandatory=$False)]
        $udf1,

        [Parameter(Mandatory=$False)]
        $udf2,

        [Parameter(Mandatory=$False)]
        $udf3,

        [Parameter(Mandatory=$False)]
        $udf4,

        [Parameter(Mandatory=$False)]
        $udf5,

        [Parameter(Mandatory=$False)]
        $udf6,

        [Parameter(Mandatory=$False)]
        $udf7,

        [Parameter(Mandatory=$False)]
        $udf8,

        [Parameter(Mandatory=$False)]
        $udf9,

        [Parameter(Mandatory=$False)]
        $udf10,

        [Parameter(Mandatory=$False)]
        $udf11,

        [Parameter(Mandatory=$False)]
        $udf12,

        [Parameter(Mandatory=$False)]
        $udf13,

        [Parameter(Mandatory=$False)]
        $udf14,

        [Parameter(Mandatory=$False)]
        $udf15,

        [Parameter(Mandatory=$False)]
        $udf16,

        [Parameter(Mandatory=$False)]
        $udf17,

        [Parameter(Mandatory=$False)]
        $udf18,

        [Parameter(Mandatory=$False)]
        $udf19,

        [Parameter(Mandatory=$False)]
        $udf20,

        [Parameter(Mandatory=$False)]
        $udf21,

        [Parameter(Mandatory=$False)]
        $udf22,

        [Parameter(Mandatory=$False)]
        $udf23,

        [Parameter(Mandatory=$False)]
        $udf24,

        [Parameter(Mandatory=$False)]
        $udf25,

        [Parameter(Mandatory=$False)]
        $udf26,

        [Parameter(Mandatory=$False)]
        $udf27,

        [Parameter(Mandatory=$False)]
        $udf28,

        [Parameter(Mandatory=$False)]
        $udf29,

        [Parameter(Mandatory=$False)]
        $udf30
    )

    # Declare Variables
        $apiMethod = 'POST'
        $Udfs = @{}

    # Add UDFs provided
    If ($PSBoundParameters.ContainsKey('udf1')) {$Udfs.Add('udf1',$udf1)}
    If ($PSBoundParameters.ContainsKey('udf2')) {$Udfs.Add('udf2',$udf2)}
    If ($PSBoundParameters.ContainsKey('udf3')) {$Udfs.Add('udf3',$udf3)}
    If ($PSBoundParameters.ContainsKey('udf4')) {$Udfs.Add('udf4',$udf4)}
    If ($PSBoundParameters.ContainsKey('udf5')) {$Udfs.Add('udf5',$udf5)}
    If ($PSBoundParameters.ContainsKey('udf6')) {$Udfs.Add('udf6',$udf6)}
    If ($PSBoundParameters.ContainsKey('udf7')) {$Udfs.Add('udf7',$udf7)}
    If ($PSBoundParameters.ContainsKey('udf8')) {$Udfs.Add('udf8',$udf8)}
    If ($PSBoundParameters.ContainsKey('udf9')) {$Udfs.Add('udf9',$udf9)}
    If ($PSBoundParameters.ContainsKey('udf10')) {$Udfs.Add('udf10',$udf10)}
    If ($PSBoundParameters.ContainsKey('udf11')) {$Udfs.Add('udf11',$udf11)}
    If ($PSBoundParameters.ContainsKey('udf12')) {$Udfs.Add('udf12',$udf12)}
    If ($PSBoundParameters.ContainsKey('udf13')) {$Udfs.Add('udf13',$udf13)}
    If ($PSBoundParameters.ContainsKey('udf14')) {$Udfs.Add('udf14',$udf14)}
    If ($PSBoundParameters.ContainsKey('udf15')) {$Udfs.Add('udf15',$udf15)}
    If ($PSBoundParameters.ContainsKey('udf16')) {$Udfs.Add('udf16',$udf16)}
    If ($PSBoundParameters.ContainsKey('udf17')) {$Udfs.Add('udf17',$udf17)}
    If ($PSBoundParameters.ContainsKey('udf18')) {$Udfs.Add('udf18',$udf18)}
    If ($PSBoundParameters.ContainsKey('udf19')) {$Udfs.Add('udf19',$udf19)}
    If ($PSBoundParameters.ContainsKey('udf20')) {$Udfs.Add('udf20',$udf20)}
    If ($PSBoundParameters.ContainsKey('udf21')) {$Udfs.Add('udf21',$udf21)}
    If ($PSBoundParameters.ContainsKey('udf22')) {$Udfs.Add('udf22',$udf22)}
    If ($PSBoundParameters.ContainsKey('udf23')) {$Udfs.Add('udf23',$udf23)}
    If ($PSBoundParameters.ContainsKey('udf24')) {$Udfs.Add('udf24',$udf24)}
    If ($PSBoundParameters.ContainsKey('udf25')) {$Udfs.Add('udf25',$udf25)}
    If ($PSBoundParameters.ContainsKey('udf26')) {$Udfs.Add('udf26',$udf26)}
    If ($PSBoundParameters.ContainsKey('udf27')) {$Udfs.Add('udf27',$udf27)}
    If ($PSBoundParameters.ContainsKey('udf28')) {$Udfs.Add('udf28',$udf28)}
    If ($PSBoundParameters.ContainsKey('udf29')) {$Udfs.Add('udf29',$udf29)}
    If ($PSBoundParameters.ContainsKey('udf30')) {$Udfs.Add('udf30',$udf30)}

    # Convert to JSON
    $Body = $Udfs | ConvertTo-Json

    # Update UDFs
    return New-ApiRequest -apiMethod $apiMethod -apiRequest "/v2/device/$deviceUid/udf" -apiRequestBody $Body
}