Public/Get-EvergreenLibrary.ps1

function Get-EvergreenLibrary {
    <#
        .EXTERNALHELP Evergreen-help.xml
    #>

    [CmdletBinding(SupportsShouldProcess = $False)]
    param (
        [Parameter(
            Mandatory = $True,
            Position = 0,
            ValueFromPipelineByPropertyName,
            HelpMessage = "Specify the path to the library.",
            ParameterSetName = "Path")]
        [ValidateNotNull()]
        [System.IO.FileInfo] $Path
    )

    begin {
    }

    process {
        if (Test-Path -Path $Path -PathType "Container") {
            $LibraryFile = $(Join-Path -Path $Path -ChildPath "EvergreenLibrary.json")

            if (Test-Path -Path $LibraryFile) {
                Write-Verbose -Message "Library exists: $LibraryFile."

                try {
                    # Read the library file
                    Write-Verbose -Message "Read: $LibraryFile."
                    $Library = Get-Content -Path $LibraryFile | ConvertFrom-Json
                }
                catch {
                    throw $_
                }

                if ($Null -ne $Library) {

                    # Build the output object
                    $Output = [PSCustomObject] @{
                        "Library"   = $Library
                        "Inventory" = (New-Object -TypeName "System.Collections.ArrayList")
                    }

                    foreach ($Application in $Library.Applications) {

                        # Add details for the application to the output object
                        $AppPath = $(Join-Path -Path $Path -ChildPath $Application.Name)
                        if (Test-Path -Path $AppPath) {

                            $AppManifest = $(Join-Path -Path $AppPath -ChildPath "$($Application.Name).json")
                            if (Test-Path -Path $AppManifest) {

                                try {
                                    Write-Verbose -Message "Read: $AppManifest."
                                    $Versions = Get-Content -Path $AppManifest | ConvertFrom-Json -Depth 20
                                }
                                catch {
                                    Write-Warning -Message "Encountered an error reading $AppManifest with: $($_.Exception.Message)"
                                }

                                try {
                                    # Add details for this application
                                    $App = [PSCustomObject] @{
                                        ApplicationName = $Application.Name
                                        Versions        = $Versions
                                    }
                                    $Output.Inventory.Add($App) | Out-Null
                                }
                                catch {
                                    Write-Warning -Message "Encountered an error adding details for $($Application.Name) with: $($_.Exception.Message)"
                                }

                            }
                            else {
                                Write-Warning -Message "Unable to find $AppManifest. Update the library with Invoke-EvergreenLibraryUpdate."
                            }
                        }
                        else {
                            Write-Warning -Message "Unable to find $AppPath. Update the library with Invoke-EvergreenLibraryUpdate."
                        }
                    }

                    # Output the object to the pipeline
                    Write-Output -InputObject $Output
                }
            }
            else {
                throw [System.IO.FileNotFoundException] "$Path is not an Evergreen Library. Cannot find EvergreenLibrary.json. Create a library with New-EvergreenLibrary."
            }
        }
        else {
            throw [System.IO.DirectoryNotFoundException] "Cannot use path $Path because it does not exist or is not a directory."
        }
    }

    end {}
}