如何获取用于调用 powershell 函数的原始表达式?

How do I get the original expression used to invoke a powershell function?

我将如何从函数本身中检索用于调用 Powershell 函数的 原始 表达式?如同,脚本或命令行中的表达式 typed/read。

我知道可以使用 $MyInvocation.Line 来检索调用表达式的第一 ,但是这不会正确检索多行表达式。

(This answer只检索第一行,参数,不是原始表达式)

它确实适用于调试器,但我认为您可以为此使用 Get-PSCallStack

Function Get-Something {
    Param(
        [Parameter(Mandatory = $true)]
        [String]$Param1
    )

    (Get-PSCallStack)[1].Position.Text
}

Get-Something `
1

多行调用。该函数应该 return 被调用的确切行。

注意:在函数内部,我必须引用从 Get-PSCallStack 编辑的第二个元素 return,这是因为 [0] 将是 GetPSCallStack 命令本身。所以,预先警告一下,如果嵌套得少一点,我可以看出这是挑剔的。

Get-PSCallStack Documentation