예제 #1
0
        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}");
                        }
                    }
                }
            }
        }
예제 #2
0
        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));
        }
예제 #3
0
        /// <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);
        }