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

标签 powershell

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

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

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

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

最佳答案

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

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

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

关于powershell - 获取对给定 PowerShell 模块的所有引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44332868/

相关文章:

powershell - 如何在PowerShell中写入控制台?

powershell - Copy-Item:找不到与参数名称 'FromSession'匹配的参数

PowerShell如何添加自定义常用参数?

mysql - 将 CSV 加载到 CloudSQL

c# - 邮件在创建后过早启用 AD 帐户

.net - 使用 Powershell TOM 在 SSAS 表格中创建分区

.net - 为什么 powershell 有时会将 PSObject(而不是基础对象)传递给 .Net 代码?

powershell - 使用cmd或powershell解析和删除文本

amazon-web-services - 由于 amplify.ps1 安全问题,命令 "amplify configure"无法运行

powershell - 如何使用/不使用PowerShell的提升特权来运行exe