public List <PSJobHistory> GetJobHistory(string jobCollection, string job, string region, string jobStatus = "")
        {
            if (!this.AvailableRegions.Contains(region, StringComparer.OrdinalIgnoreCase))
            {
                throw new Exception(Resources.SchedulerInvalidLocation);
            }

            List <PSJobHistory> lstPSJobHistory = new List <PSJobHistory>();
            string cloudService = region.ToCloudServiceName();
            CloudServiceGetResponse csDetails = csmClient.CloudServices.Get(cloudService);

            foreach (CloudServiceGetResponse.Resource csRes in csDetails.Resources)
            {
                if (csRes.ResourceProviderNamespace.Equals(Constants.SchedulerRPNameProvider, StringComparison.InvariantCultureIgnoreCase) && csRes.Name.Equals(jobCollection, StringComparison.OrdinalIgnoreCase))
                {
                    SchedulerClient schedClient = AzureSession.ClientFactory.CreateCustomClient <SchedulerClient>(cloudService, jobCollection.Trim(), csmClient.Credentials, schedulerManagementClient.BaseUri);

                    List <JobGetHistoryResponse.JobHistoryEntry> lstHistory = new List <JobGetHistoryResponse.JobHistoryEntry>();
                    int currentTop = 100;

                    if (string.IsNullOrEmpty(jobStatus))
                    {
                        JobGetHistoryResponse history = schedClient.Jobs.GetHistory(job.Trim(), new JobGetHistoryParameters {
                            Top = 100
                        });
                        lstHistory.AddRange(history.JobHistory);
                        while (history.JobHistory.Count > 99)
                        {
                            history = schedClient.Jobs.GetHistory(job.Trim(), new JobGetHistoryParameters {
                                Top = 100, Skip = currentTop
                            });
                            currentTop += 100;
                            lstHistory.AddRange(history.JobHistory);
                        }
                    }
                    else if (!string.IsNullOrEmpty(jobStatus))
                    {
                        JobHistoryStatus      status  = jobStatus.Equals("Completed") ? JobHistoryStatus.Completed : JobHistoryStatus.Failed;
                        JobGetHistoryResponse history = schedClient.Jobs.GetHistoryWithFilter(job.Trim(), new JobGetHistoryWithFilterParameters {
                            Top = 100, Status = status
                        });
                        lstHistory.AddRange(history.JobHistory);
                        while (history.JobHistory.Count > 99)
                        {
                            history = schedClient.Jobs.GetHistoryWithFilter(job.Trim(), new JobGetHistoryWithFilterParameters {
                                Top = 100, Skip = currentTop
                            });
                            currentTop += 100;
                            lstHistory.AddRange(history.JobHistory);
                        }
                    }
                    foreach (JobGetHistoryResponse.JobHistoryEntry entry in lstHistory)
                    {
                        PSJobHistory historyObj = new PSJobHistory();
                        historyObj.Status    = entry.Status.ToString();
                        historyObj.StartTime = entry.StartTime;
                        historyObj.EndTime   = entry.EndTime;
                        historyObj.JobName   = entry.Id;
                        historyObj.Details   = GetHistoryDetails(entry.Message);
                        historyObj.Retry     = entry.RetryCount;
                        historyObj.Occurence = entry.RepeatCount;
                        if (JobHistoryActionName.ErrorAction == entry.ActionName)
                        {
                            PSJobHistoryError errorObj = historyObj.ToJobHistoryError();
                            errorObj.ErrorAction = JobHistoryActionName.ErrorAction.ToString();
                            lstPSJobHistory.Add(errorObj);
                        }
                        else
                        {
                            lstPSJobHistory.Add(historyObj);
                        }
                    }
                }
            }
            return(lstPSJobHistory);
        }