Public/Get-ArmorVM.ps1

function Get-ArmorVM {
    <#
        .SYNOPSIS
        This cmdlet retrieves the virtual machines in your Armor account.
 
        .DESCRIPTION
        This cmdlet retrieves details about the virtual machines in the
        Armor Anywhere or Armor Complete account in context. Returns a set of
        virtual machines that correspond to the filter criteria provided by the
        cmdlet parameters.
 
        .INPUTS
        UInt16
 
        Guid
 
        String
 
        PSCustomObject
 
        .NOTES
        Troy Lindsay
        Twitter: @troylindsay42
        GitHub: tlindsay42
 
        .EXAMPLE
        Get-ArmorVM
 
 
        Description
        -----------
        Returns all VMs in the Armor account that currently has context.
 
        .EXAMPLE
        Get-ArmorVM -Name ARMO25VML01-gen4
 
 
        Description
        -----------
        Returns the specified VM in the Armor account that currently has context.
 
        .EXAMPLE
        Get-ArmorVM -Name *-gen4
 
 
        Description
        -----------
        Returns all VMs in the Armor account that currently has context that have a name that ends with '-gen4'.
 
        .EXAMPLE
        Get-ArmorVM -Name *hacked*
 
 
        Description
        -----------
        Returns null.
 
        .LINK
        http://armorpowershell.readthedocs.io/en/latest/cmd_get.html#get-armorvm
 
        .LINK
        https://github.com/tlindsay42/ArmorPowerShell/blob/master/Armor/Public/Get-ArmorVM.ps1
 
        .LINK
        https://docs.armor.com/display/KBSS/Get+VMs
 
        .LINK
        https://docs.armor.com/display/KBSS/Get+VM+Detail
 
        .LINK
        https://developer.armor.com/#!/Infrastructure/Vm_GetVmList
 
        .LINK
        https://developer.armor.com/#!/Infrastructure/Vm_GetVmDetail
    #>


    [CmdletBinding( DefaultParameterSetName = 'ID' )]
    [OutputType( [ArmorVM[]] )]
    [OutputType( [ArmorVM] )]
    param (
        <#
        Specifies the IDs of the virtual machines that you want to retrieve.
        #>

        [Parameter(
            ParameterSetName = 'ID',
            Position = 0,
            ValueFromPipeline = $true,
            ValueFromPipelineByPropertyName = $true
        )]
        [ValidateRange( 1, 65535 )]
        [UInt16]
        $ID = 0,

        <#
        Specifies the Armor Anywhere Core Agent instance IDs of the virtual machines that you want to retrieve.
        #>

        [Parameter(
            ParameterSetName = 'CoreInstanceID',
            Position = 0,
            ValueFromPipeline = $true,
            ValueFromPipelineByPropertyName = $true
        )]
        [ValidateScript( { $_ -ne '00000000-0000-0000-0000-000000000000' } )]
        [Guid]
        $CoreInstanceID,

        <#
        Specifies the names of the virtual machines that you want to retrieve.
        Wildcard matches are supported.
        #>

        [Parameter(
            ParameterSetName = 'Name',
            Position = 0,
            ValueFromPipeline = $true,
            ValueFromPipelineByPropertyName = $true
        )]
        [AllowEmptyString()]
        [String]
        $Name,

        <#
        Specifies the API version for this request.
        #>

        [Parameter( Position = 1 )]
        [ValidateSet( 'v1.0' )]
        [String]
        $ApiVersion = $Global:ArmorSession.ApiVersion
    )

    begin {
        $function = $MyInvocation.MyCommand.Name

        Write-Verbose -Message "Beginning: '${function}'."

        Test-ArmorSession
    } # End of begin

    process {
        [ArmorVM[]] $return = $null

        $resources = Get-ArmorApiData -FunctionName $function -ApiVersion $ApiVersion

        if ( $PSCmdlet.ParameterSetName -eq 'ID' -and $ID -gt 0 ) {
            $uri = New-ArmorApiUri -Endpoints $resources.Endpoints[1] -IDs $ID
        }
        elseif ( $PSCmdlet.ParameterSetName -eq 'CoreInstanceID' ) {
            $uri = New-ArmorApiUri -Endpoints $resources.Endpoints[2] -IDs $CoreInstanceID
        }
        else {
            $uri = New-ArmorApiUri -Endpoints $resources.Endpoints
        }

        $keys = ( $resources.Query | Get-Member -MemberType 'NoteProperty' ).Name
        $parameters = ( Get-Command -Name $function ).Parameters.Values
        $uri = New-ArmorApiUriQuery -Keys $keys -Parameters $parameters -Uri $uri

        $splat = @{
            'Uri'         = $uri
            'Method'      = $resources.Method
            'SuccessCode' = $resources.SuccessCode
            'Description' = $resources.Description
        }
        $results = Submit-ArmorApiRequest @splat

        $filters = $resources.Filter |
            Get-Member -MemberType 'NoteProperty'
        $results = Select-ArmorApiResult -Results $results -Filters $filters

        if ( $results.Count -eq 0 -and $PSCmdlet.ParameterSetName -eq 'Name' ) {
            Write-Error -Message "Armor VM not found: Name: '${Name}'."
        }
        else {
            $return = $results
        }

        $return
    } # End of process

    end {
        Write-Verbose -Message "Ending: '${function}'."
    } # End of end
} # End of function