如果我将这个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错误还是有一些属性可以调整以使其工作......?
答案 0 :(得分:4)
ISE不支持console
类。
- 不支持[Console]类,请尝试[console] :: BackgroundColor = '白色'。
- 通常,脚本应该使用主机API(写主机, 而不是[Console]类,以便它们在控制台中工作, ISE,Remoting和其他炮弹。
答案 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()