Есть ли способ получить имя функции PowerShell из функции?

Например:

function Foo { 
    [string]$functionName = commandRetrievesFoo
    Write-Host "This function is called $functionName"
}

Вывод:

PS > Foo
This function is called foo

Ответы

Ответ 1

Вы можете использовать $MyInvocation, который содержит некоторую полезную информацию о том, что в настоящее время выполняется.

function foo {
    'This function is called {0}.' -f $MyInvocation.MyCommand
}

Ответ 2

Когда вы находитесь в функции, вы можете получить доступ к автоматической переменной $PSCmdLet.

Это чрезвычайно полезная переменная, которая содержит много информации о выполняющемся командлете.

В нашем сценарии нам нужно имя и определение текущей функции для некоторой рекурсии. $MyInvocation был нулевым, потому что функция находилась в модуле PowerShell.

Однако в объекте PSCmdLet есть свойство "MyInvocation", которое содержит всю необходимую информацию и позволяет запустить наш сценарий.

например. $ PSCmdlet.MyInvocation.MyCommand.Name = Имя функции $ PSCmdlet.MyInvocation.MyCommand.Definition = Определение функции

Ответ 3

Параметр Get-PSCallStack, кажется, работает только один раз: при вызове функции из тела script при первом получении имени script, но во второй раз он будет извлекать текст '