簡體   English   中英

獲取Powershell中調用函數的名稱

[英]Get name of invoking function in Powershell

我有以下代碼:

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
}

並未導致有關“酒吧”的任何成功。 我正拼命地呼吁您的幫助。

在問題注釋中,聽起來好像是通過簡化方法解決了原始問題。 但是我想我偶然發現了這個問題的答案。 我在演示代碼.FunctionName .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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM