protected override void ProcessRecord() { var baseResourceList = new List <DeploymentResource>(); var projects = new List <DashboardProjectResource>(); var environments = new List <DashboardEnvironmentResource>(); var releases = new List <ReleaseResource>(); //Using the dashboard for this because it involves only 1 API call VS calling Projects/Environmnets.FindByName() plenty of times. var rawDashboard = _connection.Repository.Dashboards.GetDashboard(); if (ProjectName == null) { projects.AddRange(rawDashboard.Projects); } else { foreach (var name in ProjectName) { var project = rawDashboard.Projects.FirstOrDefault(p => p.Name == name); if (project != null) { projects.Add(project); } else { //todo Handle this better var message = string.Format("Project not found: {0}", name); WriteObject(message); }; } } foreach (var dashboardProject in projects) { var project = _connection.Repository.Projects.Get(dashboardProject.Id); switch (ParameterSetName) { case ByVersion: foreach (var version in ReleaseVersion) { try { releases.Add(_connection.Repository.Projects.GetReleaseByVersion(project, version)); } catch (Exception e) { WriteError(new ErrorRecord(e, "ResourceNotFound", ErrorCategory.ObjectNotFound, e.Message)); } } break; case ByLatest: var projectReleases = new List <ReleaseResource>(); if (LatestReleases > 30) { projectReleases = _connection.Repository.Projects.GetAllReleases(project).ToList(); } else { projectReleases = _connection.Repository.Projects.GetReleases(project).Items.ToList(); } if (projectReleases.Count > LatestReleases) { releases.AddRange(projectReleases.GetRange(0, LatestReleases)); } else { releases.AddRange(projectReleases); } break; default: releases.AddRange(_connection.Repository.Projects.GetAllReleases(project).ToList()); break; } } if (EnvironmentName == null) { environments = rawDashboard.Environments; } else { foreach (var name in EnvironmentName) { var environment = rawDashboard.Environments.FirstOrDefault(e => e.Name == name); if (environment != null) { environments.Add(environment); } else { //todo Handle this better var message = $"Environment not found: {name}"; WriteObject(message); } } } var envIds = new HashSet <string>(environments.Select(e => e.Id)); foreach (var release in releases) { baseResourceList.AddRange(_connection.Repository.Releases.GetDeployments(release).Items.Where(d => (d.Created > After) && (d.Created < Before) && (envIds.Contains(d.EnvironmentId))).ToList()); } ResourceOnly = false; if (ResourceOnly) { WriteObject(baseResourceList); } else { var converter = new OutputConverter(); var outputList = converter.GetOctopusDeployment(baseResourceList, environments, projects, releases); WriteObject(outputList); } }