【发布时间】:2011-12-15 15:45:50
【问题描述】:
我已经用 c# 编写了一个 ssh 服务器,我认为将 powershell 连接为 shell 会很好。我已经尝试了 2 种方法来使其正常工作,但两者都远非完美。这是我尝试过的:
- 启动 powershell.exe 并将其重定向到 std(in/out)。这不 运行良好,因为 powershell.exe 检测到它被重定向,更改 这是行为。更重要的是,它期望在 stdid 上输入数据,而不是 命令。所以它使用控制台 api 来读取命令。
- 在“包装”应用程序中托管 powershell。这样做的好处是 能够为 powershell 提供“控制台”实现(通过 PSHostRawUserInterface)。这效果更好,但您仍然可以调用 命令(主要是真正的控制台应用程序),例如“... | more”,期望 能够使用控制台 api,然后尝试从 包装进程的控制台。
所以我想做的是用一组函数替换控制台应用程序使用的常规控制台输入/输出函数,这样我就可以处理它们。但这似乎是一个糟糕的设计理念 (imo)。
现在我的想法是通过使用 WriteConsoleInput 等原生/Pinvoke 函数发送相关键来操作控制台。我认为以这种方式伪造控制台是可能的。但我不知道我会如何“阅读”控制台上发生的事情。
另外请记住,它是一项服务,因此最好不要生成实际的控制台窗口,尽管可能在 Windows 会话 0 中不会出现并且无关紧要。
【问题讨论】:
标签: c# powershell windows-console