我想知道如何改变我的 $profile 变量指向的位置。
PS H:\> $profile
H:\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
H:\ 是网络共享,因此当我创建我的配置文件并加载 powershell 时,我得到以下信息:
安全警告 仅运行您信任的脚本。虽然来自 Internet 的脚本很有用,但此脚本可能会损害您的计算机。是否要运行 H:\WindowsPowerShell\Microsoft.PowerShell_profile.ps1?[D] 不运行 [R] 运行一次 [S] 暂停 [?] 帮助(默认为“D”):
根据微软的说法,$profile 的位置是由 %USERPROFILE% 环境变量决定。 这不是真的:
PS H:\> $env:userprofile
C:\Users\username
例如,我有一台 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
\
以下是 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
\
由于 $profile 实际上不是由 %USERPROFILE% 决定的,我该如何更改它?显然,涉及更改 homedrive 或 homepath 的任何操作都不是我想要的解决方案。
答案1
正如@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>
以上是我的,我想你会得到类似的东西
CurrentUserAllHosts : H:\WindowsPowerShell\profile.ps1
CurrentUserCurrentHost : H:\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
为了编辑这些路径,你有两种方法
通过 regedit
Personal
编辑您将在下方找到的名称的密钥HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\用户 Shell 文件夹
通过 PowerShell
我没有测试这个,在链接的线程中,一个用户说它必须进行调整才能工作,但我想它应该很容易通过。
问题
New-ItemProperty
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders'
Personal -Value 'Your New Path Here' -Type ExpandString -Force
无论哪种方式,您都必须重新启动 Power Shell(或 Windows 终端)才能使其生效。然后,您可以使用 再次检查$profile | select *
。
答案2
你也可以查看这篇文章堆栈溢出。迄今为止提供的最佳解决方案(对于我几乎相同的问题)是将 $profile.AllUsersAllHosts 更改为“dot source”您自己选择的另一个文件。
到目前为止我还没有看到任何迹象表明您可以更改 $profile 本身的默认值。
答案3
答案4
我在 VMware Fusion 虚拟机中使用 Windows XP 和 Windows 8 时遇到了类似的问题:
PS C:> $profile
\\vmware-host\Shared Folders\<user>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
一旦我停止“桌面”镜像(我保留了共享文件夹),问题就解决了:
PS C:> $profile
C:\Documents and Settings\Administrator\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1