在我的$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.ps1
。PowerShell 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