public/Get-DesktopEntries.ps1

function Get-DesktopEntries {
    <#
    .SYNOPSIS
        Gets desktop entry files from user, system, or autostart locations.
    .DESCRIPTION
        Queries .desktop entry files and returns metadata with optional file contents.
    .PARAMETER Location
        Location scope to query. Valid values are User, System, AutoStart, or All.
    .PARAMETER Name
        Optional name filter for desktop entries.
    .PARAMETER Contents
        If present, includes each matching desktop file content.
    .PARAMETER Path
        Optional path override, only used when Location is AutoStart.
    .PARAMETER Filter
        File filter pattern. Default is *.desktop.
    .EXAMPLE
        Get-DesktopEntries -Location User
        Returns user desktop entries.
    .EXAMPLE
        Get-DesktopEntries -Location AutoStart -Name firefox -Contents
        Returns matching autostart entry content.
    .LINK
        https://github.com/Skatterbrainz/linuxtools/blob/master/docs/Get-DesktopEntries.md
    #>

    [CmdletBinding()]
    param(
        [parameter()][ValidateSet('User','System','AutoStart','All')][string]$Location = 'User',
        [parameter()][string]$Name,
        [parameter()][switch]$Contents,
        [parameter()][string]$Path,
        [parameter()][string]$Filter = '*.desktop'
    )
    try {
        ReadDesktopEntries -Location $Location.ToLowerInvariant() -Name $Name -Contents:$Contents -Path $Path -Filter $Filter
    } catch {
        Write-Error $($_.Exception.Message -join(';'))
    }
}