Functions/Public/Get-WHDAsset.ps1

<#
    .SYNOPSIS
    Get an Asset from WHD.
 
    .DESCRIPTION
    This function retrieves a specific Asset from WHD, or a list of Assets based on a provided search parameter.
 
    .PARAMETER ResourceId
    The id of the Asset to be retrieved.
 
    .PARAMETER Qualifier
    A WHDQualifier object to filter the results.
    Use New-WHDQualifier and Join-WHDQualifier to build these objects.
 
    .PARAMETER QualifierString
    A WHD API qualifier string to filter the results.
    This is an alternative to using the Qualifier parameter if you prefer to build the qualifier string manually.
 
    .PARAMETER AssetNumber
    An assetNumber to search for.
 
    .PARAMETER SerialNumber
    A serialNumber to search for.
 
    .PARAMETER Location
    A location.locationName to search for.
 
    .PARAMETER Room
    A room.roomName to search for.
 
    .PARAMETER Status
    An assetstatus.name to search for.
 
    .PARAMETER Model
    A model.modelName to search for.
 
    .PARAMETER Manufacturer
    A model.manufacturer.name to search for.
 
    .PARAMETER Expand
    If specified, list results will use the detailed format.
#>

function Get-WHDAsset {
    [CmdletBinding(DefaultParameterSetName = "Search")]
    param (
        [Parameter(ParameterSetName = "Single", Mandatory, Position = 0)]
        [int] $ResourceId,

        [Parameter(ParameterSetName = "Qualifier", Mandatory)]
        [WHDQualifier] $Qualifier,

        [Parameter(ParameterSetName = "QualifierString", Mandatory)]
        [string] $QualifierString,

        [Parameter(ParameterSetName = "Search")]
        [string] $AssetNumber,

        [Parameter(ParameterSetName = "Search")]
        [string] $SerialNumber,

        [Parameter(ParameterSetName = "Search")]
        [string] $Location,

        [Parameter(ParameterSetName = "Search")]
        [string] $Room,

        [Parameter(ParameterSetName = "Search")]
        [string] $Status,

        [Parameter(ParameterSetName = "Search")]
        [string] $Model,

        [Parameter(ParameterSetName = "Search")]
        [string] $Manufacturer,

        [Parameter(ParameterSetName = "Search")]
        [Parameter(ParameterSetName = "Qualifier")]
        [Parameter(ParameterSetName = "QualifierString")]
        [switch] $Expand
    )

    $AttributeMap = @{
        AssetNumber  = "assetNumber"
        SerialNumber = "serialNumber"
        Location     = "location.locationName"
        Room         = "room.roomName"
        Status       = "assetstatus.name"
        Model        = "model.modelName"
        Manufacturer = "model.manufacturer.name"
    }

    $QueryParameters = @{
        ResourceType = [WHDResourceType]::Asset
        Expand       = $Expand.IsPresent
    }

    switch ($PSCmdlet.ParameterSetName) {
        "Single" {
            $QueryParameters["ResourceId"] = $ResourceId
        }
        "Qualifier" {
            $QueryParameters["Qualifier"] = $Qualifier
        }
        "QualifierString" {
            $QueryParameters["QualifierString"] = $QualifierString
        }
        "Search" {
            $QueryParameters["Qualifier"] = ConvertTo-WHDQualifier `
                -BoundParameters $PSBoundParameters `
                -AttributeMap $AttributeMap
        }
    }

    return Get-WHDResource @QueryParameters
}