function - 获取Powershell中调用函数的名称

标签 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
}

并未导致有关“酒吧”的任何成功。
我正拼命地呼吁您的帮助。

最佳答案

在问题注释中,听起来好像是通过简化方法解决了原始问题。但是我认为我偶然发现了这个问题的答案。我在演示代码中将.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

关于function - 获取Powershell中调用函数的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44028556/

相关文章:

python - 用户定义的函数在Python中到底是如何运行的?

php - 如何使用函数名和参数作为变量来调用适当的函数? PHP

python - TypeError : NoneType, 相等则可以比较,大于则报错

JavaScript 函数未运行

powershell - 如何在 powershell 脚本中选择某些哈希表值但更改其他内联值

c# - 检查 `object[] args` 是否满足委托(delegate)实例?

c# - 通过反射调用带有可选参数的方法

powershell - 在 PowerShell 中设置(数据结构)

powershell - 使用 PowerShell 合并多个文本文件并生成一个新的单个文本文件?

mysql - 如何调用mysql中的存储过程?