【发布时间】:2021-11-11 16:23:41
【问题描述】:
背景:我们的一个团队有一个名为 Expand-Archive 的 Chocolatey 包。但是,我安装了 pscx 模块,也提供了一个 Expand-Archive cmdlet,其参数签名与内置 cmdlet 不同,并导致此软件包安装失败。解决方案是在这种重载的情况下使用模块限定名称。最终能够查看online documentation 以获取模块名称的价值。
最初,我尝试使用以下方式获取模块:
Get-Command Expand-Archive -All
但这仅列出了在 pscx 模块中找到的 cmdlet。似乎Get-Command -All 不会从尚未加载的可用模块返回命令。这对于无法自动加载但不是像Microsoft.PowerShell.Archive 这样的内置模块有点意义,这令人担忧,因为它使我无法在不先加载模块的情况下审核会话中的可用命令。
一旦我使用以下方法之一加载模块:
Microsoft.PowerShell.Archive\Expand-Archive
Import-Module Microsoft.PowerShell.Archive
Get-Command Expand-Archive -All 确实以解析顺序显示了两个定义,以及它们所属的模块。虽然这是有问题的,因为它抑制了我审核系统上可用命令的能力,在运行 Get-Command 之前无法盲目导入所有可用模块(这本身就是一个有问题的解决方案)。
问题:我怎样才能告诉Get-Command实际上检索会话可用的所有可解析命令,或通过其他方式获取此信息?由于模块是根据其功能之一的第一次使用自动导入的(something 知道该命令在未加载的模块中进行导入),我希望Get-Command 应该 能够支持这个。
【问题讨论】:
-
Get-Command Expand-Archive -Module Microsoft.PowerShell.Archive不起作用吗? -
当然,如果我提前知道模块的名称。在这种情况下,我试图找到命令所在的模块。
标签: powershell