【问题标题】:PowerShell ISE not recognizing $profile variablesPowerShell ISE 无法识别 $profile 变量
【发布时间】:2020-05-03 15:21:45
【问题描述】:

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

【问题讨论】:

    标签: powershell scripting environment-variables powershell-5.0


    【解决方案1】:

    $profile 在 ISE 中有所不同:

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

    控制台:

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

    【讨论】:

      【解决方案2】:

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

      • AllUsersAllHosts
      • AllUsersCurrentHost
      • CurrentUserAllHosts
      • CurrentUserCurrentHost

      在继续之前,让我们先谈谈PowerShell 主机 的真正含义。来自Microsoft

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

      这意味着 PowerShell 主机实现了 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 主机的上下文中可用的东西,应该进入该主机特定的配置文件。

      【讨论】:

      • 感谢您提供的详细程度!可以确认这是我的问题。
      • IMO 有点奇怪 $profileSystem.String,并添加了 NoteProperty 属性。如果您不了解$profile 上的那些NoteProperty 属性,并且没有阅读about_Profiles 文档,您可能永远不会意识到可以在PowerShell 会话中使用多个配置文件位置。
      猜你喜欢
      • 2020-11-28
      • 1970-01-01
      • 2014-01-20
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      • 2013-05-15
      • 2014-07-08
      • 1970-01-01
      相关资源
      最近更新 更多