【问题标题】:Changing the PSModulePath in Powershell 5在 Powershell 5 中更改 PSModulePath
【发布时间】:2021-04-15 15:46:04
【问题描述】:

我已使用以下方法永久更改 PSModulePath:

[Environment]::SetEnvironmentVariable('PSModulePath', "ABC", "Machine")

当我调用以下代码时,这很好用(它返回“ABC”):

[Environment]::GetEnvironmentVariable('PSModulePath', "Machine")

但是在我运行的任何 Powershell 会话中:

$env:PSModulePath

我明白了:

C:\Users\myname\Documents\WindowsPowerShell\Modules;ABC

这条路从何而来,是PS5的魔法吗?我检查了“用户”目标,这是空白的。好像有什么东西在 PSModulePath 前面加上这个默认路径?

【问题讨论】:

    标签: powershell environment-variables powershell-5.0


    【解决方案1】:

    环境驱动器Env: 包含特定于当前用户会话(source)的环境变量。它相当于Process 范围。所以

    [Environment]::GetEnvironmentVariable('PSModulePath', 'Process')
    

    应该等价于

    $env:PSModulePath
    

    Process 范围包含特定进程的环境变量。它是这样构造的 (source):

    这个变量列表继承自父进程,由 MachineUser 范围内的变量构成。

    当您检查了MachineUser 范围时,并没有找到路径,它必须来自父进程,即 PowerShell 本身。确实如此,可以阅读here

    CurrentUser 模块路径仅在用户范围 $env:PSModulePath 不存在时才作为前缀。否则,将按照定义使用用户范围 $env:PSModulePath

    正如您在问题中确认的那样,

    [Environment]::GetEnvironmentVariable('PSModulePath', 'User')
    

    为空,因此 $env:PSModulePathCurrentUser 模块路径为前缀,即 $HOME\Documents\PowerShell\Modules$HOME\Documents\WindowsPowerShell\Modules,具体取决于您的 Windows version

    您可以在我的回答 here 中阅读有关环境变量的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多