Write-FunctionCallLogMessage.ps1

# Copyright © 2017 Chocolatey Software, Inc.
# Copyright © 2011 - 2017 RealDimensions Software, LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
#
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

function Write-FunctionCallLogMessage {
<#
.SYNOPSIS
DO NOT USE. Not part of the public API.
 
.DESCRIPTION
Writes function call as a debug message.
 
.NOTES
Available in 0.10.2+.
 
This function is not part of the API.
 
.INPUTS
None
 
.OUTPUTS
None
 
.PARAMETER Invocation
The invocation of the function (`$MyInvocation`)
 
.PARAMETER Parameters
The parameters passed to the function (`$PSBoundParameters`)
 
.PARAMETER IgnoredArguments
Allows splatting with arguments that do not apply. Do not use directly.
 
.EXAMPLE
>
# This is how this function should always be called
Write-FunctionCallLogMessage -Invocation $MyInvocation -Parameters $PSBoundParameters
 
#>

param (
  $invocation,
  $parameters,
  [parameter(ValueFromRemainingArguments = $true)][Object[]] $ignoredArguments
)

  # do not log function call - recursion?

  $argumentsPassed = ''
  foreach ($param in $parameters.GetEnumerator()) {
    if ($param.Key -eq 'ignoredArguments') { continue; }
    $paramValue = $param.Value -Join ' '
    if ($param.Key -eq 'sensitiveStatements' -or $param.Key -eq 'password') {
      $paramValue = '[REDACTED]'
    }
    $argumentsPassed += "-$($param.Key) '$paramValue' "
  }

  Write-Debug "Running $($invocation.InvocationName) $argumentsPassed"
}