在我正在进行的程序中,我有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个命令并打开窗口以便可以看到进度?谢谢!
答案 0 :(得分:0)
我的建议与比尔的评论相似。我认为调用PowerShell来运行可执行文件会给应用程序带来不必要的开销。
您可以使用System.Diagnostics.Process
对象运行命令。
如果您想创建一个输出窗口,可以在其中创建一个带有多行文本框控件的窗口,并将命令的任何输出重定向到该窗口。
可以通过处理“Process.OutputDataReceived Event”
来访问流程输出