Public/New-UMSDevice.ps1

function New-UMSDevice
{
  [cmdletbinding(SupportsShouldProcess, ConfirmImpact = 'Medium')]
  param
  (
    [Parameter(Mandatory)]
    [String]
    $Computername,

    [ValidateRange(0, 65535)]
    [Int]
    $TCPPort = 8443,

    [ValidateSet(3)]
    [Int]
    $ApiVersion = 3,

    [ValidateSet('Tls12', 'Tls11', 'Tls', 'Ssl3')]
    [String[]]
    $SecurityProtocol = 'Tls12',

    [Parameter(Mandatory)]
    $WebSession,

    [Parameter(Mandatory, ValueFromPipelineByPropertyName, ValueFromPipeline)]
    [ValidatePattern('^([0-9a-f]{12})$')]
    [String]
    $Mac,

    [Parameter(Mandatory, ValueFromPipelineByPropertyName)]
    [Int]
    $FirmwareId,

    [Parameter(ValueFromPipelineByPropertyName)]
    [ValidateLength(1, 15)]
    [String]
    $Name,

    [Parameter(ValueFromPipelineByPropertyName)]
    [Int]
    $ParentId = -1,

    [Parameter(ValueFromPipelineByPropertyName)]
    [String]
    $Site,

    [Parameter(ValueFromPipelineByPropertyName)]
    [String]
    $Department,

    [Parameter(ValueFromPipelineByPropertyName)]
    [String]
    $CostCenter,

    [Parameter(ValueFromPipelineByPropertyName)]
    [ValidateScript( { $_ -match [IPAddress]$_ })]
    [String]
    $LastIP,

    [Parameter(ValueFromPipelineByPropertyName)]
    [String]
    $Comment,

    [Parameter(ValueFromPipelineByPropertyName)]
    [String]
    $AssetId,

    [Parameter(ValueFromPipelineByPropertyName)]
    [String]
    $InserviceDate,

    [Parameter(ValueFromPipelineByPropertyName)]
    [ValidateLength(18, 18)]
    [String]
    $SerialNumber
  )

  Begin
  {
    $UriArray = @($Computername, $TCPPort, $ApiVersion)
    $BaseURL = ('https://{0}:{1}/umsapi/v{2}/thinclients' -f $UriArray)
  }
  Process
  {
    $Body = ConvertTo-Json @{
      mac           = $Mac
      firmwareID    = $FirmwareId.ToString()
      name          = $Name
      parentID      = $ParentId.ToString()
      site          = $Site
      department    = $Department
      costCenter    = $CostCenter
      lastIP        = $LastIP
      comment       = $Comment
      assetID       = $AssetId
      inserviceDate = $InserviceDate
      serialNumber  = $SerialNumber
    }
    $Params = @{
      WebSession       = $WebSession
      Uri              = $BaseURL
      Body             = $Body
      Method           = 'Put'
      ContentType      = 'application/json'
      Headers          = @{ }
      SecurityProtocol = ($SecurityProtocol -join ',')
    }
    if ($PSCmdlet.ShouldProcess('MAC: {0}' -f $Mac))
    {
      $APIObjectColl = Invoke-UMSRestMethod @Params
    }
    $Result = foreach ($APIObject in $APIObjectColl)
    {
      $Properties = [ordered]@{
        'Mac'      = [String]$Mac
        'Message'  = [String]$APIObject.message
        'Id'       = [Int]$APIObject.id
        'Name'     = [String]$APIObject.name
        'ParentId' = [Int]$APIObject.parentID
      }
      New-Object psobject -Property $Properties
    }
    $Result
  }
  End
  {
  }
}