Public/Set-NCDeviceProperty.ps1

<#
.SYNOPSIS
Updates a custom property on a device.

.DESCRIPTION
PUT /api/devices/{deviceId}/custom-properties/{propertyId}. All body fields in the
`DeviceCustomPropertyModification` schema are supported; only bound parameters are sent.

.PARAMETER DeviceId
Target device.

.PARAMETER PropertyId
Custom-property ID.

.PARAMETER Value
New property value.

.PARAMETER PropertyName
Optional new property name.

.PARAMETER PropertyType
Optional new property type.

.PARAMETER EnumeratedValueList
Optional list of allowed values (for enumerated properties).

.EXAMPLE
Set-NCDeviceProperty -DeviceId 123 -PropertyId 7 -Value 'production'
#>

function Set-NCDeviceProperty {
    [CmdletBinding(SupportsShouldProcess)]
    param (
        [Parameter(Mandatory, ValueFromPipelineByPropertyName)]
        [ValidateNotNullOrEmpty()]
        [string]$DeviceId,

        [Parameter(Mandatory, ValueFromPipelineByPropertyName)]
        [ValidateNotNullOrEmpty()]
        [string]$PropertyId,

        [string]$Value,
        [string]$PropertyName,
        [string]$PropertyType,
        [string[]]$EnumeratedValueList
    )
    begin { $api = Get-NCRestApiInstance }
    process {
        Write-Verbose "[FUNCTION] Set-NCDeviceProperty: invoked."
        $body = @{}
        if ($PSBoundParameters.ContainsKey('Value'))               { $body.value               = $Value }
        if ($PSBoundParameters.ContainsKey('PropertyName'))        { $body.propertyName        = $PropertyName }
        if ($PSBoundParameters.ContainsKey('PropertyType'))        { $body.propertyType        = $PropertyType }
        if ($PSBoundParameters.ContainsKey('EnumeratedValueList')) { $body.enumeratedValueList = $EnumeratedValueList }

        if (-not $PSCmdlet.ShouldProcess("$DeviceId/$PropertyId", 'Set device custom property')) { return }
        $api.Put("api/devices/$DeviceId/custom-properties/$PropertyId", $body)
    }
}