$url = "Your site URL here"
$site= new-Object Microsoft.SharePoint.SPSite($url)
#send all features to output file features.txt
$site.WebApplication.Farm.FeatureDefinitions `
| where-object {$_.solutionid -ne '00000000-0000-0000-0000-000000000000'} `
| Sort-Object solutionid,displayname `
| ft -property displayname,scope -auto -groupBy solutionid > features.txt
#replace solutionId in features.txt with solution name
foreach($s in $site.WebApplication.Farm.Solutions)
{
(Get-Content features.txt) `
| Foreach-Object {$_ -replace $s.solutionid.ToString(), $s.Name} `
| Set-Content features.txt
}
$site.Dispose()