有没有办法找到引用给定模块(.psm1)的脚本文件列表?换句话说,获取脚本代码中至少使用模块中定义的一个cmdlet的所有文件。
显然,由于PowerShell 3.0及更高版本,我的大多数脚本文件都没有在代码中明确Import-Module MODULE_NAME
,因此我无法使用该文本进行搜索。
我知道我可以使用Get-ChildItem -Path '...' -Recurse | Select-String 'TextToSearchFor'
来搜索文件中的特定字符串,但这与搜索对模块的任何cmdlet的任何引用不同。我可以在我的模块中搜索每个cmdlet,但我想知道是否有更好的方法。
澄清:我只是在一个受控环境中查看,我将所有脚本放在一个文件位置。
答案 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
}
}
在你的场景中,这可能根本不起作用,但我想我会把它作为一个选项放在那里。