You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何列出PowerShell中所有重载Cmdlet(含未加载模块提供的命令)

PowerShell查询未加载模块同名命令的解决方案

默认情况下,Get-Command -All仅扫描已导入到当前会话的模块命令,当会话中已存在同名命令时,会自动跳过未加载模块的同名命令搜索,这是PowerShell为了提升检索效率做的默认优化,并非功能缺陷。

方案1:强制扫描所有可用模块(无需提前导入)

在PowerShell 5.1及更高版本中,给Get-Command加上-ListImported:$false参数,即可强制检索系统所有已注册模块中的匹配命令,不受当前已加载模块限制:

Get-Command Expand-Archive -All -ListImported:$false

执行后会按优先级返回所有模块下的Expand-Archive命令,包含未加载的内置模块命令。

方案2:指定模块范围检索

如果需要定向检索特定前缀的模块(比如系统内置模块),可以通过-Module参数指定通配符范围,无需全量扫描:

# 检索所有微软官方内置模块中的Expand-Archive命令
Get-Command Expand-Archive -All -Module Microsoft.PowerShell.*

方案3:全量审计系统所有可用命令(零模块加载)

如果需要审计系统上所有可用的命令,不想提前导入任何模块,可以直接读取所有模块的导出命令清单:

# 遍历所有已注册的可用模块,读取导出命令,无需加载模块
Get-Module -ListAvailable | ForEach-Object {
    $_.ExportedCommands.Values
} | Where-Object Name -eq 'Expand-Archive'

该方法适合批量排查命令冲突、审计系统命令清单的场景,不会对当前会话产生任何副作用。

Chocolatey包冲突问题的最优修复方案

为了彻底避免第三方模块重载导致的命令冲突,所有公开分发的PowerShell脚本/包,建议统一使用模块限定名调用内置命令:

# 直接指定模块名调用,完全忽略会话命令优先级影响
Microsoft.PowerShell.Archive\Expand-Archive -Path $zipPath -DestinationPath $outputPath

不需要提前导入对应模块,PowerShell会在首次调用时自动加载对应模块,彻底解决同名命令冲突问题。

内容的提问来源于stack exchange,提问作者codewario

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:42:03