如何判断我当前的PowerShell会话是否通过SSH



我正在自定义我的PowerShell提示,我希望它在当前会话通过SSH时显示一个特殊的图标。

具体来说,我希望我的提示指示器有一架小飞机:

c:foo> # connected to my local machine
c:foo>ssh remote
#...
c:bar✈> # connected to remote!

我在本地和远程机器之间使用相同的提示。

如何检测给定会话是远程/通过SSH的?

免责声明:我在微软工作

我没有任何远程连接的通用解决方案,但如果您有远程SSH会话,则会设置SSH_CLIENTSSH_CONNECTION环境变量:

>dir env:*ssh*
Name                           Value
----                           -----
SSH_CONNECTION                 [redacted]
SSH_CLIENT                     [redacted]

因此,您可以在提示中测试该变量的存在性!

function Test-IsRemote {
[CmdletBinding()]
param()
return Test-Path env:SSH_CLIENT;
}
# ... in your prompt:
if (Test-IsRemote) {
Microsoft.PowerShell.UtilityWrite-Host "✈ " -NoNewLine -ForegroundColor "DarkGray"
}
# ...
Microsoft.PowerShell.UtilityWrite-Host ">" -NoNewLine -ForegroundColor "DarkGray"

这在定制ZSH提示的指南中有参考:

注意:当您经常有多个终端窗口对不同的主机打开时,提示中的主机名是有用的。这是真的,但是提示是由远程shell及其在远程主机上的配置文件定义的。在配置文件中,您可以测试是否设置了SSH_CLIENT变量,并为远程会话显示不同的提示。在远程shell会话中有更多显示主机的方法,例如在终端窗口标题栏中或使用不同的窗口背景色。

最新更新