为什么PowerShell ISE挂在这个C#程序上
本文关键字:程序上 PowerShell ISE 为什么 | 更新日期: 2023-09-27 18:10:08
如果我将这个c#代码编译成EXE文件并在Windows命令行中运行,它运行得很好:输出提示,在同一行等待一些用户输入,然后输入,并回显该输入。在PowerShell v3 shell中运行时,它也运行良好。然而,如果我在PowerShell ISE V3中运行这个相同的EXE文件,它将永远不会从Write
发出输出,并且挂在ReadLine
上。(顺便说一句,如果后面跟着WriteLine
,它将从Write
发出输出。(
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错误还是有一些属性需要调整以使其工作。。。?
ISE不支持console
类。
- 不支持[Console]类,请尝试[Console]::BackgroundColor="白色"。
- 一般来说,脚本应该使用主机API的(write-host,而不是[Console]类,以便它们在控制台中工作,ISE、Remoting等炮弹
参考:http://blogs.msdn.com/b/powershell/archive/2009/04/17/differences-between-the-ise-and-powershell-console.aspx
作为一种解决方法,在powershell ise中,不调用.'ConsoleApplication1.exe
而调用start .'ConsoleApplication1.exe
这将在一个新的命令提示符中启动应用程序,该命令提示符将接受来自stdin的输入。
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()