如何访问当前调用的 and/or 执行脚本的路径和文件名 - 使用模块内函数

How to access the path and filename of the currently called and/or executing script - utilizing an in-module function

请不要在未阅读本文其余部分的情况下立即将此标记为重复问题 post。听起来和很多其他的一样,但又不完全一样。

我已经在 google 上浏览了大约 10 个 Stack Overflow 线程 like this one and a million different results,但绝对没有任何效果符合我的预期。我开始觉得做我想做的事是不可能的。

无论如何:

我有一个辅助函数 put together here。我想在开发过程中将其用作一个不错的快捷方式。

问题是,当我从另一个脚本调用 Get-CurrentScriptInfo -All 时,返回的值是与我调用的函数对应的值,而不是调用该函数的实际脚本。我在某种程度上明白了,函数 当前的 运行 脚本...但是数据对我来说毫无用处:我不需要也不想要这些信息。我不妨粘贴 $PSCommandPath 并收工。但是我很固执。我希望它能起作用。 :)

我试过:

$MyInvocation.MyCommand.Path 
$PSCommandPath
$PSScriptRoot
((Get-Variable MyInvocation -Scope 1).Value).MyCommand.Path
$global:MyInvocation.MyCommand.Path
$script:MyInvocation.MyCommand.Path

这是一张可能更有意义的屏幕截图:

请注意,所有输出都指向我的模块定义,而不是当前执行的脚本。

我真的希望这里有人知道可以解决此限制的某种变通方法或晦涩的技术。

非常感谢任何形式的帮助或指导。

使用$PSCmdlet自动变量,可用于advanced functions:

c:\subdir\test1.psm1:

Function Get-MyPath {
    [CmdletBinding()]
    param()
    
    $PSCmdlet.MyInvocation.PSCommandPath  # Output
}

c:\test.ps1:

Import-Module .\subdir\test1.psm1 -Force
"My path: $(Get-MyPath)"

输出:

My path: C:\test.ps1