Functions/Public/Set-SaltApiKeyState.ps1

<#
.SYNOPSIS
    Sets the key state for a minion(s).
.DESCRIPTION
    This function will use the Invoke-SaltApiFunction to call the key.accept, key.reject or key.delete function depending on the value specified for KeyState.
.EXAMPLE
    Set-SaltApiKeyState -Match minion1 -KeyState accept
 
    This will accept an unaccepted key for a minion matching 'minion1'.
.EXAMPLE
    Set-SaltApiKeyState -Match minion1 -KeyState delete
 
    This will delete the key for a minion matching 'minion1'.
.OUTPUTS
    PSCustomObject
.NOTES
    General notes
.LINK
#>

function Set-SaltApiKeyState {
    [CmdletBinding(SupportsShouldProcess = $true)]
    param (
        [String]
        $Match,
        [String]
        [Validateset('accept', 'reject','delete')]
        $KeyState,
        [Parameter(Mandatory = $false)]    
        [Switch]
        $SkipCertificateCheck = $false
    )

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

    switch ($KeyState) {
        'accept' { $function = 'key.accept'}
        'reject' { $function = 'key.reject'}
        'delete' { $function = 'key.delete'}
        Default {$function = $null}
    }

    $kwarg = @{match = $Match }

    $parameters = @{
        Client               = 'wheel'
        Function             = $function
        Kwarg                = $kwarg
        SkipCertificateCheck = $SkipCertificateCheck
    }

    $return = Invoke-SaltApiFunction @parameters

    $minions = @()

    foreach ($minion in $return.Content.data.return.minions) {
        $minions += $minion
    }
    
    Add-Member -InputObject $return.Content.data -MemberType NoteProperty -Name Match -Value $match 
    Add-Member -InputObject $return.Content.data -MemberType NoteProperty -Name Minions -Value $minions

    Write-Output $return.Content.data    

}