是否有可能伪造Windows控制台API?

Cap*_*der 11 c# powershell windows-console

我已经在c#中编写了一个ssh服务器,我认为将PowerShell作为shell连接是很好的.我已经尝试了两种方法来使其正常工作,但两者都远非完美.这是我尝试过的:

  1. 启动powershell.exe并重定向它的std(in/out).这不能很好地工作,因为powershell.exe检测到它被重定向,改变了它的行为.更重要的是,它期望stdid上的输入数据,而不是命令.所以它使用控制台api来读取命令.
  2. 在"包装器"应用程序中托管powershell.这具有能够为powershell提供"控制台"实现的优点(通过PSHostRawUserInterface).这样可以更好地工作,但您仍然可以调用命令(主要是真正的控制台应用程序),例如"... | more",希望能够使用控制台api,然后尝试从包装器进程的控制台读取.

所以我想做的是有一组函数替换控制台应用程序使用的常规控制台输入/输出函数,所以我可以处理它们.但这似乎相当激烈,以至于成为一个糟糕的设计理念(imo).

现在我的想法是通过发送具有本机/ Pinvoke函数(如WriteConsoleInput)的相关键来操纵控制台.我认为有可能以这种方式伪造控制台.但我不知道如何"读取"控制台上发生的事情.

还要记住,这是一项服务,所以最好它不应该产生一个真正的控制台窗口,尽管可能在Windows会话0中不会出现并且无关紧要.

JPB*_*anc 3

为此,您有PSSession和 Enter-PSSession CmdLet。你的 Powershell SSH 会做什么而 PSSession 不会做什么?

但如果你想这样做,这里有一个无需编写任何内容的解决方案:Using PowerShell through SSH


已编辑 2011 年 2 月 11 日

PowerShell 内部提供了另一种无需编写任何内容即可完成此操作的方法(免费供个人使用)。

Host03 示例,也许可以提供基本代码来完成您想做的事情。