从PowerShell脚本识别新的Windows终端

67up9zun  于 2023-06-23  发布在  Shell
关注(0)|答案(3)|浏览(199)

我正在编写一个新的PowerShell脚本,我想使用Unicode表情符号,新的Windows终端预览版现在支持这些表情符号。但是,对于运行不支持它的“遗留”PowerShell的用户,我不希望显示无法识别的字符,而是希望向他显示一些其他文本/符号。
为了更简单-我想知道当我的PS脚本运行在新的终端和显示一件事,并显示其他PS终端的东西。
我试过使用$env:TERM_PROGRAM。如果我在vscode PS终端中使用,它会返回“vscode”,但在普通PS终端或新终端中,它不会返回任何内容。
有什么想法吗

2w2cym1i

2w2cym1i1#

Windows终端仍然处于起步阶段,没有太多的东西可以识别它,但我注意到它添加了一个环境变量WT_SESSION,你可以尝试检查一下:

if ($env:WT_SESSION) {
     "I am in Windows Terminal"
} else {
     "Nothing to see here..."
}
syqv5f0l

syqv5f0l2#

另一个不依赖于环境的答案,你可以检查终端可执行文件的进程父堆栈:

$isTerminal = {
    $p = Get-CimInstance -ClassName Win32_Process -Filter ProcessID=$PID
    while ($p) {
        ($p = Get-CimInstance -ClassName Win32_Process -Filter ProcessID=$($p.ParentProcessID) -ErrorAction Ignore)
    }
}.Invoke().Name -contains 'WindowsTerminal.exe'

这是我用来确定我是否在conemu的方法。

myzjeezk

myzjeezk3#

在CMD下:

IF DEFINED ConEmuHWND ECHO This is a ConEmu console.
IF [%ConEmuANSI%]==[ON] ECHO This ConEmu console has ANSI enabled.
IF DEFINED WT_SESSION ECHO This is a Windows Terminal.
IF [%TERM_PROGRAM%]==[Tabby] ECHO This is a Tabby console.

注意:Tabby通常总是启用ANSI。ConEmu可以在设置中禁用ANSI。
根据ZSH:

if [[ "$ConEmuBackHWND" != "" && $TERM =~ '^xterm' ]]; then echo This is a ConEmu Xterm.; fi

我在Windows终端和Tabby下没有zsh,但我假设环境变量$WT_SESSION和$TERM_PROGRAM的定义类似。你来测试。

相关问题