【问题标题】:Invoke Powershell with Multiple Commands AND show the Powershell window使用多个命令调用 Powershell 并显示 Powershell 窗口
【发布时间】:2018-08-18 11:21:48
【问题描述】:

在我目前正在处理的程序中,我想要运行 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 个命令并打开窗口以便看到进度?谢谢!

【问题讨论】:

  • 为什么需要 PowerShell?为什么不直接启动可执行文件?

标签: c# wpf powershell


【解决方案1】:

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

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

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

可以通过处理“Process.OutputDataReceived Event”来访问进程输出

【讨论】:

  • 基本上我正在使用我的组织使用的现有脚本,并尝试将它们的功能集成到 GUI 启动器中。有问题的脚本使用 Powershell 以给定的参数运行 DISM,并在 Powershell 窗口中显示进度。另外,如果我分别调用它们,那仍然会打开 3 个窗口,我希望它们在一个窗口中一个接一个地打开。
  • “我希望它们在一个窗口中一个接一个地走”——这有什么关系?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-11
  • 1970-01-01
  • 1970-01-01
  • 2016-05-13
  • 1970-01-01
相关资源
最近更新 更多