functions/Get-JS7TaskLog.ps1
function Get-JS7TaskLog { <# .SYNOPSIS Returns the task log from the JS7 History .DESCRIPTION Returns a task log for a given Task ID. This cmdlet is mostly used for pipelined input from the Get-JS7TaskHistory cmdlet that allows to search the execution history of tasks and that returns task IDs that are used by this cmdlet to retrieve the task's log output. The following REST Web Service API resources are used: * /task/log/download .PARAMETER TaskId Specifies the ID that the task was running with. This information is provided by the Get-JS7TaskHistory cmdlet. .PARAMETER ControllerId This parameter is used to accept pipeline input from the Get-JS7TaskHistory cmdlet and forwards the parameter to the resulting object. .PARAMETER AgentUrl This parameter is used to accept pipeline input from the Get-JS7TaskHistory cmdlet and forwards the parameter to the resulting object. .PARAMETER OrderId This parameter is used to accept pipeline input from the Get-JS7TaskHistory cmdlet and forwards the parameter to the resulting object. .PARAMETER Workflow This parameter is used to accept pipeline input from the Get-JS7TaskHistory cmdlet and forwards the parameter to the resulting object. .PARAMETER Position This parameter is used to accept pipeline input from the Get-JS7TaskHistory cmdlet and forwards the parameter to the resulting object. .PARAMETER Job This parameter is used to accept pipeline input from the Get-JS7TaskHistory cmdlet and forwards the parameter to the resulting object. .PARAMETER Criticality This parameter is used to accept pipeline input from the Get-JS7TaskHistory cmdlet and forwards the parameter to the resulting object. .PARAMETER ExitCode This parameter is used to accept pipeline input from the Get-JS7TaskHistory cmdlet and forwards the parameter to the resulting object. .PARAMETER State This parameter is used to accept pipeline input from the Get-JS7TaskHistory cmdlet and forwards the parameter to the resulting object. .PARAMETER StartTime This parameter is used to accept pipeline input from the Get-JS7TaskHistory cmdlet and forwards the parameter to the resulting object. .PARAMETER EndTime This parameter is used to accept pipeline input from the Get-JS7TaskHistory cmdlet and forwards the parameter to the resulting object. .INPUTS This cmdlet accepts pipelined task history objects that are e.g. returned from the Get-JS7TaskHistory cmdlet. .OUTPUTS This cmdlet returns and an object with history properties including the task log. .EXAMPLE Get-JS7TaskHistory -WorkflowPath /product_demo/sample_workflow -Job job174 | Get-JS7TaskLog Retrieves the most recent task log for the given job. .EXAMPLE Get-JS7TaskHistory -WorkflowPath /product_demo/sample_workflow -Job job174 | Get-JS7TaskLog | Out-File /tmp/job174.log -Encoding Unicode Writes the task log to a file. .EXAMPLE Get-JS7TaskHistory -RelativeDateFrom -8h | Get-JS7TaskLog | Select-Object @{name='path'; expression={ "/tmp/history/$(Get-Date $_.startTime -f 'yyyyMMdd-hhmmss')-$([io.path]::GetFileNameWithoutExtension($_.job)).log"}}, @{name='value'; expression={ $_.log }} | Set-Content Reads the logs of tasks that completed within the last 8 hours and writes the log output to individual files. The log file names are created from the start time and the job name of each task. .EXAMPLE # execute once $lastHistory = Get-JS7TaskHistory -RelativeDateFrom -8h | Sort-Object -Property startTime # execute in intervals Get-JS7TaskHistory -DateFrom $lastHistory[0].startTime | Tee-Object -Variable lastHistory | Get-JS7TaskLog | Select-Object @{name='path'; expression={ "/tmp/history/$(Get-Date $_.startTime -f 'yyyyMMdd-hhmmss')-$([io.path]::GetFileNameWithoutExtension($_.job)).log"}}, @{name='value'; expression={ $_.log }} | Set-Content Provides a mechanism to subsequently retrieve previous logs. Starting from initial execution of the Get-JS7TaskHistory cmdlet the resulting $lastHistory object is used for any subsequent calls. Consider use of the Tee-Object cmdlet in the pipeline that updates the $lastHistory object that can be used for later executions of the same pipeline. The pipeline can e.g. be executed in a cyclic job. .LINK about_JS7 #> [cmdletbinding()] param ( [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [string] $ControllerId, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [string] $AgentUrl, [Parameter(Mandatory=$True,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [string] $TaskId, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [string] $OrderId, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [string] $Workflow, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [string] $Position, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [string] $Job, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [string] $Criticality, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [int] $ExitCode, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [PSCustomObject] $State, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [datetime] $StartTime, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [datetime] $EndTime ) Begin { Approve-JS7Command $MyInvocation.MyCommand $stopWatch = Start-JS7StopWatch } Process { $body = New-Object PSObject Add-Member -Membertype NoteProperty -Name 'controllerId' -value $script:jsWebService.ControllerId -InputObject $body Add-Member -Membertype NoteProperty -Name 'taskId' -value $TaskId -InputObject $body [string] $requestBody = $body | ConvertTo-Json -Depth 100 $response = Invoke-JS7WebRequest -Path '/task/log/download' -Body $requestBody if ( $response.StatusCode -ne 200 ) { throw ( $response | Format-List -Force | Out-String ) } $objResult = New-Object PSObject Add-Member -Membertype NoteProperty -Name 'controllerId' -value $ControllerId -InputObject $objResult Add-Member -Membertype NoteProperty -Name 'agentUrl' -value $AgentUrl -InputObject $objResult Add-Member -Membertype NoteProperty -Name 'taskId' -value $TaskId -InputObject $objResult Add-Member -Membertype NoteProperty -Name 'orderId' -value $OrderId -InputObject $objResult Add-Member -Membertype NoteProperty -Name 'workflow' -value $Workflow -InputObject $objResult Add-Member -Membertype NoteProperty -Name 'position' -value $Position -InputObject $objResult Add-Member -Membertype NoteProperty -Name 'job' -value $Job -InputObject $objResult Add-Member -Membertype NoteProperty -Name 'criticality' -value $Criticality -InputObject $objResult Add-Member -Membertype NoteProperty -Name 'exitCode' -value $ExitCode -InputObject $objResult Add-Member -Membertype NoteProperty -Name 'state' -value $State -InputObject $objResult Add-Member -Membertype NoteProperty -Name 'startTime' -value $StartTime -InputObject $objResult Add-Member -Membertype NoteProperty -Name 'endTime' -value $EndTime -InputObject $objResult Add-Member -Membertype NoteProperty -Name 'log' -value ([System.Text.Encoding]::UTF8.GetString( $response.Content )) -InputObject $objResult $objResult } End { Trace-JS7StopWatch -CommandName $MyInvocation.MyCommand.Name -StopWatch $stopWatch Update-JS7Session } } |