5

如果我将此 c# 代码编译为 EXE 文件并在 Windows 命令外壳中运行,它运行良好:输出提示,在同一行等待某些用户输入,然后输入,回显该输入。在 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 错误还是有一些属性需要调整以使其工作......?

4

3 回答 3

4

ISE 不支持console该类。

  • 不支持 [Console] 类,尝试 [console]::BackgroundColor = 'white'。
    • 通常,脚本应该使用主机 API(write-host,而不是 [Console] 类,以便它们在控制台、ISE、Remoting 和其他 shell 中工作。

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

于 2013-04-19T23:26:50.200 回答
4

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

于 2013-12-19T17:14:04.970 回答
0

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

[powershell]::create().AddScript('param($ho) $ho.ui.readline()').AddArgument($host).Invoke()
于 2013-06-26T05:31:39.983 回答