PowerShell ISE无法识别$profile变量

PowerShell ISE无法识别$profile变量,powershell,scripting,environment-variables,powershell-5.0,Powershell,Scripting,Environment Variables,Powershell 5.0,在我的$profile目录中,我有一些自定义变量,以及默认变量,例如$root(等于“C:\”)等。我有一个自定义变量保存到桌面的文件路径,因此我可以轻松地引用路径,而且也不必每次启动PS时都创建变量。如果我试图从ISE中的$profile路径(脚本窗格和控制台)解析任何变量值,它将不起作用。但是,如果我使用常规的PS终端,它的工作没有问题。有什么建议或解释吗?$profile在ISE中不同: $profile C:\Users\js\Documents\WindowsPowerShell\Mi

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

$profile在ISE中不同:

$profile
C:\Users\js\Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1
控制台:

$profile
C:\Users\js\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

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

  • 冲积物
  • 冲积层
  • CurrentUserAllHosts
  • CurrentUserCurrentHost

在我们继续之前,让我们先谈谈什么是PowerShell主机。发件人:

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

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


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


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

感谢您提供的详细信息!我可以确认这是我的问题。
$profile
是一个
系统。String
,添加了
NoteProperty
属性,这有点奇怪。如果您不知道
$profile
上的
NoteProperty
属性,并且没有阅读
关于\u Profiles
文档,您可能永远不会意识到在PowerShell会话中可以使用多个配置文件位置。