Get-PasswordStateList.ps1

<#
.SYNOPSIS
    Gets all password lists from the API (Only those you have permissions to.)
.DESCRIPTION
    Gets all password lists from the API (Only those you have permissions to.)
.PARAMETER PasswordListID
    Gets the passwordlist based on ID, when omitted, gets all the passord lists
.PARAMETER SearchBy
    Indication when you want to search based on ID or Name
.PARAMETER SearchName
    The name to search
.EXAMPLE
    PS C:\> Get-PasswordStateList
.OUTPUTS
    Returns the lists including their names and IDs.
.NOTES
    Daryl Newsholme 2018
#>

function Get-PasswordStateList {
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute(
        'PSAvoidUsingPlainTextForPassword', '', Justification = 'Not a password just an ID'
    )]
    [CmdletBinding()]
    param (
        [parameter(ValueFromPipelineByPropertyName, Position = 0)][int32]$PasswordListID,
        [parameter(ValueFromPipelineByPropertyName, Position = 1,ParameterSetName='SearchBy')][ValidateSet('ID','Name')][string]$Searchby = 'ID',
        [parameter(ValueFromPipelineByPropertyName, Position = 2,ParameterSetName='SearchBy')][string]$SearchName
    )

    begin {
        . "$(Get-NativePath -PathAsStringArray "$PSScriptroot","PasswordStateClass.ps1")"
    }

    process {
        switch ( $Searchby )
        {
            'Name'{
                $lists = Get-PasswordStateResource -uri "/api/searchpasswordlists/?PasswordList=$SearchName"
            }
            'ID'{
                if (!$PasswordListID) {
                    $lists = Get-PasswordStateResource -uri "/api/passwordlists"
                }
                else {
                    $lists = Get-PasswordStateResource -uri "/api/passwordlists/$passwordListID"
                }
            }
        }
    }
    end {
        return $lists
    }
}