Scripts/Get-BPAPermission.ps1

function Get-BPAPermission {
    <#
        .SYNOPSIS
            Gets AutoMate BPA permissions.
 
        .DESCRIPTION
            Get-BPAPermission gets permissions for objects.
 
        .PARAMETER InputObject
            The object(s) to retrieve permissions for.
 
        .INPUTS
            Permissions for the following objects can be retrieved by this function:
            Workflow
            Task
            Condition
            Process
            Agent
            AgentGroup
            User
            UserGroup
            Folder
 
        .EXAMPLE
            # Get permissions for workflow "My Workflow"
            Get-BPAWorkflow "My Workflow" | Get-BPAPermission
 
        .NOTES
            Author(s): : David Seibel
            Contributor(s) :
            Date Created : 09/12/2016
            Date Modified : 05/01/2018
 
        .LINK
            https://github.com/davidseibel/PoshBPA
    #>

    [CmdletBinding(DefaultParameterSetName = "All")]
    [OutputType([System.Object[]])]
    param(
        [Parameter(Position = 0, ParameterSetName = "ByPipeline", ValueFromPipeline = $true)]
        [ValidateNotNullOrEmpty()]
        $InputObject
    )

    PROCESS {
        foreach ($obj in $InputObject) {
            Write-Verbose "Processing object Name: '$($obj.Name)' Type: '$($obj.TypeName)'"

            if ($obj.TypeName -in @("Workflow","Task","Condition","Process","Folder","Agent","AgentGroup","User","UserGroup")) {
                $permissionIndex = Invoke-BPARestMethod -Resource "$([BPATypeDictionary]::($obj.TypeName).RestResource)/$($obj.ID)/permissions/index" -RestMethod Get -BPAServer $obj.BPAServer
                foreach ($permissionID in $permissionIndex) {
                    Invoke-BPARestMethod -Resource "$([BPATypeDictionary]::($obj.TypeName).RestResource)/$($obj.ID)/permissions/$permissionID/get" -RestMethod Get -BPAServer $obj.BPAServer
                }
            } else {
                $unsupportedType = $obj.GetType().FullName
                if ($_) { 
                    $unsupportedType = $_ 
                } elseif (($null -ne $obj.Type) -and ($obj.Type -ne "")) {
                    $unsupportedType = $obj.Type
                }
                Write-Error -Message "Unsupported input type '$unsupportedType' encountered!" -TargetObject $obj
            }
        }
    }
}