public static void DumpDetection(CyCmdlet cmdlet, CyDetection d) { cmdlet.WriteLine("-------------------------------------------------------------------------------------------------------------"); cmdlet.Write("Detection "); cmdlet.WriteLineHL($"'{d.DetectionRule.Name}' (v{d.DetectionRule.Version}) [{d.PhoneticId}]"); if (d.ArtifactsOfInterest != null) { cmdlet.Write("State progression from artifacts: "); cmdlet.WriteLineHL($"{string.Join(" > ", d.ArtifactsOfInterest.Keys)}"); cmdlet.WriteLine("Raw artifacts: "); foreach (var a in d.AssociatedArtifacts) { cmdlet.WriteLine($"{a}"); } if (d.ArtifactsOfInterest != null) { foreach (var state in d.ArtifactsOfInterest.Keys) { cmdlet.Write("Collected artifacts for state: "); cmdlet.WriteLineHL($"{state}"); foreach (var collected_artifact in d.ArtifactsOfInterest[state]) { cmdlet.WriteLine( $"{d.ResolveArtifactReference(collected_artifact.Artifact)} of type {d.ResolveArtifactReference(collected_artifact.Artifact).ArtifactType}, source {collected_artifact.Source}"); } } } } }
public static void BlockWithProgress(CyCmdlet cmdlet, List <Task> tasks, int activityKey, string activity, string statusDescription) { var progressInfoCalculator = new PowershellProgressInfoCalculator(activityKey, activity, tasks); do { progressInfoCalculator.CalculateProgress(); progressInfoCalculator.WriteProgress(cmdlet); Task.Delay(100).Wait(); cmdlet.Logger.FlushLogsToPowershellConsole(); } while (!tasks.TrueForAll(x => x.IsCompleted)); }
/// <summary> /// Shows a progress indicator while waiting for a set of asynchronous tasks to complete. /// </summary> /// <typeparam name="T">Type of result for the tasks</typeparam> /// <param name="cmdlet">cmdlet to display progress information</param> /// <param name="tasks">Tasks to wait for completion</param> /// <param name="activityKey">PSCmdlet acitivity key</param> /// <param name="activity">Activity "headline"</param> /// <param name="statusDescription">Status description</param> public static void WaitForTasksToCompleteWithProgress2 <T>(CyCmdlet cmdlet, List <Task <T> > tasks, int activityKey, string activity, string statusDescription) { var p = new System.Management.Automation.ProgressRecord(activityKey, activity, statusDescription); int c; int t; do { c = tasks.Where(task => task.IsCompleted).Count(); t = tasks.Count; p.PercentComplete = (int)(c * 100f / t); cmdlet.WriteProgress(p); Thread.Sleep(20); cmdlet.Logger.FlushLogsToPowershellConsole(); } while (c < t); }