AL/Get-AppDependencies.ps1
function Get-AppDependencies { [CmdletBinding()] param( [string] $Path ) function AddToDependencyTree() { param( [PSObject] $App, [PSObject[]] $DependencyArray, [PSObject[]] $AppCollection, [Int] $Order = 1 ) foreach ($Dependency in $App.Dependencies) { $DependencyArray = AddToDependencyTree ` -App ($AppCollection | where AppId -eq $Dependency.AppId) ` -DependencyArray $DependencyArray ` -AppCollection $AppCollection ` -Order ($Order - 1) } if (-not($DependencyArray | where AppId -eq $App.AppId)) { $DependencyArray += $App try { ($DependencyArray | where AppId -eq $App.AppId).ProcessOrder = $Order } catch { } } else { if (($DependencyArray | where AppId -eq $App.AppId).ProcessOrder -gt $Order) { ($DependencyArray | where AppId -eq $App.AppId).ProcessOrder = $Order } } $DependencyArray } #Script execution #. (Join-Path $PSScriptRoot "GetDependencies_TestApps.ps1") if ($Path -eq "") { $Path = "C:\ProgramData\NavContainerHelper\DependencyApps" } $AllAppFiles = Get-ChildItem -Path $Path -Filter "*.app" $AllApps = @() foreach ($AppFile in $AllAppFiles) { $App = Get-NAVAppInfo -Path $AppFile.FullName $AllApps += [PSCustomObject]@{ AppId = $App.AppId Version = $App.Version Name = $App.Name Publisher = $App.Publisher ProcessOrder = 0 Dependencies = $App.Dependencies Path = $AppFile.FullName } } $FinalResult = @() $AllApps | foreach { $FinalResult = AddToDependencyTree -App $_ -DependencyArray $FinalResult -AppCollection $AllApps -Order $AllApps.Count } Write-Output $FinalResult | sort ProcessOrder | ft } |