使用多个命令调用Powershell并显示Powershell窗口

时间:2018-03-09 20:03:46

标签: c# wpf powershell

在我正在进行的程序中,我有3个Powershell命令要运行并打开Powershell窗口,以便您可以看到进度。第一个是现有的ps1文件,我按如下方式运行:

ProcessStartInfo runner = new ProcessStartInfo("powershell")
{
    Arguments = $@"-ExecutionPolicy Bypass -NoProfile -File ""{scriptPath}"""
};
Process cmd = Process.Start(runner);

我执行下一部分的代码块在执行时没有显示窗口:

var ps = PowerShell.Create();

string[] msuFiles = Directory.GetFiles(path, "*.msu");
foreach (var item in msuFiles)
{
    ps.AddScript($@"DISM.exe /Online /Add-Package /PackagePath:""{item}"" /NoRestart");
}

string[] cabFiles = Directory.GetFiles(path, "*.cab");
foreach (var item in cabFiles)
{
    ps.AddScript($@"DISM.exe /Online /Add-Package /PackagePath:""{item}"" /NoRestart");
}

ps.Invoke();

如果没有像第一部分一样重写第二部分,是否有办法在单个Powershell实例中运行所有3个命令并打开窗口以便可以看到进度?谢谢!

1 个答案:

答案 0 :(得分:0)

我的建议与比尔的评论相似。我认为调用PowerShell来运行可执行文件会给应用程序带来不必要的开销。

您可以使用System.Diagnostics.Process对象运行命令。

如果您想创建一个输出窗口,可以在其中创建一个带有多行文本框控件的窗口,并将命令的任何输出重定向到该窗口。

可以通过处理“Process.OutputDataReceived Event

来访问流程输出