Public/Get-CAMObject.ps1

Function Get-CAMObject
{
<#
    .SYNOPSIS
        Function to retrieving Cireson Asset Management Object(s)
     
    .DESCRIPTION
        Function to retrieving Cireson Asset Management Object(s)
     
    .PARAMETER TypeName
        Specifies the type of Object you want to create
         
    .PARAMETER Filter
        Specifies the Filter to apply on the query
     
    .EXAMPLE
        Get-CAMObject -TypeName Vendor
 
    .EXAMPLE
        Get-CAMObject -TypeName Vendor -filter "Name -eq 'Google'"
     
    .NOTES
        Francois-Xavier Cat
        lazywinadmin.com
        @lazywinadm
        github.com/lazywinadmin
#>

    [CmdletBinding()]
    PARAM (
        [Parameter(Mandatory)]
        [ValidateSet(
            "Base",
            "CatalogItem",
            "Consumable",
            "CostCenter",
            "HardwareAsset",
            "Import.Connector",
            "Invoice",
            "Lease",
            "License",
            "Location",
            "Log",
            "MeteringData",
            "NoticeEvent",
            "NoticeEventData",
            "Organization",
            "Purchase",
            "PurchaseOrder",
            "Settings",
            "SoftwareAsset",
            "Standard",
            "Subnet",
            "SupportContract",
            "Vendor",
            "Warranty"
            )]
        [String]$TypeName,
        [Parameter()]
        $Filter
    )
    TRY
    {
        Write-Verbose -Message $(New-ScriptMessage -Block PROCESS -message 'Creating Splatting')
        Write-Verbose -Message $(New-ScriptMessage -Block PROCESS -message "Querying Class: Cireson.AssetManagement.$TypeName")
        $Splatting = @{
            Class = (get-scsmclass -name "Cireson.AssetManagement.$TypeName")
        }
        
        IF($PSBoundParameters['Filter'])
        {
            Write-Verbose -Message $(New-ScriptMessage -Block PROCESS -message 'Filter Specified: $Filter')
            $Splatting.Filter = $Filter
        }
        
        # Get CAM object
        Write-Verbose -Message $(New-ScriptMessage -Block PROCESS -message 'Retrieving objects...')
        Get-SCSMObject @Splatting
    }
    CATCH
    {
        Write-Error -Message "[PROCESS] An Error occured"
        $Error[0].Exception.Message
    }
}