我有一个Windows 服务器 2016(版本 1607,内部版本 14393)OpenSSH安装并正在运行。
最近,我注意到通过 SSH 连接时我无法再从远程客户端运行 powershell,并且不断出现错误'Powershell' is not recognized as an internal or external command, operable program or batch file
。
我也尝试通过 CMD 在本地运行它,并得到了上述相同的错误。我按照这个问题突然发现我缺少环境变量 小路到 powershell。通过添加%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\
到我的,Path
我能够再次通过 CMD 在本地运行 powershell。
但即使有了这个修复,我仍然无法在使用 SSH 连接时运行 powershell,这更奇怪,因为 SSH 连接在 Windows 中默认总是以 CMD 形式运行。
下面是我的连接过程的一个例子(从 ubuntu 16.04 终端运行):
foo@foo:~$ ssh administrator@_SERVER_IP_
administrator@_SERVER_IP_'s password:
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.
administrator@_SERVER_IP_ C:\Users\Administrator>powershell
'Powershell' is not recognized as an internal or external command, operable program or batch file.
有什么提示可能导致该问题的原因是什么?
编辑:在 SSH 上,命令的输出where powershell.exe
是INFO: Could not find files for the given pattern(s).
答案1
我设法旁路这个问题这不是一个解决办法为它。我将 OpenSSH 配置为使用 powershell 作为任何新 SSH 连接的默认 shell,而不是默认的 CMD。如果需要,我可以从 powershell 启动 cmd,尽管一旦使用 powershell 就没用了,因为它也支持每个 CMD 命令。
来自微软文档:适用于 Windows 10 1809 和 Server 2019 的 OpenSSH 服务器配置(这也适用于 Windows Server 2016)。
只需在 处创建一个注册表项HKLM:\SOFTWARE\OpenSSH
,其类型为string
,名称为DefaultShell
,值为C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
这将对任何新建立的 SSH 连接生效。
这也可以通过 powershell 命令完成:New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
再说一遍,这不是解决办法,并且仅将默认shell更改为powershell(意味着如果您默认运行第三方shell例如bash,它们将被更改为powershell)。