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); }
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); }
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); }