我用 C# 编写了一个 ssh 服务器,我认为将 powershell 作为 shell 连接起来会很漂亮。我尝试了两种方法来使其正常工作,但这两种方法都远非完美。这是我尝试过的:
- 启动 powershell.exe 并将其重定向到 std(in/out)。这不
工作良好,因为 powershell.exe 检测到它被重定向,发生变化
这是行为。更重要的是,它期望 stdid 上的输入数据,而不是
命令。所以它使用控制台api来读取命令。
- 在“包装”应用程序中托管 powershell。这样做的好处是
能够为 powershell 提供“控制台”实现(通过
PSHostRawUserInterface)。这效果更好,但您仍然可以调用
命令(主要是真正的控制台应用程序),例如“... | more”,期望
能够使用控制台 api,然后尝试从
包装器进程的控制台。
所以我想做的是用一组函数替换控制台应用程序使用的常规控制台输入/输出函数,这样我就可以处理它们。但这似乎相当激烈,以至于成为一个糟糕的设计理念(我认为)。
现在,我的想法是通过使用 WriteConsoleInput 等本机/Pinvoke 函数发送相关键来操作控制台。我猜想也许可以通过这种方式伪造控制台。但我不知道如何“读取”控制台上发生的情况。
另请记住,它是一项服务,因此最好不要生成实际的控制台窗口,尽管可能在 Windows 会话 0 中不会显示并且无关紧要。
你有PS会话 http://technet.microsoft.com/en-us/library/dd347706.aspx为此,请使用 Enter-PSSession CmdLet。你的 Powershell SSH 会做什么而 PSSession 不会做什么?
但如果你想这样做,这里有一个无需编写任何内容的解决方案:通过 SSH 使用 PowerShell http://hivearchive.com/2006/07/03/using-powershell-through-ssh/
已编辑 2011 年 2 月 11 日
内部 PowerShell http://www.powershellinside.com/powershell/ssh/download.aspx提供另一种无需编写任何内容的方法(免费供个人使用)。
Host03样本 http://msdn.microsoft.com/en-us/library/windows/desktop/ee706577%28v=VS.85%29.aspx,也许可以提供基本代码来完成您想做的事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)