Public/Get-P1MsiInstall.ps1

function Get-P1MsiInstall {
    <#
    .Synopsis
    Get all PlannerOne installation done with MSI.

    .Description
    Read Windows registry to get all PlannerOne unsintall keys.

    .Parameter OnlyServer
    Display only server installation.
    
    .Parameter InstallLocation
    The MSI install location to filter
    
    #>

    [cmdletbinding()]
    param(
        [switch] $OnlyServer,
        [string] $InstallLocation
    )    
    Process {
        $Pattern = "^PlannerOne*"
        if ($OnlyServer) {
            $Pattern = "^PlannerOne.for.Dynamics.NAV*"
        }

        if (!$InstallLocation) {
            $installs = gci "hklm:\software\microsoft\windows\currentversion\uninstall" | foreach { gp $_.PSPath } | select DisplayName,DisplayVersion,InstallDate,Publisher,PSChildName,InstallLocation | where { $_.DisplayName -match $Pattern }
            if ($installs -eq $null) {
                $installs = gci "hklm:\software\wow6432node\microsoft\windows\currentversion\uninstall" | foreach { gp $_.PSPath } | select DisplayName,DisplayVersion,InstallDate,Publisher,PSChildName,InstallLocation | where { $_.DisplayName -match $Pattern }
            }
        } else {
            $installs = gci "hklm:\software\microsoft\windows\currentversion\uninstall" | foreach { gp $_.PSPath } | select DisplayName,DisplayVersion,InstallDate,Publisher,PSChildName,InstallLocation | where { $_.DisplayName -match $Pattern -AND $_.InstallLocation -eq $InstallLocation }
            if ($installs -eq $null) {
                $installs = gci "hklm:\software\wow6432node\microsoft\windows\currentversion\uninstall" | foreach { gp $_.PSPath } | select DisplayName,DisplayVersion,InstallDate,Publisher,PSChildName,InstallLocation | where { $_.DisplayName -match $Pattern -AND $_.InstallLocation -eq $InstallLocation }
            }
        }

        return $installs
    }
}