functions/inbox-rules/Search-TssInboxRuleSubscriber.ps1

function Search-TssInboxRuleSubscriber {
    <#
    .SYNOPSIS
    Search the subscribers of an inbox rule
 
    .DESCRIPTION
    Lists the users, groups and external email addresses subscribed to an inbox rule, including entries that were unsubscribed.
    Filter by account type or subscription status. -OnlyIncludeUnsubscribableUsers lists the users who receive the rule through a subscribed group instead, and -SearchText narrows that list by name.
 
    .PARAMETER TssSession
    TssSession object created by New-TssSession for authentication
 
    .PARAMETER Id
    Inbox rule ID
 
    .PARAMETER AccountType
    Only return subscribers of this account type: All, Groups, Users or ExternalEmails
 
    .PARAMETER OnlyIncludeUnsubscribableUsers
    Only return users who receive the rule through a subscribed group
 
    .PARAMETER SearchText
    Only return users whose name contains this text. The server applies it only together with -OnlyIncludeUnsubscribableUsers
 
    .PARAMETER Status
    Only return subscribers with this subscription status: All, Subscribed or Unsubscribed
 
    .EXAMPLE
    $session = New-TssSession -SecretServer https://alpha -Credential $ssCred
    Search-TssInboxRuleSubscriber -TssSession $session -Id 12
 
    List every subscriber of inbox rule 12
 
    .EXAMPLE
    $session = New-TssSession -SecretServer https://alpha -Credential $ssCred
    Search-TssInboxRuleSubscriber -TssSession $session -Id 12 -AccountType Groups -Status Subscribed
 
    List the groups subscribed to inbox rule 12
 
    .LINK
    https://thycotic-ps.github.io/thycotic.secretserver/commands/inbox-rules/Search-TssInboxRuleSubscriber
 
    .LINK
    https://github.com/thycotic-ps/thycotic.secretserver/blob/main/src/functions/inbox-rules/Search-TssInboxRuleSubscriber.ps1
 
    .NOTES
    Requires TssSession object returned by New-TssSession
    #>

    [CmdletBinding()]
    [OutputType('Thycotic.PowerShell.InboxRules.Subscriber[]')]
    param (
        [Parameter(Mandatory, ValueFromPipeline, Position = 0)]
        [Thycotic.PowerShell.Authentication.Session]
        $TssSession,

        [Parameter(Mandatory, ValueFromPipelineByPropertyName)]
        [Alias('InboxRuleId')]
        [int[]]
        $Id,

        [ValidateSet('All', 'Groups', 'Users', 'ExternalEmails')]
        [string]
        $AccountType,

        [switch]
        $OnlyIncludeUnsubscribableUsers,

        [string]
        $SearchText,

        [ValidateSet('All', 'Subscribed', 'Unsubscribed')]
        [string]
        $Status
    )
    begin {
        $tssParams = $PSBoundParameters
        $invokeParams = . $GetInvokeApiParams $TssSession
    }
    process {
        Get-TssInvocation $PSCmdlet.MyInvocation
        if ($tssParams.ContainsKey('TssSession') -and $TssSession.IsValidSession()) {
            Compare-TssVersion $TssSession '10.9.000000' $PSCmdlet.MyInvocation
            foreach ($currentId in $Id) {
                $restResponse = $null
                $uri = $TssSession.ApiUrl, 'inbox-rules', $currentId, 'subscribers' -join '/'
                $queryParams = @()
                $queryParams += "take=$($TssSession.Take)"
                switch ($tssParams.Keys) {
                    'AccountType' {
                        $queryParams += "filter.accountTypes=$([uri]::EscapeDataString($AccountType))"
                    }
                    'OnlyIncludeUnsubscribableUsers' {
                        $queryParams += "filter.onlyIncludeUnsubscribableUsers=$([boolean]$OnlyIncludeUnsubscribableUsers)"
                    }
                    'SearchText' {
                        $queryParams += "filter.searchText=$([uri]::EscapeDataString($SearchText))"
                    }
                    'Status' {
                        $queryParams += "filter.status=$([uri]::EscapeDataString($Status))"
                    }
                }
                if ($queryParams) {
                    $uri = $uri, ($queryParams -join '&') -join '?'
                }
                $invokeParams.Uri = $uri
                $invokeParams.Method = 'GET'
                Write-Verbose "Performing the operation $($invokeParams.Method) $uri"
                try {
                    $apiResponse = Invoke-TssApi @invokeParams
                    $restResponse = . $ProcessResponse $apiResponse
                } catch {
                    Write-Warning 'Issue with Search-TssInboxRuleSubscriber request'
                    $err = $_
                    . $ErrorHandling $err
                }
                if ($restResponse.records) {
                    [Thycotic.PowerShell.InboxRules.Subscriber[]](. $FilterTssResponse $restResponse.records ([Thycotic.PowerShell.InboxRules.Subscriber]))
                }
            }
        } else {
            Write-Warning 'No valid session found'
        }
    }
}