我想包含一些仅在VSCode内部运行时才会出现的Powershell自定义。
当在ISE或软件包管理控制台(在Visual Studio内)时,我可以使用$host.name
的值来切换行为或在“特定于主机”的powershell配置文件中包含特定代码(例如Microsoft.PowerShell_profile.ps1
)。
VSCode中的Powershell看起来与在常规控制台中运行的Powershell相同,因此大多数这些选项都不可用。无论如何都有解决方法吗?
答案 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/)。