Windows Powershell $配置文件不显示真实路径

时间:2016-10-01 17:05:33

标签: powershell windows-10

我启动Windows Powershell(通过点击Windows键,输入“powershell”并按Enter键启动C:\Windows\System32\WindowsPowerShell\v1.0)并输入$profile并按Enter键并查看WindowsPowerShell\Microsoft.PowerShell_profile.ps1

据我所知,这不是一条有效的道路。我希望有类似C:\Windows\...

的东西

但是,当我输入$profile | Format-List * -Force时,会有一些进展,我会

AllUsersAllHosts       : C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
AllUsersCurrentHost    : C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts    : WindowsPowerShell\profile.ps1
CurrentUserCurrentHost : WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Length                 : 50

CurrentUserAllHostsCurrentUserCurrentHosts仍然是非路径。这些非路径是什么意思?它们是指某些隐藏的值还是我需要在某处设置一些系统值?

这是我的$PsVersionTable.PsVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      14393  206

以下是Get-Host

的结果
Name             : ConsoleHost
Version          : 5.1.14393.206
InstanceId       : a2a61a42-f2ee-46b9-b67a-ef441301bdb8
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : en-US
CurrentUICulture : en-US
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
DebuggerEnabled  : True
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

2 个答案:

答案 0 :(得分:8)

根据github上的powershell源代码,他们会查找Environment.SpecialFolder.Personal

ConsoleHost.cs开始 并且您可以将其跟踪到utils.cs,他们会拨打Environment.GetFolderPath(Environment.SpecialFolder.Personal);

答案 1 :(得分:8)

<强> TL;博士

问题可能与PowerShell无关,但可能是由于注册表 中缺少特殊文件夹路径定义。< / p>

验证注册表项HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders是否包含名为REG_EXPAND_SZ且数据为Personal的{​​{1}}值 - 请参阅下面的诊断命令。

如果您发现必须(重新)创建它,请使用:

%USERPROFILE%\Documents

然后注销并重新启动(或重启)以查看是否解决了问题。

Eris's helpful answer告诉我们 用户特定的 PS个人资料路径来自New-ItemProperty ` 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders' ` Personal -Value '%USERPROFILE%\Documents' -Type ExpandString -Force 返回的内容。

.NET可能通过SHGetKnownFolderPath Shell API函数从注册表项Environment.GetFolderPath(Environment.SpecialFolder.Personal)获取此值,值HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders,通常将其定义为Personal值包含(可扩展)字符串REG_EXPAND_SZ (还有一个传统的后备位置 - 请参阅here。)

仅包含相对路径的个人资料%USERPROFILE%\DocumentsCurrentUserAllHosts

  • CurrentUserCurrentHost
  • WindowsPowerShell\profile.ps1

建议 WindowsPowerShell\Microsoft.PowerShell_profile.ps1调用,其结果用作路径前缀,意外返回空字符串,这反过来暗示了注册表问题

以下是一些诊断命令及其预期输出(Environment.GetFolderPath(Environment.SpecialFolder.Personal)代表您的用户名):

jdoe