Examples/TraceModule.ps1

#requires -Module Information
[CmdletBinding()]param($RemoteArgs = @{})
Write-Info "Enter $PSCommandPath" -Tag Enter, Trace

New-Module -Name "My Custom Module" {

    function Invoke-ModuleFunction {
        [CmdletBinding()]
        param (
            [Parameter(ValueFromPipeline)]
            [string[]]$Message
        )
        begin {
            Write-Info "Enter Invoke-ModuleFunction Begin"
            Write-Info "- Begin $Message"
            Write-Info "Exit Invoke-ModuleFunction Begin"
        }

        process {
            Write-Info "Enter Invoke-ModuleFunction Process"
            Write-Info "- Process $Message"
            Write-Info "Exit Invoke-ModuleFunction Process"
        }

        end {
            Write-Info "Enter Invoke-ModuleFunction End"
            Write-Info "- End $Message"
            Write-Info "Exit Invoke-ModuleFunction End"
        }
    }
} | Import-Module


Write-Info "Invoke Module Function" -Tag Enter, Trace

"Hello World", "Goodbye!" | Invoke-ModuleFunction

# Note this won't get printed to host when you specify -InformationAction Continue
# But it will show up if you specify -Debug
"Silence","Is Golden" | Invoke-ModuleFunction -InformationAction SilentlyContinue

Remove-Module "My Custom Module"

Write-Info "Exit $PSCommandPath" -Tag Exit, Trace