Functions/Public/Get-MinionKeyState.ps1

<#
.SYNOPSIS
    Gets the state of a Minion's key.
.DESCRIPTION
    This function will use the Invoke-SaltStackAPIMethod command to query the get_minion_key_state method on the minions resource to return a minion's key state.
.EXAMPLE
    Get-MinionKeyState -MinionID 'minionname.domain.local'
 
    This will return the key state of a minion id.
.EXAMPLE
    Get-MinionKeyState -MinionID 'minionname.domain.local' -KeyState accepted
 
    This will return minion key state of a minion if it is in the "accepted" state. Otherwise, the return will be empty.
.EXAMPLE
    Get-MinionKeyState -KeyState pending
 
    This will return minion key states that are "pending".
.OUTPUTS
    PSCustomObject
.NOTES
    General notes
.LINK
#>

function Get-MinionKeyState {
    [CmdletBinding(SupportsShouldProcess = $true)]
    param (
        # MinionID
        [String]
        $MinionID,
        # KeyState
        [String]
        [Validateset('pending','accepted','rejected','denied')]
        $KeyState
    )

    # Check to see if there is an existing connection to SaltStack
    if (!$global:SaltConnection) {
        Write-Error 'You are not currently connected to any SaltStack servers. Please connect first using Connect-SaltStackConfig.'
        return
    }

    $arguments = @{}

    # Sets no limit to the number of results to return
    $arguments.Add('limit','0')

    if ($MinionID) {
        if ($KeyState) {
            # MinionID and KeyState specified
            $arguments.Add('minion_id',$minionID)
            $arguments.Add('key_state',$KeyState)
        } else {
            # Only MinionID Specified
            $arguments.Add('minion_id',$minionID)
        }
    } elseif ($KeyState) {
        # Only KeyState provided
        $arguments.Add('key_state',$KeyState)
    }

    $return = Invoke-SaltStackAPIMethod -Resource minions -Method get_minion_key_state -Arguments $arguments

    if ($return.error) {
        $errorDetail = $return.error.detail.state
        $errorMessage = $return.error.message
        Write-Error "$errorMessage - $errorDetail"
    } else {
        $results = $return.ret.results
        Write-Output -InputObject $results
    }

}