【问题标题】:Recognize the new Windows Terminal from a PowerShell script从 PowerShell 脚本识别新的 Windows 终端
【发布时间】:2019-12-13 03:14:04
【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

    标签: powershell windows-terminal


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-26
        • 2022-10-04
        • 2021-06-30
        • 2015-05-26
        • 1970-01-01
        • 2018-06-28
        • 2023-03-26
        相关资源
        最近更新 更多