I have a program that is calling a powershell script from an event handler. The powershell script is provided by a third party, and I do not have any control over it.
The powershell script uses the powershell progress bar. I need to read the progress of the powershell script, however because of the progress bar the System.Management.Automation namespaces do not consider this as output. Is it possible to read the value of the powershell progress bar from an external program?
Process process = new Process(); process.StartInfo.FileName = "powershell.exe"; process.StartInfo.Arguments = String.Format("-noexit -file \"{0}\"", scriptFilePath); process.Start();
You need to add an event handler for the DataAdded event to the Progress stream of your PowerShell instance:
using (PowerShell psinstance = PowerShell.Create())
{
psinstance.AddScript(@"C:\3rd\party\script.ps1");
psinstance.Streams.Progress.DataAdded += (sender,eventargs) => {
PSDataCollection<ProgressRecord> progressRecords = (PSDataCollection<ProgressRecord>)sender;
Console.WriteLine("Progress is {0} percent complete", progressRecords[eventargs.Index].PercentComplete);
};
psinstance.Invoke();
}
(you can of course substitute the lambda expression in my example with a delegate or a regular event handler should you want to)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With