Module/Administration/Get-BCSAppStatusForServerInstance.ps1

<#
.SYNOPSIS
    Get a list of apps installed and published on a Business Central Instance
 
.DESCRIPTION
    Get a list of apps installed and published on a Business Central Instance
 
.PARAMETER serverInstance
    Specifies the Business Central Server Instance to collect apps from.
 
.PARAMETER appName
    If specified the output will be for only apps with this name.
 
.EXAMPLE
 
.NOTES
    Author: Mathias Stjernfelt
    Website: http://www.brightcom.se
#>

function Get-BCSAppStatusForServerInstance {
    Param (
        [Parameter(ValueFromPipelineByPropertyName, Mandatory = $true)]
        [string]$serverInstance,
        [Parameter(ValueFromPipelineByPropertyName, Mandatory = $false)]
        [string]$appName
    )
    begin {}

    process {
        Import-BCSDynamicsNavModules -ServerInstance $serverInstance

        $tenants = Get-NAVAppTenant -ServerInstance $serverInstance | Select-Object -Property Id;

        $appsHash = [PSCustomObject]@();

        foreach ($tenant in $tenants) {
            if ([string]::IsNullOrEmpty($appName)) {
                $apps = Get-NAVAppInfo -ServerInstance $serverInstance -Tenant $tenant.Id -TenantSpecificProperties
            } else {
                $apps = Get-NAVAppInfo -ServerInstance $serverInstance -Tenant $tenant.Id -TenantSpecificProperties | Where-Object Name -eq $appName
            }

            foreach ($app in $apps) {
                $NameVersion = ("{0}{1}" -f $app.Name, $app.Version);

                $item = New-Object PSObject
                $item | Add-Member -type NoteProperty -Name 'ServerInstance' -Value $serverInstance;
                $item | Add-Member -type NoteProperty -Name 'BCVersion' -Value $serverInstanceVersion;
                $item | Add-Member -type NoteProperty -Name 'Tenant' -Value $tenant.Id
                $item | Add-Member -type NoteProperty -Name 'Name' -Value $app.Name
                $item | Add-Member -type NoteProperty -Name 'Publisher' -Value $app.Publisher
                $item | Add-Member -type NoteProperty -Name 'Version' -Value $app.Version
                $item | Add-Member -type NoteProperty -Name 'Scope' -Value $app.Scope
                $item | Add-Member -type NoteProperty -Name 'IsInstalled' -Value $app.IsInstalled
                $item | Add-Member -type NoteProperty -Name 'IsPublished' -Value $app.IsPublished
                $item | Add-Member -type NoteProperty -Name 'SyncState' -Value $app.SyncState
                $item | Add-Member -type NoteProperty -Name 'NameVersion' -Value $NameVersion
                $item | Add-Member -type NoteProperty -Name 'AppID' -Value $app.AppId

                $appsHash += $item;
            }
        }

        $appsHash
    }

    end {
    }
}

Export-ModuleMember -Function Get-BCSAppStatusForServerInstance