如何在VSCode集成终端内部运行时自定义PowerShell?

时间:2018-01-29 23:51:31

标签: powershell visual-studio-code

我想包含一些仅在VSCode内部运行时才会出现的Powershell自定义。

当在ISE或软件包管理控制台(在Visual Studio内)时,我可以使用$host.name的值来切换行为或在“特定于主机”的powershell配置文件中包含特定代码(例如Microsoft.PowerShell_profile.ps1 )。

VSCode中的Powershell看起来与在常规控制台中运行的Powershell相同,因此大多数这些选项都不可用。无论如何都有解决方法吗?

4 个答案:

答案 0 :(得分:4)

另见Visual Studio Code $psise equivalent

您可以检查$ psISE,如果它不存在,请尝试$context = [Microsoft.Powershell.EditorServices.Extensions.EditorContext]$psEditor.GetEditorContext(),但请注意,这将投入ISE。

我在很多脚本中使用这个片段,所以我总是可以引用" $ root"。

# Makes debugging from ISE easier.
if ($PSScriptRoot -eq "")
{
    if ($psISE)
    {
        $root = Split-Path -Parent $psISE.CurrentFile.FullPath
    }
    else
    {
        $context = $psEditor.GetEditorContext()
        $root = Split-Path -Parent $context.CurrentFile.Path
    }
}
else
{
    $root = $PSScriptRoot
}

答案 1 :(得分:3)

您可以检查是否存在VSCode特定的环境变量:

if((Test-Path env:\VSCODE_PID) -or ($env:TERM_PROGRAM -eq 'vscode')){
  # Running from Vistual Studio Code
}

答案 2 :(得分:3)

VSCode在其集成终端中将TERM_PROGRAM环境变量设置为vscode,因此您可以使用以下测试,无论是否安装了PowerShell扩展,该测试均有效:

$runningInVsCode = $env:TERM_PROGRAM -eq 'vscode'

答案 3 :(得分:1)

您可以尝试检查是否有VSCode上下文。最简单的方法是测试当前的VSCode进程ID。

if ($Env:VSCODE_PID) {  }

ISE拥有自己的个人资料(https://blogs.technet.microsoft.com/heyscriptingguy/2012/05/21/understanding-the-six-powershell-profiles/)。