Public/Set-HuduAssetLayout.ps1

function Set-HuduAssetLayout {
    # This will silence the warning for variables with Password in their name.
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingPlainTextForPassword", "")]
    Param (
        [Parameter(Mandatory=$true)]
        [Int]$Id,
        [Parameter(Mandatory=$true)]
        [String]$Name,
        [Parameter(Mandatory=$true)]
        [String]$Icon,
        [Parameter(Mandatory=$true)]
        [String]$Color,
        [Alias("icon_color")]
        [Parameter(Mandatory=$true)]
        [String]$IconColor,
        [Alias("include_passwords")]
        [bool]$IncludePasswords='',
        [Alias("include_photos")]
        [bool]$IncludePhotos='',
        [Alias("include_comments")]
        [bool]$IncludeComments='',
        [Alias("include_files")]
        [bool]$IncludeFiles='',
        [Alias("password_types")]
        [String]$PasswordTypes='',
        [Parameter(Mandatory=$true)]
        [array]$Fields,
        [bool]$Active=$true
    )
    
    foreach ($Field in $Fields){
        $Field.show_in_list = [System.Convert]::ToBoolean($Field.show_in_list)
        $Field.required = [System.Convert]::ToBoolean($Field.required)
        $Field.expiration = [System.Convert]::ToBoolean($Field.expiration)
    }


    $AssetLayout = [ordered]@{asset_layout = [ordered]@{}}
    
    $AssetLayout.asset_layout.add('name',$Name)
    $AssetLayout.asset_layout.add('icon',$Icon)
    $AssetLayout.asset_layout.add('color',$Color)
    $AssetLayout.asset_layout.add('icon_color',$IconColor)
    $AssetLayout.asset_layout.add('fields',$Fields)
    $AssetLayout.asset_layout.add('active',$Active)
        
    if ($IncludePasswords) {
        $AssetLayout.asset_layout.add('include_passwords',[System.Convert]::ToBoolean($IncludePasswords))
    }
    
    if ($IncludePhotos) {
        $AssetLayout.asset_layout.add('include_photos',[System.Convert]::ToBoolean($IncludePhotos))
    }
    
    if ($IncludeComments) {
        $AssetLayout.asset_layout.add('include_comments',[System.Convert]::ToBoolean($IncludeComments))
    }
    
    if ($IncludeFiles) {
        $AssetLayout.asset_layout.add('include_files',[System.Convert]::ToBoolean($IncludeFiles))
    }
    
    if ($PasswordTypes) {
        $AssetLayout.asset_layout.add('password_types',$PasswordTypes)
    }
    
    
    $JSON = $AssetLayout | convertto-json -Depth 10
    
    $Response = Invoke-HuduRequest -Method put -Resource "/api/v1/asset_layouts/$Id" -body $JSON
    
    $Response
}