我有以下代码:
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"取得任何成功。 我正处于迫切需要你帮助的地步。
答案 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