Functions/Get-GraylogSidecarConfigurationAssignment.ps1

<#
    .SYNOPSIS
        Get the assigned configuration for the graylog node and collector.
 
    .DESCRIPTION
        Invoke a web request on the Graylog API to get the currently assigned
        configuration for the specified node an collector.
 
    .EXAMPLE
        PS C:\> Get-GraylogSidecarConfigurationAssignment -Uri 'https://graylog.contoso.com' -Credential $cred -NodeId '99b5a37c-a277-444e-b8fd-c261c18ac5bd' -CollectorId '5d06f16771c02a78f6ed644f'
        Get the assigned configuration.
#>

function Get-GraylogSidecarConfigurationAssignment
{
    [CmdletBinding()]
    [OutputType([System.String])]
    param
    (
        [Parameter(Mandatory = $true)]
        [System.String]
        $Uri,

        [Parameter(Mandatory = $true)]
        [System.Management.Automation.PSCredential]
        $Credential,

        [Parameter(Mandatory = $true)]
        [System.String]
        $NodeId,

        [Parameter(Mandatory = $true)]
        [System.String]
        $CollectorId
    )

    # Cerate basic authoriazion as base64 encoded string
    $auth = 'Basic {0}' -f [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(('{0}:{1}' -f $Credential.Username, $Credential.GetNetworkCredential().Password)))

    try
    {
        # Get the current graylog sidecar configuration, including assignments
        $graylogSidecarSplat = @{
            Method  = 'Get'
            Uri     = '{0}/api/sidecars/{1}' -f $Uri, $NodeId
            Headers = @{
                Authorization = $auth
            }
        }
        $graylogSidecar = Invoke-RestMethod @graylogSidecarSplat -ErrorAction 'Stop'

        # Filter all assignments for the desired collector
        $configurationId = $graylogSidecar.assignments | Where-Object { $_.collector_id -eq $CollectorId } | Select-Object -ExpandProperty 'configuration_id' -First 1

        return [System.String] $configurationId
    }
    catch
    {
        Write-Warning $_

        return ''
    }
}