微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Powershell 5 中更改 PSModulePath

如何解决在 Powershell 5 中更改 PSModulePath

我已使用以下内容永久更改 PSModulePath:

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

当我调用下面的代码时它工作正常(它返回“ABC”):

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

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

$env:PSModulePath

我明白了:

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

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

解决方法

环境驱动器 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 模块路径为前缀,根据您的 Windows version$HOME\Documents\PowerShell\Modules$HOME\Documents\WindowsPowerShell\Modules

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。