Ответ 1
Вы можете использовать $MyInvocation
, который содержит некоторую полезную информацию о том, что в настоящее время выполняется.
function foo {
'This function is called {0}.' -f $MyInvocation.MyCommand
}
Например:
function Foo {
[string]$functionName = commandRetrievesFoo
Write-Host "This function is called $functionName"
}
Вывод:
PS > Foo
This function is called foo
Вы можете использовать $MyInvocation
, который содержит некоторую полезную информацию о том, что в настоящее время выполняется.
function foo {
'This function is called {0}.' -f $MyInvocation.MyCommand
}
Когда вы находитесь в функции, вы можете получить доступ к автоматической переменной $PSCmdLet.
Это чрезвычайно полезная переменная, которая содержит много информации о выполняющемся командлете.
В нашем сценарии нам нужно имя и определение текущей функции для некоторой рекурсии. $MyInvocation был нулевым, потому что функция находилась в модуле PowerShell.
Однако в объекте PSCmdLet есть свойство "MyInvocation", которое содержит всю необходимую информацию и позволяет запустить наш сценарий.
например. $ PSCmdlet.MyInvocation.MyCommand.Name = Имя функции $ PSCmdlet.MyInvocation.MyCommand.Definition = Определение функции
Параметр Get-PSCallStack
, кажется, работает только один раз: при вызове функции из тела script при первом получении имени script, но во второй раз он будет извлекать текст '