Libraries/Bootloader/Bootloader.psm1

function Find-Bootloaders {
    [CmdletBinding()]
    [OutputType([hashtable])]
    Param (
        # Parition UUID to search
        [Parameter(Mandatory = $false, ParameterSetName = 'PARTUUID')]
        [string]$PartUUID,
        # Label of a partition
        [Alias('Label', 'PartitionLabel')]
        [Parameter(Mandatory = $false, ParameterSetName = 'PARTLABEL')]
        [string]$PartLabel,
        # MountPoint of a currently mounted volume or partition
        [Alias('Volume', 'Letter', 'DriveLetter')]
        [Parameter(Mandatory = $false, ParameterSetName = 'MOUNTPOINT')]
        [string]$MountPoint,
        # disk device name
        [AllowNull]
        [Parameter(Mandatory = $false, ParameterSetName = 'DISKPART')]
        [string]$Disk,
        # partition number
        [Parameter(Mandatory = $false, ParameterSetName = 'DISKPART')]
        [string]$PartNum,
        # full device address
        [Parameter(Mandatory = $false, ParameterSetName = 'DEVICE')]
        [string]$Device
    )
    Begin {
        Write-EnterFunction
    }

    Process {
        switch ($PSCmdlet.ParameterSetName) {
            'MOUNTPOINT' {
            }
            default {
                $MountPoint = Mount-ComputerDiskPartition @PSBoundParameters
            }
        }
        $bootloaders = @{}
        # looking for syslinux
        $syslinuxcfg = Find-BootloaderSyslinuxCfg -Path $MountPoint
        if ($syslinuxcfg) {
            Write-Debug "Found syslinux bootloader configuration file."
            $bootloaders.Add("syslinux", @{
                name = "syslinux"
                cfg = $syslinuxcfg.FullName -replace "$Mountpoint"
            })
        }
        # looking for grub
        $grubcfg = Find-BootloaderGrub2Cfg -Path $MountPoint
        if ($grubcfg) {
            Write-Debug "Found grub bootloader configuration file."
            $bootloaders.Add("grub2", @{
                name = "grub2"
                cfg = $grubcfg.FullName -replace "$Mountpoint"
            })
        }
        # looking for refind
        $refindcfg = Find-BootloaderRefindCfg -Path $MountPoint
        if ($refindcfg) {
            Write-Debug "Found refind bootloader configuration file."
            $bootloaders.Add("refind", @{
                name = "refind"
                cfg = $refindcfg.FullName -replace "$Mountpoint"
            })
        }
        return $bootloaders
    }

    End {
        Write-LeaveFunction
    }
}