这个问题与我的其他帖子-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
。
现在,当我在“控制面板”中检查环境变量时,会看到另一幅图片:
用户
系统
我什至没有$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的错误。
答案 0 :(得分:2)
PowerShell启动时,它将尝试通过以下方式set the PSModulePath
env var:
$env:PSModulePath
的现有值pwsh.exe
模块文件夹如果您在其中看到意外的值,则说明{{1}}可能只是从父进程继承而来的,它已包含在步骤1中。