Private/New-InfraPulseReport.ps1
|
function New-InfraPulseReport { [CmdletBinding()] param( [Parameter(Mandatory)] [string]$RequestedComputerName, [Parameter(Mandatory)] [string]$ComputerName, [AllowNull()] [psobject]$Inventory, [Parameter(Mandatory)] [AllowEmptyCollection()] [object[]]$Results, [double]$DurationMs, [string[]]$Tags = @(), [string]$RunId = '', [datetime]$StartedAtUtc, [string]$ConfigurationFingerprint = '', [string]$ConfigurationSource = '', [string]$EnvironmentName = '' ) if ([string]::IsNullOrWhiteSpace($RunId)) { $RunId = [guid]::NewGuid().ToString() } $completedAtUtc = [DateTime]::UtcNow if (-not $PSBoundParameters.ContainsKey('StartedAtUtc')) { $StartedAtUtc = $completedAtUtc.AddMilliseconds(-$DurationMs) } $summary = Get-InfraPulseSummary -Results $Results $report = [pscustomobject][ordered]@{ SchemaVersion = '1.3' Tool = 'InfraPulse' ToolVersion = $script:InfraPulseModuleVersion RunId = $RunId RequestedComputerName = $RequestedComputerName ComputerName = $ComputerName GeneratedAtUtc = $completedAtUtc StartedAtUtc = $StartedAtUtc.ToUniversalTime() CompletedAtUtc = $completedAtUtc ConfigurationFingerprint = $ConfigurationFingerprint ConfigurationSource = $ConfigurationSource EnvironmentName = $EnvironmentName OverallStatus = $summary.OverallStatus Summary = $summary.Counts Inventory = $Inventory Results = @($Results) Tags = @($Tags) DurationMs = [math]::Round($DurationMs, 2, [MidpointRounding]::AwayFromZero) } $report.PSObject.TypeNames.Insert(0, 'InfraPulse.Report') return $report } |