Public/Get-PlexCollection.ps1
function Get-PlexCollection { <# .SYNOPSIS Gets collections. .DESCRIPTION Gets collections. .PARAMETER Id The id of the collection to get. .PARAMETER LibraryId The id of the library to get collections from. .PARAMETER IncludeItems If specified, the items in the collection are returned. .EXAMPLE Get-PlexCollection -LibraryId 1 .EXAMPLE Get-PlexCollection -Id 723 -IncludeItems #> [CmdletBinding()] param( [Parameter(Mandatory = $true, ParameterSetName = "CollectionId")] [PSObject] $Id, [Parameter(Mandatory = $true, ParameterSetName = "LibraryId")] [PSObject] $LibraryId, [Parameter(Mandatory = $false)] [Switch] $IncludeItems ) ############################################################################# #Region Import Plex Configuration if(!$script:PlexConfigData) { try { Import-PlexConfiguration } catch { throw $_ } } #EndRegion ############################################################################# #Region Construct Uri if($Id) { $RestEndpoint = "library/collections/$($Id)" } if($LibraryId) { $RestEndpoint = "library/sections/$($LibraryId)/collections" #?includeCollections=1&includeExternalMedia=1&includeAdvanced=1&includeMeta=1" $Params = [Ordered]@{ "includeCollections" = 1 "includeExternalMedia" = 0 "includeAdvanced" = 1 "includeMeta" = 1 } } $DataUri = Get-PlexAPIUri -RestEndpoint $RestEndpoint -Params $Params #EndRegion ############################################################################# #Region Get data try { $Data = Invoke-RestMethod -Uri $DataUri -Method GET if($Data.MediaContainer.metadata.count -eq 0) { return } } catch { throw $_ } #EndRegion ############################################################################# #Region Get items if($IncludeItems) { if($Id) { Write-Verbose -Message "Function: $($MyInvocation.MyCommand): Appending collection item(s) for collection $($Data.MediaContainer.metadata.Title)" try { $Params = [Ordered]@{ excludeAllLeaves = 1 } $ItemsUri = Get-PlexAPIUri -RestEndpoint "library/collections/$($Id)/children" -Params $Params $Items = Invoke-RestMethod -Uri $ItemsUri -Method GET $Data.MediaContainer.metadata | Add-Member -NotePropertyName 'Items' -NotePropertyValue $Items.MediaContainer.metadata } catch { throw $_ } } else { # Iterate over each collection, make a lookup for the items and append them: foreach($Collection in $Data.MediaContainer.Metadata) { Write-Verbose -Message "Function: $($MyInvocation.MyCommand): Appending collection item(s) for collection $($Collection.title)" try { $Params = [Ordered]@{ excludeAllLeaves = 1 } $ItemsUri = Get-PlexAPIUri -RestEndpoint "library/collections/$($Collection.RatingKey)/children" -Params $Params $Items = Invoke-RestMethod -Uri $ItemsUri -Method GET $Collection | Add-Member -NotePropertyName 'Items' -NotePropertyValue $Items.MediaContainer.Metadata } catch { throw $_ } } } } #EndRegion return $Data.MediaContainer.Metadata } |