我已经在c#中编写了一个ssh服务器,并且我认为将PowerShell作为一个shell来连接是很合适的。我已经尝试了2种方法来使其正常工作,但两者都远非完美。这是我试过的:是否有可能假冒Windows控制台API?
- 启动powershell.exe并重定向它的std(进/出)。这不是 工作良好,因为powershell.exe检测到它被重定向,更改 它的行为。更重要的是,它预期输入数据在stdid上,而不是 命令。所以它使用控制台API来读取命令。
- 在“包装器”应用程序中的主机powershell。这具有 的优势,能够为PowerShell提供“控制台”实施(通过 PSHostRawUserInterface)。这样效果会更好,但仍然可以调用 命令(主要是真正的控制台应用程序),如“... | more”,期望 能够使用控制台API,并随后尝试从包装器的 控制台读取处理。
所以我想要做的是有一组函数替代控制台应用程序使用的常规控制台输入/输出功能,所以我可以处理它们。但这似乎是一个糟糕的设计理念(imo)。
现在我正在通过发送相关键与像WriteConsoleInput这样的native/Pinvoke函数来操纵控制台。我收集到可能以这种方式伪造控制台。但我不知道我会怎么“读”控制台上会发生什么。
另外请记住,这是一个服务,所以最好不应该产生一个实际的控制台窗口,尽管也许在windows会话0中不会出现并且无关紧要。
嗯,我想从我的Android移动设备上访问我的ssh。我还没有看到真正的PowerShell客户端。这个项目有一个明确的“好玩的”部分。至于Cygwin ......以及我有(可能是非理性的)问题。 –
你试试这个[PowerShellInside](http://www.powershellinside。COM/PowerShell中/ SSH/download.aspx)。它存在一个无连接的版本。 – JPBlanc
Humm,interresting发现,我会检查出来。让我想知道他们是如何解决问题的。 –