Example #1
0
        private static List <ConcreteJob> GetChildJobs(List <Job> objJobs)
        {
            if (objJobs.Count == 0)
            {
                return(null);
            }

            List <ConcreteJob> childJobs = new List <ConcreteJob>();

            foreach (Job job in objJobs)
            {
                ConcreteJob childJob = new ConcreteJob();
                childJob.Id              = job.Id.ToString();
                childJob.JobState        = (ConcreteJobState)Enum.Parse(typeof(ConcreteJobState), job.JobStateInfo.State.ToString());
                childJob.ChildJobs       = null;
                childJob.Caption         = job.Name;
                childJob.Description     = job.Command;
                childJob.StartTime       = job.PSBeginTime ?? DateTime.Now;
                childJob.ElapsedTime     = job.PSEndTime ?? DateTime.Now;
                childJob.PercentComplete = (job.Progress.Count > 0) ? job.Progress[job.Progress.Count - 1].PercentComplete : -1;
                childJobs.Add(childJob);
            }

            return(childJobs);
        }
Example #2
0
        public static ConcreteJob CreateFromPSObject(Collection <PSObject> objJob)
        {
            if (objJob == null || objJob.Count == 0)
            {
                return(null);
            }

            ConcreteJob job = new ConcreteJob();

            job.Id          = objJob[0].GetProperty <int>("Id").ToString();
            job.JobState    = objJob[0].GetEnum <ConcreteJobState>("JobStateInfo");
            job.ChildJobs   = GetChildJobs(objJob[0].GetProperty <List <Job> >("ChildJobs"));
            job.Caption     = objJob[0].GetProperty <string>("Name");
            job.Description = objJob[0].GetProperty <string>("Command");
            job.StartTime   = objJob[0].GetProperty <DateTime?>("PSBeginTime") ?? DateTime.Now;
            job.ElapsedTime = objJob[0].GetProperty <DateTime?>("PSEndTime") ?? DateTime.Now;

            // PercentComplete
            job.PercentComplete = -1;
            var progress = (PSDataCollection <ProgressRecord>)objJob[0].GetProperty("Progress");

            if (progress != null && progress.Count > 0)
            {
                job.PercentComplete = progress[progress.Count - 1].PercentComplete;
            }
            else if (job.ChildJobs != null && !String.IsNullOrEmpty(job.ChildJobs[0].Id)) //ChildJobs can be get if we wrap an command in Job, and ChildJob will be a main process.
            {
                job.PercentComplete = job.ChildJobs[0].PercentComplete;                   //Important! If we wrap a command that does not have a native "asJob", we can not get the progress bar!
            }

            if (job.PercentComplete < 0) //Ok, we will make a fake progress bar.
            {
                int possibleElapseMin = 5;
                job.PercentComplete = JobFakePercentComplete(job.StartTime, possibleElapseMin);
                if (job.PercentComplete > 90)                                                                //If this is true, maybe we didn't guess with the possibleElapseMin, so double it! (:
                {
                    job.PercentComplete = JobFakePercentComplete(job.StartTime, possibleElapseMin * 2) - 10; //never show 100% >:)
                }
            }

            // Errors
            var errors = (PSDataCollection <ErrorRecord>)objJob[0].GetProperty("Error");

            if (errors != null && errors.Count > 0)
            {
                job.ErrorDescription = errors[0].ErrorDetails.Message + ". " + errors[0].ErrorDetails.RecommendedAction;
                job.ErrorCode        = errors[0].Exception != null ? -1 : 0;
            }

            return(job);
        }
Example #3
0
        public static ConcreteJob CreateFromPSObject(Collection <PSObject> objJob)
        {
            if (objJob == null || objJob.Count == 0)
            {
                return(null);
            }

            ConcreteJob job = new ConcreteJob();

            job.Id          = objJob[0].GetProperty <int>("Id").ToString();
            job.JobState    = objJob[0].GetEnum <ConcreteJobState>("JobStateInfo");
            job.Caption     = objJob[0].GetProperty <string>("Name");
            job.Description = objJob[0].GetProperty <string>("Command");
            job.StartTime   = objJob[0].GetProperty <DateTime>("PSBeginTime");
            job.ElapsedTime = objJob[0].GetProperty <DateTime?>("PSEndTime") ?? DateTime.Now;

            // PercentComplete
            job.PercentComplete = 0;
            var progress = (PSDataCollection <ProgressRecord>)objJob[0].GetProperty("Progress");

            if (progress != null && progress.Count > 0)
            {
                job.PercentComplete = progress[0].PercentComplete;
            }

            // Errors
            var errors = (PSDataCollection <ErrorRecord>)objJob[0].GetProperty("Error");

            if (errors != null && errors.Count > 0)
            {
                job.ErrorDescription = errors[0].ErrorDetails.Message + ". " + errors[0].ErrorDetails.RecommendedAction;
                job.ErrorCode        = errors[0].Exception != null ? -1 : 0;
            }

            return(job);
        }