src/Solutions/Get-XrmSolutionHistory.ps1

<#
    .SYNOPSIS
    Retrieve solutions history.

    .DESCRIPTION
    Get solution operation logs.

    .PARAMETER XrmClient
    Xrm connector initialized to target instance. Use latest one by default. (CrmServiceClient)

    .PARAMETER Take
    Number of logs to retrieve. (Default : 50)
#>

function Get-XrmSolutionHistory {
    [CmdletBinding()]    
    param
    (        
        [Parameter(Mandatory = $false, ValueFromPipeline)]
        [Microsoft.PowerPlatform.Dataverse.Client.ServiceClient]
        $XrmClient = $Global:XrmClient,

        [Parameter(Mandatory = $false)]
        [int]
        $Take = 50
    )
    begin {
        $StopWatch = [System.Diagnostics.Stopwatch]::StartNew();
        Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Start -Parameters ($MyInvocation.MyCommand.Parameters);       
    }    
    process {
        $querySolutionHistory = New-XrmQueryExpression -LogicalName "msdyn_solutionhistory" -Columns *;
        $querySolutionHistory = $querySolutionHistory | Add-XrmQueryOrder -Field "msdyn_endtime" -OrderType Descending;
        $querySolutionHistory.TopCount = $Take;
        $solutionHistory = $XrmClient | Get-XrmMultipleRecords -Query $querySolutionHistory;
        $solutionHistory | Select-Object "msdyn_starttime", "msdyn_operation", "msdyn_suboperation", "msdyn_name", "msdyn_solutionversion", "msdyn_publishername", "msdyn_status", "msdyn_result", "msdyn_errorcode", "msdyn_endtime", "msdyn_totaltime", "msdyn_ismanaged", "msdyn_ispatch", "msdyn_isoverwritecustomizations", "msdyn_exceptionmessage", "msdyn_packagename", "msdyn_correlationid", "msdyn_activityid", "msdyn_solutionid";
    }
    end {
        $StopWatch.Stop();
        Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Stop -StopWatch $StopWatch;
    }    
}

Export-ModuleMember -Function Get-XrmSolutionHistory -Alias *;