Is there a way to retrieve a PowerShell function name from within a function?
You can use $MyInvocation
which contains some useful information about what is currently executed.
function foo { 'This function is called {0}.' -f $MyInvocation.MyCommand}
When you are in a function you can access the automatic variable $PSCmdLet.
This is an extremely useful variable that holds a lot of information about the currently executing cmdlet.
In our scenario we wanted the name and the definition of the current function for some recursion. $MyInvocation was null because the function was within a PowerShell module.
However, there is a "MyInvocation" property on the PSCmdLet object which contains all the information needed and allowed our scenario to run.
e.g. $PSCmdlet.MyInvocation.MyCommand.Name = The name of the function$PSCmdlet.MyInvocation.MyCommand.Definition = The definition of the function
Easy.
function Get-FunctionName ([int]$StackNumber = 1) { return [string]$(Get-PSCallStack)[$StackNumber].FunctionName}
By default Get-FunctionName in the example will get the name of the function that called it.
Function get-foo () { Get-FunctionName}get-foo#Reutrns 'get-foo'
Increasing the StackNumber parameter will get the name of the next function call up.
Function get-foo () { Get-FunctionName -StackNumber 2}Function get-Bar () { get-foo }get-Bar #Reutrns 'get-Bar'