5

我正在编写一个新的 PowerShell 脚本,并且我想使用新的 Windows 终端预览版现在支持的 unicode 表情符号。但是,对于运行不支持它的“旧版”PowerShell 的用户,我不希望显示无法识别的字符,而是希望向他显示一些其他文本/符号。

更简单地说 - 我想知道我的 PS 脚本何时在新终端中运行并显示一件事并为其他 PS 终端显示其他内容。

我试过使用$env:TERM_PROGRAM. 如果我使用的是在 vscode PS 终端内,它会返回“vscode”,但在普通 PS 终端或新终端下它什么也不返回。

有任何想法吗?

4

2 回答 2

6

Windows Terminal 仍处于起步阶段,识别它的方法不多,但我注意到它添加了一个环境变量 WT_SESSION,您可以尝试检查一下:

if ($env:WT_SESSION) {
     "I am in Windows Terminal"
} else {
     "Nothing to see here..."
}
于 2019-08-05T16:16:56.563 回答
3

在不依赖环境的情况下替代其他答案,您可以检查终端可执行文件的进程父堆栈:

$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 中的一种方法。

于 2019-08-05T16:57:55.727 回答