PowerShell ISE 无法识别$profile变量



在我的$profile目录中,我有一些自定义变量,以及默认变量,例如$root(等于"C:\"(等。我有一个自定义变量保存了桌面的文件路径,因此我可以轻松引用路径,也不必每次启动 PS 时都创建变量。如果我尝试从ISE中的$profile路径(脚本窗格和控制台(解析任何变量值,则它不起作用。但是,如果我使用常规PS终端,则可以正常工作。有什么建议或解释吗?

PowerShell ISE 使用与标准 PowerShell 会话不同的主机配置文件。默认情况下,$profile变量实际上显示CurrentUserCurrentHost配置文件的配置文件,但此变量中存储了四个配置文件位置。默认情况下,加载 PowerShell 时,这些位置中的每一个都是点源的。您可以通过键入$profile | Get-Member -MemberType NoteProperty来查看配置的配置文件总数:

  • 所有用户所有主机
  • 所有用户当前主机
  • 当前用户全部主机
  • 当前
  • 用户当前主机

在我们继续之前,让我们谈谈PowerShell Host到底是什么。从Microsoft:

主机应用程序可以定义运行命令的运行空间,在本地或远程计算机上打开会话,并根据应用程序的需要同步或异步调用命令。

因此,这意味着PowerShell Host实现了PowerShell会话。对于基本的标准主机,这可以powershell.exe,但出于多种原因,可能还有任意数量的替代应用程序或开发工具也可以实现自己的 PowerShell 主机。


无论 PowerShell 主机如何,AllHosts配置文件位置都应保持标准,但不同的 PowerShell 主机通常会为其主机设置自己的CurrentHost配置文件位置。例如,powershell.exe是它自己的 PowerShell 主机,并且将具有自己的特定于主机的配置文件,名为Microsoft.PowerShell_profile.ps1PowerShell ISE实现自己的 PowerShell 主机,并具有名为Microsoft.PowerShellISE_profile.ps1的不同特定于主机的配置文件。

如果希望配置文件中的代码与主机无关,则应确保将配置文件代码放在其中一个AllHosts配置文件中。特定于主机的代码(例如,你只想在 ISE PowerShell 主机或 VSCode PowerShell 主机的上下文中可用的代码(应进入该特定于主机的配置文件。

$profile在ISE中是不同的:

$profile
C:UsersjsDocumentsWindowsPowerShellMicrosoft.PowerShellISE_profile.ps1

安慰:

$profile
C:UsersjsDocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1

最新更新