PSModulePath环境属性如何组成?

时间:2019-07-04 13:15:57

标签: powershell

这个问题与我的其他帖子-Using both desktop Powershell 5.1 and Powershell Core 6.1

有关

基本上,邪恶的根源是当我打开桌面Powershell并检查$env:PSModulePath时,我在那里看到了PS.Core模块路径。

请注意:

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Users\me> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.17763.503
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.17763.503
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1


PS C:\Users\me> $env:PSModulePath -split ';'
C:\Users\me\Documents\PowerShell\Modules
C:\Program Files\PowerShell\Modules
c:\program files\powershell\6\Modules
C:\Program Files\WindowsPowerShell\Modules
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
PS C:\Users\me>

通知c:\program files\powershell\6\Modules

现在,当我在“控制面板”中检查环境变量时,会看到另一幅图片:

用户

enter image description here

系统

enter image description here

我什至没有$PROFILE脚本:

PS C:\Users\me> Test-Path $PROFILE
False
PS C:\Users\me>

可以看到PS.Core 6.1模块路径在“控制面板”中未提及,但可以在实际的PSModulePath环境变量中找到。

所以,我的问题是-PSModulePath是如何真正组成的?

我在Microsoft文档中找不到它(我的意思是我确实发现它是一个环境变量,但是可以看到它还有更多内容)。我肯定想念一些明显的东西。

编辑1

我打开了Process Explorer,并检查了父进程的环境-explorer.exe。其PSModulePath为:

C:\Users\mkharitonov\Documents\PowerShell\Modules
C:\Program Files\PowerShell\Modules
c:\program files\powershell\6\Modules
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules

但是在杀死explorer.exe并再次运行它之后,我可以看到PS.Core模块路径消失了。因此,重新打开Powershell会显示正确的模块路径。

我想当我安装PS.Core 6.1时,它以某种方式修改了explorer.exe的环境。还是VS Code?无论如何,重新启动资源管理器可以解决该问题。

我将不得不对其进行深入研究,并打开PS.Core或VS Code的错误。

1 个答案:

答案 0 :(得分:2)

PowerShell启动时,它将尝试通过以下方式set the PSModulePath env var

  1. 从主机进程中读取$env:PSModulePath的现有值
  2. 从主机应用程序的配置中读取当前用户和所有用户的默认模块路径
  3. 如果在Windows上,请同时阅读pwsh.exe模块文件夹
  4. 通过结合所有三个来更新{{1}}的值

如果您在其中看到意外的值,则说明{{1}}可能只是从父进程继承而来的,它已包含在步骤1中。