Functions/StreamDeck/Get-StreamDeckAction.ps1

function Get-StreamDeckAction
{
    <#
    .Synopsis
        Gets Actions for StreamDeck
    .Description
        Gets available actions for StreamDeck
    .Example
        Get-StreamDeckAction
    .Link
        Get-StreamDeckPlugin
    .Link
        New-StreamDeckAction
    #>

    [OutputType('StreamDeck.PluginAction')]
    param(
    # The name of the action
    [Parameter(ValueFromPipelineByPropertyName)]
    [string]
    $Name,

    # The action UUID
    [Parameter(ValueFromPipelineByPropertyName)]
    [string]
    $UUID,

    # If set, will rebuild the cache of streamdeck actions.
    [Parameter(ValueFromPipelineByPropertyName)]
    [switch]
    $Force
    )

    process {
        #region Cache Plugins
        $plugins = Get-StreamDeckPlugin -Force:$Force
        if ($force -or -not $Script:CachedStreamDeckActions) {
            $Script:CachedStreamDeckActions =
                @(foreach ($plug in $plugins) {
                    foreach ($act in $plug.Actions) {
                        $act.pstypenames.clear()
                        $act.pstypenames.add('StreamDeck.PluginAction')
                        $act
                    }
                })
        }
        #endregion Cache Plugins

        #region Return Matching Plugins
        if (-not ($Name -or $UUID)) {
            $Script:CachedStreamDeckActions
        } else {
            foreach ($_ in $Script:CachedStreamDeckActions) {
                if ($UUID -and ($_.UUID -notlike $UUID)) { continue }
                if ($Name -and ($_.Name -notlike $Name)) { continue}
                $_
            }
        }
        #region Return Matching Plugins
    }
}