Public/Get-CAMSoftwareAsset.ps1

function Get-CAMSoftwareAsset
{
    <#
    .SYNOPSIS
        Function to retrieve Software Asset from the Cireson Asset Management
    .DESCRIPTION
        Function to retrieve Software Asset from the Cireson Asset Management
    .EXAMPLE
        Get-CamSoftwareAsset
    .EXAMPLE
        Get-CamSoftwareAsset -DisplayName "*Pro"
    .EXAMPLE
        Get-CamSoftwareAsset -id '3cbgg558-a09c-b717-2401-05aef430b01f'
    .NOTES
        Francois-Xavier Cat
        @Lazywinadm
        www.lazywinadmin.com
        github.com/lazywinadmin
    #>

    [CmdletBinding(DefaultParameterSetName = 'All')]
    PARAM (
        [Parameter(ParameterSetName = 'DisplayName')]
        [System.String]$DisplayName,
        
        [Parameter(ParameterSetName = 'ID')]
        $Id,
        
        $Filter
    )
    BEGIN
    {
        if (-not (Get-Module -Name SMLets)) { Import-Module -Name SMLets -ErrorAction Stop }
        Write-Debug -Message "ParameterSetName: $($PSCmdlet.ParameterSetName)"
        Write-Debug -Message "Parameters: $($PSBoundParameters.Keys)"
    }
    PROCESS
    {
        TRY
        {
            $Splatting = @{
                Class = (get-scsmclass -name 'Cireson.AssetManagement.SoftwareAsset')
            }
            
            IF ($PSBoundParameters['DisplayName']) { get-scsmobject @Splatting -Filter "DisplayName -like $DisplayName" }
            ELSEIF ($PSBoundParameters['ID']) { get-scsmobject @Splatting -Filter "Id -eq $ID" }
            ELSE { get-scsmobject @Splatting }
        }
        CATCH
        {
            Write-Error -Message "[PROCESS] An Error occured while querying Software Assets"
            $Error[0].Exception.Message
        }
    }
}