Came up with below sample to get the result not that fast but works.
function Get-Supersededby
{
[CmdletBinding()]
[Alias()]
[OutputType([string])]
Param
(
$Name
)
Begin
{
}
Process
{
$Apps = Get-CMApplication -name "$(($Name -split ' ')[0])*" -Fast | Where-Object {$_.IsSuperseding -eq 'true' -and $_.LocalizedDisplayName -notlike $Name} | Select-Object -ExpandProperty LocalizedDisplayName
$Result = @()
foreach ($item in $Apps)
{
$DeploymentTypeNames = Get-CMDeploymentType -ApplicationName $item | Select-Object -ExpandProperty LocalizedDisplayName
foreach ($DeploymentTypeName in $DeploymentTypeNames)
{
$Supersedence = Get-CMDeploymentType -ApplicationName $item -DeploymentTypeName $DeploymentTypeName
$Supersedence = Get-CMDeploymentTypeSupersedence -InputObject $Supersedence
$AppModelNames = $Supersedence | Select-Object -ExpandProperty AppModelName
foreach ($AppModelName in $AppModelNames)
{
$Supersedes = Get-CMApplication -Fast | Where-Object {$_.ModelName -eq "$AppModelName"}
if ($Name -eq $Supersedes.LocalizedDisplayName)
{
Write-Verbose "$item"
$Object = New-Object -TypeName psobject
$Object | Add-Member -MemberType NoteProperty -Name Name -Value $item
$Result += $Object
}
}
}
}
}
End
{
Return $Result
}
}