如何确定我是否在powershell或cmd?

时间:2015-12-26 13:51:27

标签: powershell ssh cmd openssh

我一直在玩OpenSSH on Windows,看起来普通的Unix别名都缺失了。当我通过SSH登录到Windows机器时,我不确定它是启动PowerShell还是cmd。在Windows上查看当前正在运行的shell的正确方法是什么?

2 个答案:

答案 0 :(得分:7)

所有功劳都归PetSerAl所有,必须以aswer发布:

(dir 2>&1 *`|echo CMD);&<# rem #>echo PowerShell

Win32-OpenSSH范围内,此命令也有效,并输出CMD

注意:Win32-OpenSSH似乎有点受限,我的系统无法识别cd

答案 1 :(得分:1)

我想扩展@sodawillow的答案,以区分使用称为Desktop Powershell powershell.exe )和 PWSH pwsh.exe ),称为Core

(dir 2>&1 *`|echo CMD);&<# rem #>echo ($PSVersionTable).PSEdition
# Returns one of: CMD, Core, Desktop

这在未实例化的所有情况下都有效。这意味着从Python中打开默认子进程后不起作用,因为它在与Windows交互时始终使用 CMD 。这实际上是由Windows环境变量设置的:ComSpec始终指向C:\Windows\system32\cmd.exe

例如:

(从pwsh shell启动python解释器。)

>>> import os, subprocess
>>> c="(dir 2>&1 *`|echo CMD);&<# rem #>echo($PSVersionTable).PSEdition"
>>> subprocess.call(c,shell=True)
CMD

有关其他Python shell检测方案,请参见this good post


更新:2020-05-01

我设法完成了上述工作,但是在执行之前,总是总是加载powershell profile 的令人讨厌的副作用。诀窍是这样指定execute=<path-to-powershell-exe>

(启动python CLI。)

import os, subprocess
c="(dir 2>&1 *`|echo CMD);&<# rem #>echo($PSVersionTable).PSEdition"
e="C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"
subprocess.call(c, shell=True, executable=e)

# output:
# <blah blah from profile>
# Desktop
# 0

我无法规避Powershell配置文件问题。但是apparently仍在努力。请参阅herehere