Private/NestedFunctions/Out-DebugParameter.ps1
<# .Synopsis Helper function to format debug parameter output. .Example $PSBoundParameters | Out-DebugParameter | Write-Debug #> function Out-DebugParameter { [CmdletBinding()] Param ( [Parameter(ValueFromPipeline = $true, Mandatory = $true)] [AllowEmptyCollection()] $InputObject ) Begin { $CommonParameters = ([System.Management.Automation.PSCmdlet]::CommonParameters, [System.Management.Automation.PSCmdlet]::OptionalCommonParameters) } Process { $MyName = $MyInvocation.MyCommand.Name $CallStack = Get-PSCallStack $ParentScript = $CallStack[$CallStack.Command.IndexOf($MyName) + 1] $ParentParentScript = $CallStack[$CallStack.Command.IndexOf($MyName) + 2] # Write-Debug (') $Output = $InputObject.GetEnumerator() | Where-Object { $CommonParameters -notcontains $_.Key } | Select-Object -Property:( @{ Name = 'Parameter' Expression = { $_.Key } }, @{ Name = 'Value' Expression = { $_.Value } } ) $Parameters = ($Output | ForEach-Object { "-$($_.Parameter):('$($_.Value -join ''',''')')" }) -join ' ' Return ('[ScriptParameters]: ' + ($ParentScript.Command, $Parameters, '# Called by script/function: ' + ([System.String]$ParentParentScript.Command).Trim() + ';', 'Line: ' + ([System.String]$ParentParentScript.ScriptLineNumber).Trim()) -join ' ') # ' Line: ' + [System.String]$ParentScript.ScriptLineNumber } } |