更改 Powershell $profile 目录

Swo*_*gan 11 windows powershell user-profile

我想知道如何更改 $profile 变量指向的位置。

PS H:\> $profile
H:\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Run Code Online (Sandbox Code Playgroud)

H:\ 是网络共享,所以当我创建我的配置文件并加载 powershell 时,我得到以下信息:

安全警告只运行您信任的脚本。虽然来自 Internet 的脚本很有用,但此脚本可能会损害您的计算机。是否要运行 H:\WindowsPowerShell\Microsoft.PowerShell_profile.ps1?[D] 不运行 [R] 运行一次 [S] 暂停 [?] 帮助(默认为“D”):

根据微软的说法,$profile 的位置由 %USERPROFILE% 环境变量决定。这不是真的:

PS H:\> $env:userprofile
C:\Users\username
Run Code Online (Sandbox Code Playgroud)

例如,我有一台 XP 机器可以按照我想要的方式工作:

PS H:\> $profile
C:\Documents and Settings\username\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
PS H:\> $env:userprofile
C:\Documents and Settings\username
PS H:\> $env:homedrive
H:
PS H:\> $env:homepath
\
Run Code Online (Sandbox Code Playgroud)

这是 Vista 机器的相同输出,其中 $profile 指向错误的位置:

PS H:\> $profile
H:\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
PS H:\> $env:userprofile
C:\Users\username
PS H:\> $env:homedrive
H:
PS H:\> $env:homepath
\
Run Code Online (Sandbox Code Playgroud)

由于 $profile 实际上不是由 %USERPROFILE% 决定的,我该如何更改它?显然,任何涉及更改 homedrive 或 homepath 的事情都不是我正在寻找的解决方案。

小智 15

正如 @FrankMerrow 所发布的,在这个Stack Overflow 问题上你会找到答案,但正确的是 Neck Beard 的答案,我将把它复制到这里。

正如 @woter324 指出的那样,发布$profile | select *将向您显示 PowerShell 获取配置文件的路径。正如MS 文档中所述:

配置文件按优先顺序列出。第一个配置文件具有最高优先级。

<username>$> $profile | select *

AllUsersAllHosts       : C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
AllUsersCurrentHost    : C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts    : C:\Users\<username>\Documentos\WindowsPowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\<username>\Documentos\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Length                 : <will vary>

Run Code Online (Sandbox Code Playgroud)

以上是我的,我想你会得到类似的东西

CurrentUserAllHosts    : H:\WindowsPowerShell\profile.ps1
CurrentUserCurrentHost : H:\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Run Code Online (Sandbox Code Playgroud)

为了编辑这些路径,您有两种方法

通过注册表

编辑您在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell 文件夹Personal下找到的名称的项

通过PowerShell

我没有测试这个,在链接的线程中,用户说它必须进行调整才能工作,但我认为它应该很容易通过。

问题

New-ItemProperty 
  'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders' 
  Personal -Value 'Your New Path Here' -Type ExpandString -Force
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,您都必须重新启动 Power Shell(或 windows 终端)才能生效。然后您可以使用 再次检查$profile | select *


小智 6

我使用的是 Windows 10,也遇到了同样的问题。我能够通过更改Locationin来修复它Document Properties

我的$profile被​​ UNC 路径引用(例如\\server\path\to\my\document\WindowsPowerShell\Microsoft.PowerShell_profile.ps1)。当 Powershell 尝试执行此操作时,我收到了安全警告。

要解决此问题:

  1. 创建到网络文件夹的映射驱动器。
  2. 转至This PC该文件夹并右键单击Documents,然后选择Properties

    文件夹

  3. 将位置更新为映射的驱动器路径

    位置设置

  4. 单击“确定”或“应用”。


wot*_*324 6

我遇到了与 OP 相同的问题,并且由于严重锁定的环境,我无法更改 PS 执行策略,并且无法选择从 DFS 网络共享移动我的整个配置文件,但我需要一个$Profile.

该配置文件是从多个地方读取的,由以下人员发现:

$profile | select *
Run Code Online (Sandbox Code Playgroud)

它应该返回您的配置文件的位置,相对于您正在运行的 PowerShell 版本。

您应该能够将其放置在这些位置中的任何一个位置。有一个偏好的顺序 - 但我不记得它是什么。更重要的是,它让您可以选择本地位置,这意味着您不会遇到阻止脚本从 UNC 路径运行的问题。

对我来说,我能够将我的Microsoft.VScode_profile.ps1文件放在里面C:\Program Files\PowerShell-7.0.2-win-x64\(我运行 PS 7.0.2 的地方)。


小智 5

您也可以在Stack Overflow上查看这篇文章。迄今为止提供的最佳解决方案(对于我几乎相同的问题)是将 $profile.AllUsersAllHosts 更改为“点源”您自己选择的另一个文件。

到目前为止,我没有看到任何迹象表明您可以更改 $profile 本身的默认值。