core/private/Format-JaxRunEntityLog.ps1

function Format-JaxRunEntityLog {
    [CmdletBinding()]
    param (
        $Entity
    )

    $key = Get-JaxRunEntityKey -Entity $Entity
    $runner = $null
    $tasks = $null
    $script = $null
    $source = $null
    $provenance = $null
    $aliases = $null
    $definition = $null
    $args = $null
    $directoryType = $null
    $scenario = $null
    $container = $null

    if ($Entity -is [System.Collections.IDictionary]) {
        if ($Entity.Contains('Runner')) { $runner = $Entity['Runner'] }
        if ($Entity.Contains('Tasks')) { $tasks = $Entity['Tasks'] }
        if ($Entity.Contains('Script')) { $script = $Entity['Script'] }
        if ($Entity.Contains('SourcePath')) { $source = $Entity['SourcePath'] }
        if ($Entity.Contains('Provenance')) { $provenance = $Entity['Provenance'] }
        if ($Entity.Contains('Aliases')) { $aliases = $Entity['Aliases'] }
        if ($Entity.Contains('Definition')) { $definition = $Entity['Definition'] }
        if ($Entity.Contains('Args')) { $args = $Entity['Args'] }
        if ($Entity.Contains('DirectoryType')) { $directoryType = $Entity['DirectoryType'] }
        if ($Entity.Contains('Scenario')) { $scenario = $Entity['Scenario'] }
        if ($Entity.Contains('Container')) { $container = $Entity['Container'] }
    } else {
        $props = $Entity.PSObject.Properties
        if ($props.Match('Runner').Count -gt 0) { $runner = $Entity.Runner }
        if ($props.Match('Tasks').Count -gt 0) { $tasks = $Entity.Tasks }
        if ($props.Match('Script').Count -gt 0) { $script = $Entity.Script }
        if ($props.Match('SourcePath').Count -gt 0) { $source = $Entity.SourcePath }
        if ($props.Match('Provenance').Count -gt 0) { $provenance = $Entity.Provenance }
        if ($props.Match('Aliases').Count -gt 0) { $aliases = $Entity.Aliases }
        if ($props.Match('Definition').Count -gt 0) { $definition = $Entity.Definition }
        if ($props.Match('Args').Count -gt 0) { $args = $Entity.Args }
        if ($props.Match('DirectoryType').Count -gt 0) { $directoryType = $Entity.DirectoryType }
        if ($props.Match('Scenario').Count -gt 0) { $scenario = $Entity.Scenario }
        if ($props.Match('Container').Count -gt 0) { $container = $Entity.Container }
    }

    $lines = @()
    $lines += "Key: $key"
    if (-not [string]::IsNullOrWhiteSpace($runner)) {
        $lines += "Runner: $runner"
    }
    if ($null -ne $tasks) {
        if ($tasks -is [string]) {
            $lines += "Tasks: $tasks"
        } else {
            $lines += "Tasks: $($tasks -join ', ')"
        }
    }
    if (-not [string]::IsNullOrWhiteSpace($script)) {
        $lines += "Script: $script"
    }
    if (-not [string]::IsNullOrWhiteSpace($source)) {
        $lines += "Source: $source"
    }
    if ($null -ne $aliases -and @($aliases).Count -gt 0) {
        $lines += "Aliases: $($aliases -join ', ')"
    }
    if (-not [string]::IsNullOrWhiteSpace($scenario)) {
        $lines += "Scenario: $scenario"
    }
    if (-not [string]::IsNullOrWhiteSpace($directoryType)) {
        $lines += "DirectoryType: $directoryType"
    }
    if ($null -ne $args -and $args -is [System.Collections.IDictionary] -and $args.Keys.Count -gt 0) {
        $argPairs = @()
        foreach ($argKey in $args.Keys) {
            $argPairs += ("{0}={1}" -f $argKey, $args[$argKey])
        }
        $lines += "Args: $($argPairs -join ', ')"
    }
    if ($null -ne $definition -and $definition -is [System.Collections.IDictionary]) {
        if ($definition.Contains('FullPath') -and -not [string]::IsNullOrWhiteSpace($definition['FullPath'])) {
            $lines += "DefinitionPath: $($definition['FullPath'])"
        }
        if ($definition.Contains('Parameters') -and $definition['Parameters']) {
            $paramNames = @()
            foreach ($param in @($definition['Parameters'])) {
                if ($param -is [System.Collections.IDictionary] -and $param.Contains('Name')) {
                    $paramNames += $param['Name']
                }
            }
            if ($paramNames.Count -gt 0) {
                $lines += "Parameters: $($paramNames -join ', ')"
            }
        }
    }
    if ($null -ne $container -and $container -is [System.Collections.IDictionary]) {
        if ($container.Contains('image') -and -not [string]::IsNullOrWhiteSpace($container['image'])) {
            $lines += "ContainerImage: $($container['image'])"
        }
    }
    if (-not [string]::IsNullOrWhiteSpace($provenance)) {
        $lines += "Provenance: $provenance"
    }

    return ($lines -join [Environment]::NewLine)
}