Public/Get-PlexSession.ps1

function Get-PlexSession
{
    <#
        .SYNOPSIS
            Gets a list of sessions (streams) on the Plex server.
        .DESCRIPTION
            Gets a list of sessions (streams) on the Plex server.
        .EXAMPLE
            Get-PlexSession
    #>


    [CmdletBinding(SupportsShouldProcess)]
    param(
    )

    #############################################################################
    #Region Import Plex Configuration
    if(!$script:PlexConfigData)
    {
        try
        {
            Import-PlexConfiguration -WhatIf:$False
        }
        catch
        {
            throw $_
        }
    }
    #EndRegion

    #############################################################################
    #Region Get data
    Write-Verbose -Message "Function: $($MyInvocation.MyCommand): Getting all sessions"
    try
    {
        $DataUri = Get-PlexAPIUri -RestEndpoint "status/sessions"
        $Data = Invoke-RestMethod -Uri $DataUri -Method GET -ErrorAction Stop
        if($Data.gettype().Name -eq 'String')
        {
            # Let's go with renaming the lowercase keys. Using .Replace rather than -replace as it should be faster.
            $Data = $Data.toString().Replace('"guid"', '"_guid"').Replace('"rating"', '"_rating"')
            # Convert back into JSON:
            $Data = $Data | ConvertFrom-Json
        }
        else
        {
            # $Data should be JSON already.
        }

        if($Data.MediaContainer.Size -eq 0)
        {
            return
        }

        $Results = $Data.MediaContainer.Metadata
    }
    catch
    {
        throw $_
    }
    #EndRegion

    #############################################################################
    # Append type and return results
    $Results | ForEach-Object { $_.psobject.TypeNames.Insert(0, "PSPlex.Session") }
    return $Results
}