首页/系统/Windows 运维速查/PSModulePath 模块搜索路径
PowerShell 基础66 条

PSModulePath 模块搜索路径

模块自动发现的目录清单:该变量被改坏后会出现“明明装了模块却找不到命令”。

Windows 运维速查系统更新于 2026-10-13

PSModulePath 是干什么的

PSModulePath 是一个用分号分隔的目录清单,PowerShell 在自动发现模块时按顺序到这些目录里找。它包含用户级目录(我的文档下的 PowerShell\Modules)、PowerShell 安装目录下的 Modules,以及系统级共享目录(Program Files 下的模块路径)。当这个变量被改坏或被覆盖,就会出现“明明装了模块却提示找不到命令”的经典故障。

基本信息

适用平台Windows PowerShell 5.1 与 PowerShell 7+(路径不同)
查看$env:PSModulePath -split ';'
默认位置$env:USERPROFILE\Documents\PowerShell\Modules、$PSHOME\Modules、Program Files 下系统模块目录
持久化[Environment]::SetEnvironmentVariable('PSModulePath', $value, 'User')

典型使用场景

  • 自研模块放哪里:放进用户级模块目录即可被自动发现
  • 排查“模块找不到”:确认路径列表是否被覆盖或缺少关键目录
  • 更换 PowerShell 版本:5.1 与 7 的模块路径不同,需要同时覆盖
  • 多版本并存:把自研模块放到共享目录供多版本共用
  • 自动化部署:安装脚本中安全地追加模块路径

常用示例

常用示例
# 查看当前搜索路径(逐行列出更直观)
$env:PSModulePath -split ';'
# 当前会话追加自研模块目录
$env:PSModulePath += ';D:\Tools\Modules'
# 确认模块目录结构是否符合约定(目录名=模块名,内含 .psd1/.psm1)
Test-Path (Join-Path $env:USERPROFILE 'Documents\PowerShell\Modules')
Get-ChildItem (Join-Path $env:USERPROFILE 'Documents\PowerShell\Modules') -Directory | Select-Object Name
# 验证模块能否被发现
Get-Module -ListAvailable | Where-Object Name -like 'MyMod*'
# 持久化(先备份原值再写)
[Environment]::SetEnvironmentVariable('PSModulePath', $env:PSModulePath + ';D:\Tools\Modules', 'User')

路径与顺序

位置典型路径优先级说明
用户模块目录%USERPROFILE%\Documents\PowerShell\Modules仅当前用户可见
PowerShell 安装目录$PSHOME\Modules随 PowerShell 版本变化
系统共享目录Program Files\PowerShell\Modules全机可用,需管理员写入
追加的自定义目录按需指定列表靠前时优先命中
同名模块在多个路径下都存在时,先匹配到列表靠前的那一个。调试“为什么加载的是旧版本”时,用 Get-Module -ListAvailable 看全部候选及版本,再看路径顺序。
追加路径只影响当前会话;要长期生效必须写环境变量。写入前先导出原值,避免把一长串路径改错后无法还原。
PSModulePath 的分隔符在 Windows 上是分号。照抄 Linux 上以冒号分隔的写法会导致整串被当成一个目录,结果是所有模块都找不到,而报错信息完全指不到这里。

易错点

  • 用赋值覆盖而不是追加:整串路径被替换,大量模块瞬间不可见
  • 分隔符用冒号:路径列表被当成单条路径,模块全部找不到
  • 只改当前会话以为永久生效:新开窗口后模块又消失
  • 把自研模块目录名与模块名写成不同:目录结构与模块发现规则不符,仍无法自动加载
  • 修改变量前不备份:改坏后要凭记忆逐个恢复路径

数据来源与参考

  • Microsoft Learn:about_PSModulePath

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌