获取Powershell中调用函数的名称

时间:2017-05-17 15:04:19

标签: function powershell invoke

我有以下代码:

function foo () {
    $sb = (Get-Command bar -CommandType Function).ScriptBlock
    Invoke-Command -ScriptBlock $sb
}

function bar () {
    demo
}

function demo () {
    Write-Host $((Get-PSCallStack)[0].Command)
    Write-Host $((Get-PSCallStack)[1].Command)
}

foo

结果是:

foo
demo

我想要的是:

bar
demo

问题似乎是在函数foo中我通过使用Invoke-Command cmdlet调用函数栏,而powershell将其视为demo的调用函数。根据我的理解,功能栏是调用demo而不是foo。

我无法弄清楚为什么powershell会采用这种方式,以及如何达到PowerShell向我返回功能名称" bar"。 甚至我的想法是傻瓜" powershell说:

function bar () {
    $sb = (Get-Command demo -CommandType Function).ScriptBlock
    Invoke-Command -ScriptBlock $sb
}

并未导致" bar"取得任何成功。 我正处于迫切需要你帮助的地步。

1 个答案:

答案 0 :(得分:0)

在问题评论中,听起来原始问题是通过简化方法解决的。但我想我偶然发现了这个问题的答案。我在演示代码中将.Command更改为.FunctionName

function foo () {
    $sb = (Get-Command bar -CommandType Function).ScriptBlock
    Invoke-Command -ScriptBlock $sb
}

function bar () {
    demo
}

function demo () {
    Write-Host $((Get-PSCallStack)[0].FunctionName)
    Write-Host $((Get-PSCallStack)[1].FunctionName)
}

foo

现在输出会根据需要显示bar(而不是foo):

demo
bar