为何通过Install-Module安装的PowerShell模块未被Get-InstalledModule列出?
这个问题的核心在于Microsoft.WinGet.Client模块的特殊定位,咱们来拆解清楚:
模块的安装逻辑特殊
Microsoft.WinGet.Client并不是托管在PowerShell Gallery的普通模块,它是Windows Package Manager(也就是咱们常说的winget)的官方PowerShell客户端。当你执行Install-Module Microsoft.WinGet.Client时,这个命令并没有走PowerShellGet的常规安装流程——它本质上是调用winget自身的机制,把模块部署到了系统级路径中,而不是由PowerShellGet来管理这个模块的生命周期。Get-InstalledModule的追踪范围有限Get-InstalledModule是PowerShellGet提供的命令,它只认那些通过PowerShellGet从PSGallery或自定义仓库安装、且被PowerShellGet记录在自身管理数据库里的模块。而Microsoft.WinGet.Client是由winget负责部署和维护的,根本没进入PowerShellGet的追踪列表,所以用这个命令自然看不到它。不同模块命令的检测逻辑差异
这就能解释为什么Get-Module -ListAvailable能找到它——这个命令是扫描系统中所有符合PowerShell模块规范的路径(包括系统级和用户级目录),只要模块有合法的psd1清单文件,就能被它检测到。而你运行Get-WinGetVersion后模块出现在Get-Module结果里,是因为这个命令触发了模块的自动加载,PowerShell会把已加载的模块记录下来。
要是你想确认它的安装路径,可以跑这条命令:
Get-Module Microsoft.WinGet.Client -ListAvailable | Select-Object Name, Path
你会发现它的路径大概率在系统级的Program Files目录下,而不是PowerShellGet默认的用户模块目录(比如C:\Users\<你的用户名>\Documents\PowerShell\Modules)。
备注:内容来源于stack exchange,提问作者Marco Eckstein

