1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
# TODO: It would be better if the Out-Default function resolved the underlying Out-Default
# command in the begin block. This would allow for supporting other modules that override
# Out-Default.
$script:outDefaultCmdlet = $ExecutionContext.InvokeCommand.GetCmdlet("Microsoft.PowerShell.Core\Out-Default")
########################################
# Public functions.
########################################
function Out-Default {
[CmdletBinding(ConfirmImpact = "Medium")]
param(
[Parameter(ValueFromPipeline = $true)]
[System.Management.Automation.PSObject]$InputObject)
begin {
#Write-Host '[Entering Begin Out-Default]'
$__sp = { & $script:outDefaultCmdlet @PSBoundParameters }.GetSteppablePipeline()
$__sp.Begin($pscmdlet)
#Write-Host '[Leaving Begin Out-Default]'
}
process {
#Write-Host '[Entering Process Out-Default]'
if ($_ -is [System.Management.Automation.ErrorRecord]) {
Write-Verbose -Message 'Error record:' 4>&1 | Out-Default
Write-Verbose -Message (Remove-TrailingNewLine (Out-String -InputObject $_ -Width 2147483647)) 4>&1 | Out-Default
Write-Verbose -Message 'Script stack trace:' 4>&1 | Out-Default
Write-Verbose -Message "$($_.ScriptStackTrace)" 4>&1 | Out-Default
Write-Verbose -Message 'Exception:' 4>&1 | Out-Default
Write-Verbose -Message $_.Exception.ToString() 4>&1 | Out-Default
Write-TaskError -Message $_.Exception.Message
} elseif ($_ -is [System.Management.Automation.WarningRecord]) {
Write-TaskWarning -Message (Remove-TrailingNewLine (Out-String -InputObject $_ -Width 2147483647))
} elseif ($_ -is [System.Management.Automation.VerboseRecord]) {
foreach ($private:str in (Format-DebugMessage -Object $_)) {
Write-TaskVerbose -Message $private:str
}
} elseif ($_ -is [System.Management.Automation.DebugRecord]) {
foreach ($private:str in (Format-DebugMessage -Object $_)) {
Write-TaskDebug -Message $private:str
}
} else {
# TODO: Consider using out-string here to control the width. As a security precaution it would actually be best to set it to max so wrapping doesn't interfere with secret masking.
$__sp.Process($_)
}
#Write-Host '[Leaving Process Out-Default]'
}
end {
#Write-Host '[Entering End Out-Default]'
$__sp.End()
#Write-Host '[Leaving End Out-Default]'
}
}
########################################
# Private functions.
########################################
function Format-DebugMessage {
[CmdletBinding()]
param([psobject]$Object)
$private:str = Out-String -InputObject $Object -Width 2147483647
$private:str = Remove-TrailingNewLine $private:str
"$private:str".Replace("`r`n", "`n").Replace("`r", "`n").Split("`n"[0])
}
function Remove-TrailingNewLine {
[CmdletBinding()]
param($Str)
if ([object]::ReferenceEquals($Str, $null)) {
return $Str
} elseif ($Str.EndsWith("`r`n")) {
return $Str.Substring(0, $Str.Length - 2)
} else {
return $Str
}
}
|