获取对给定PowerShell模块的所有引用

时间:2017-06-02 15:48:20

标签: powershell

有没有办法找到引用给定模块(.psm1)的脚本文件列表?换句话说,获取脚本代码中至少使用模块中定义的一个cmdlet的所有文件。

显然,由于PowerShell 3.0及更高版本,我的大多数脚本文件都没有在代码中明确Import-Module MODULE_NAME,因此我无法使用该文本进行搜索。

我知道我可以使用Get-ChildItem -Path '...' -Recurse | Select-String 'TextToSearchFor'来搜索文件中的特定字符串,但这与搜索对模块的任何cmdlet的任何引用不同。我可以在我的模块中搜索每个cmdlet,但我想知道是否有更好的方法。

澄清:我只是在一个受控环境中查看,我将所有脚本放在一个文件位置。

1 个答案:

答案 0 :(得分:1)

根据场景的不同,callstack可能会很有趣。在这种情况下,您需要修改要查找的函数,以便在运行时收集有关callstack的信息并将其记录到某处。随着时间的推移,你可能会有足够的日志来做出一些很好的假设。

function yourfunction {
    $stack = Get-PSCallStack
    if ($stack.Count -gt 1) {
        $stack[1] # log this to a file or whatever you need
    }
}

在你的场景中,这可能根本不起作用,但我想我会把它作为一个选项放在那里。