从 PowerShell 脚本识别新的 Windows 终端
Recognize the new Windows Terminal from a PowerShell script
我正在编写一个新的 PowerShell 脚本,我想使用 unicode 表情符号,新的 Windows 终端预览现在支持这些表情符号。但是,对于不支持它的 运行 "legacy" PowerShell 用户,我不想显示无法识别的字符,而是想向他显示其他一些 text/sign.
更简单 - 我想知道我的 PS 脚本何时在新终端中 运行 并显示一件事并为其他 PS 终端显示另一件事。
我试过使用$env:TERM_PROGRAM
。如果我在 vscode PS 终端内使用它 returns "vscode",但在正常 PS 终端或新终端下它 returns 没有。
有什么想法吗?
Windows Terminal 仍处于起步阶段,识别它的方法不多,但我注意到它添加了一个环境变量 WT_SESSION,您可以尝试检查一下:
if ($env:WT_SESSION) {
"I am in Windows Terminal"
} else {
"Nothing to see here..."
}
另一个不依赖于环境的答案的替代方法,您可以检查终端可执行文件的进程父堆栈:
$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的方法。
我正在编写一个新的 PowerShell 脚本,我想使用 unicode 表情符号,新的 Windows 终端预览现在支持这些表情符号。但是,对于不支持它的 运行 "legacy" PowerShell 用户,我不想显示无法识别的字符,而是想向他显示其他一些 text/sign.
更简单 - 我想知道我的 PS 脚本何时在新终端中 运行 并显示一件事并为其他 PS 终端显示另一件事。
我试过使用$env:TERM_PROGRAM
。如果我在 vscode PS 终端内使用它 returns "vscode",但在正常 PS 终端或新终端下它 returns 没有。
有什么想法吗?
Windows Terminal 仍处于起步阶段,识别它的方法不多,但我注意到它添加了一个环境变量 WT_SESSION,您可以尝试检查一下:
if ($env:WT_SESSION) {
"I am in Windows Terminal"
} else {
"Nothing to see here..."
}
另一个不依赖于环境的答案的替代方法,您可以检查终端可执行文件的进程父堆栈:
$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的方法。