Is there a way to retrieve a PowerShell function n

2019-04-18 21:18发布

For example:

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

Output:

PS > Foo
This function is called foo

4条回答
看我几分像从前
2楼-- · 2019-04-18 21:29

The Get-PSCallStack option seems to work only once: when calling a function from the body of the script, the first time it will retrieve the script name, but the second time it will retrieve the text ''

查看更多
倾城 Initia
3楼-- · 2019-04-18 21:34

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

查看更多
我欲成王,谁敢阻挡
4楼-- · 2019-04-18 21:42

You can use $MyInvocation which contains some useful information about what is currently executed.

function foo {
    'This function is called {0}.' -f $MyInvocation.MyCommand
}
查看更多
5楼-- · 2019-04-18 21:50

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'
查看更多
登录 后发表回答