如何从PowerShell的$env:PSModulePath中永久删除UNC路径?

2w3kk1z5  于 2022-12-13  发布在  Shell
关注(0)|答案(4)|浏览(163)

在我工作的地方,用户将他们的文件夹重定向到UNC路径以保存数据。这似乎影响了我的PowerShell,因为每次我启动powershell时,它都会尝试从UNC路径加载模块,这需要很长时间。这也影响了我使用cmdlet的方式,因为它会尝试在UNC路径中搜索cmdlet上下文。
当我查看$env:PSModulePath的输出时,我可以看到UNC目录。但是它没有显示在系统的环境变量对话框编辑器中。
我怎样才能摆脱这个问题,这样Powershell就不会一直从UNC目录中寻找模块支持了?我知道我可以编辑一个现有的会话$env:PSModulePath,但是我希望它永远消失。

yqyhoc1h

yqyhoc1h1#

Microsoft文档页面about_PSModulePath对此进行了说明。默认情况下,PowerShell通过串联以下内容来构建$env:PSModulePath值:

  • 用户的“Documents”文件夹,可能是您提到的UNC路径。
  • PSModulePath系统环境变量的内容。

您可以按如下方式找到“Documents”文件夹的路径:

[Environment]::GetFolderPath('MyDocuments')

如果除了系统环境变量PSModulePath之外,还定义了用户级环境变量PSModulePath,它将替换$env:PSModulePath中的“Documents”文件夹,该文件夹将不再包含UNC路径。

dgtucam1

dgtucam12#

要永久更改PSModulePath环境变量,可以在System.Environment类上使用.NET方法SetEnvironmentVariable
示例:
[Environment]::SetEnvironmentVariable("PSModulePath", "Some_Path", "Machine")

请记住,这将覆盖您之前在此变量上拥有的内容。因此,在运行此方法之前请确保PSModulePath肯定会有您可能需要的路径。

此外,如果您的公司使用GPO来设置PSModulePath变量,则删除UNC路径的唯一方法是与负责处理该操作的管理员联系。

fnx2tebb

fnx2tebb3#

我不知道为什么它没有显示在你的系统变量GUI中。你应该可以用下面的方法删除它:

$yourvalueyouwanttodelete = 'somepath'
$oldval = [environment]::GetEnvironmentVariable("PSModulePath")
$arr_oldval = $oldval -split ";"
$arr_newval = $arr_oldval | ? {$_ -ne $yourvalueyouwanttodelete}
$newval = $arr_newval -join ";"
[environment]::SetEnvironmentVariable("PSModulePath", $newval)
izkcnapc

izkcnapc4#

我解决这个问题的方法是在所有用户配置文件中设置模块路径
为我$PROFILE.AllUsersAllHosts返回了:
C:\程序文件\PowerShell\7\配置文件. ps1
我创建了该文件并添加了以下内容:

$ModulePath = "c:\program files\powershell\7\Modules"
[Environment]::SetEnvironmentVariable("PSModulePath", $ModulePath)

相关问题