Initialize-SPOCSOMCollections.ps1

##############################
#.SYNOPSIS
#Short description
#
#.DESCRIPTION
#Long description
#
#.PARAMETER CSOMCollection
#Parameter description
#
#.EXAMPLE
#An example
#
#.NOTES
#General notes
##############################
Function Initialize-SPOCSOMCollections{
    [CmdletBinding()]
    param(
        
        [Parameter(Mandatory=$true,ParameterSetName="CSOMCollection")]
        $CSOMCollection,

        [Parameter(ParameterSetName="CSOMCollection")]
        [Parameter(ParameterSetName="CSOMObjects")]
        [Switch]
        $ReturnObject,

        # Parameter help description
        [Parameter(Mandatory=$true,ParameterSetName="CSOMObjects",ValueFromPipeline)]
        [Microsoft.SharePoint.Client.SecurableObject[]]
        $CSOMObjects,

        # Parameter help description
        [Parameter(Mandatory=$true,ParameterSetName="CSOMObjects")]
        [String]
        $CollectionName    

    )

    Begin{
    }
    Process{
        if($CSOMCollection){
            <#$CSOMCollection | ForEach-Object {
                $_.Context.Load($CSOMCollection)
                $_.Context.ExecuteQuery()
                $results += $_
            }#>

            $CSOMCollection.Context.Load($CSOMCollection)
            $CSOMCollection.Context.ExecuteQuery()
            $results += $CSOMCollection
        }
        else{
            $results = @()
            foreach($co in $CSOMObjects){
                Write-Progress -Activity "Initializing CSOM Collections" -PercentComplete (($CSOMObjects.IndexOf($co) / $CSOMObjects.Length) * 100)
                $co.Context.Load($co.$CollectionName)
                $co.Context.ExecuteQuery()
                $results += $co.$CollectionName
            }
        }
    }
    End{
        if($ReturnObject){
            return $results
        }
    }
}