我已經在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發現,我會檢查出來。讓我想知道他們是如何解決問題的。 –