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



在我工作的地方,用户的文件夹被重定向到 UNC 路径以保存数据。这似乎影响了我的PowerShell,因为每次我启动Powershell时,它都会尝试从UNC路径加载模块,并且需要很长时间。这也会影响我使用 cmdlet 的方式,因为它尝试在 UNC 路径中搜索 cmdlet 上下文。

当我查看$env:PSModulePath的输出时,我可以看到 UNC 目录。但它不会显示在系统的"环境变量"对话框编辑器中。

我怎样才能摆脱它,以便Powershell不会继续从UNC目录中寻找模块支持?我知道我可以编辑现有的会话$env:PSModulePath,但我希望它永远消失。

Microsoft文档页面about_PSModulePath对此进行了解释。默认情况下,PowerShell 通过连接以下内容来生成$env:PSModulePath值:

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

您可以按如下方式找到"文档"文件夹的路径:

[Environment]::GetFolderPath('MyDocuments')

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

若要永久更改PSModulePath环境变量,可以在System.Environment类上使用 .NET 方法SetEnvironmentVariable

例:

[Environment]::SetEnvironmentVariable("PSModulePath", "Some_Path", "Machine")

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

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

我不知道为什么它没有显示在您的系统变量 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)

我解决这个问题的方法是在所有用户配置文件中设置模块路径

对我来说$PROFILE。AllUsersAllHosts 返回:
C:\Program Files\PowerShell\7\profile.ps1
我创建了该文件并添加了以下内容:

$ModulePath = "c:program filespowershell7Modules"
[Environment]::SetEnvironmentVariable("PSModulePath", $ModulePath)

从设备中删除PowerShell 7后,我遇到了同样的问题。似乎正在发生的事情是,"我的文档"的 PSModulePath 变量已从"高级系统设置"下的环境变量中删除。然后,Powershell 使用由组策略配置的 UNC 路径。

对我有用的解决方案是添加一个名为PSModulePath的新环境变量,其值为C:\Users\YourUserNameHere\Documents。现在Powershell有一个地方来寻找那些PS模块。

设置PSModulePath用户环境变量不会阻止 Powershell 在每个会话开始时自动将%userprofile%Documents添加到 PSModulePath 变量。我只能通过创建配置文件并手动覆盖那里的PSModulePath环境变量,从PSModulePath环境变量中删除我的 UNC 文档路径。

  1. 输出$profile并在该位置创建 .ps1 文件(如果不存在(
  2. 添加一行以手动将 PSModulePath 环境变量设置为正确的路径列表,排除任何有问题的 UNC 路径(例如:$Env:PSModulePath = 'C:Program FilesPowerShellModules;...'(

最新更新