我已经在c#中编写了一个ssh服务器,我认为将PowerShell作为shell连接是很好的。我已经尝试了两种方法来使其正常工作,但两者都远非完美。这是我尝试过的:
所以我想做的是有一组函数替换控制台应用程序使用的常规控制台输入/输出函数,所以我可以处理它们。但这似乎相当激烈,以至于成为一个糟糕的设计理念(imo)。
现在我的想法是通过发送具有本机/ Pinvoke函数(如WriteConsoleInput)的相关键来操纵控制台。我认为有可能以这种方式伪造控制台。但我不知道如何“读取”控制台上发生的事情。
另外请记住,这是一项服务,所以最好它不应该产生一个真正的控制台窗口,尽管可能在Windows会话0中不会出现并且无关紧要。
答案 0 :(得分:3)
为此目的,你有PSSession和Enter-PSSession CmdLet。您的Powershell SSH与PSSession没有做什么?
但如果你想这样做,这是一个没有写任何东西的解决方案:Using PowerShell through SSH
已编辑02/11/2011
PowerShell inside提供另一种方式来做任何事情而不用写任何东西(免费供个人使用)。
Host03 sample,或许可以提供基本代码来执行您要执行的操作。
答案 1 :(得分:1)
我按照JPBlanc的建议安装了PowerShellInside,但是很长时间没有使用它。一个连接的东西太局限了,我不喜欢被限制(特别是如果这个限制是以利润为基础的,那就是我不应该进行的其他讨论)。尽管是原始问题的解决方案,但它感觉不尽如人意,因为它并没有解决我遇到的编程问题。
然而,我最终设法解决了这个问题,实际上是通过在包装过程中使用windows api调用。因为存在很多陷阱,所以我决定回答我自己的问题,并让其他人在一些指针上查看相同的问题。基本结构如下:
所有这些的最终结果:Windows控制台api的包装器应用程序。包装器可以读/写重定向的stdin和stdout以与世界通信。当然,如果你想得到想象,你可以在这里使用任何流(命名为管道,tcp / ip等...)。我实现了一些xterm控制序列,并设法获得一个完全正常工作的终端包装器,它应该能够包装任何Windows控制台进程,将xterm输入转换为目标应用程序控制台输入上的输入并处理应用程序'输出到xterm控制序列。我甚至让鼠标工作。启动powershell.exe作为子进程现在解决了在ssh会话中运行powershell的原始问题。 Cmd.exe也有效。如果有人感兴趣,我会在某处发布完整的代码。