为什么PowerShell ISE会挂起这个C#程序?

时间:2013-04-19 21:11:28

标签: c# powershell hang powershell-ise

如果我将这个c#代码编译成EXE文件并在Windows命令shell中运行它运行正常:输出提示,在同一行等待某些用户输入,然后输入,回显该输入。在PowerShell v3 shell中运行它也运行良好。但是,如果我在PowerShell ISE V3中运行相同的EXE文件,它永远不会从Write发出输出,它会挂起ReadLine。 (另外,如果稍后跟Write,它将从WriteLine发出输出。)

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Console.Write("invisible prompt: ");
            var s = System.Console.ReadLine();
            System.Console.WriteLine("echo " + s);
        }
    }
}

这是一个ISE错误还是有一些属性可以调整以使其工作......?

3 个答案:

答案 0 :(得分:4)

ISE不支持console类。

  
      
  • 不支持[Console]类,请尝试[console] :: BackgroundColor =   '白色'。   
        
    • 通常,脚本应该使用主机API(写主机,   而不是[Console]类,以便它们在控制台中工作,   ISE,Remoting和其他炮弹。
    •   
  •   

参考:http://blogs.msdn.com/b/powershell/archive/2009/04/17/differences-between-the-ise-and-powershell-console.aspx

答案 1 :(得分:4)

作为解决方法,在powershell ise中,而不是调用.\ConsoleApplication1.exe来电start .\ConsoleApplication1.exe 这将在新的命令提示符中启动应用程序,该命令提示符将接受来自stdin的输入。

答案 2 :(得分:0)

Powershell读取主机将从控制台读取。您可以在C#中执行读取主机。 MSDN在关于Powershell托管的部分中记录了从C#执行PS命令。下面演示了使用Powershell脚本调用方法 - 应该很容易转换为C#。请注意,必须将$ host传递给C#程序。因此,您必须将C#程序作为ISE中的程序集加载并调用Main(),如:[myclass] :: Main($ host)(与将EXE作为独立程序调用)

[powershell]::create().AddScript('param($ho) $ho.ui.readline()').AddArgument($host).Invoke()