public override void ExecuteCmdlet() { ListWorkItemOptions options = new ListWorkItemOptions(this.BatchContext, this.AdditionalBehaviors) { WorkItemName = this.Name, Filter = this.Filter, MaxCount = this.MaxCount }; // The enumerator will internally query the service in chunks. Using WriteObject with the enumerate flag will enumerate // the entire collection first and then write the items out one by one in a single group. Using foreach, we can take // advantage of the enumerator's behavior and write output to the pipeline in bursts. foreach (PSCloudWorkItem workItem in BatchClient.ListWorkItems(options)) { WriteObject(workItem); } }
/// <summary> /// Lists the workitems matching the specified filter options /// </summary> /// <param name="options">The options to use when querying for workitems</param> /// <returns>The workitems matching the specified filter options</returns> public IEnumerable <PSCloudWorkItem> ListWorkItems(ListWorkItemOptions options) { if (options == null) { throw new ArgumentNullException("options"); } // Get the single WorkItem matching the specified name if (!string.IsNullOrWhiteSpace(options.WorkItemName)) { WriteVerbose(string.Format(Resources.GBWI_GetByName, options.WorkItemName)); using (IWorkItemManager wiManager = options.Context.BatchOMClient.OpenWorkItemManager()) { ICloudWorkItem workItem = wiManager.GetWorkItem(options.WorkItemName, additionalBehaviors: options.AdditionalBehaviors); PSCloudWorkItem psWorkItem = new PSCloudWorkItem(workItem); return(new PSCloudWorkItem[] { psWorkItem }); } } // List WorkItems using the specified filter else { ODATADetailLevel odata = null; string verboseLogString = null; if (!string.IsNullOrEmpty(options.Filter)) { verboseLogString = Resources.GBWI_GetByOData; odata = new ODATADetailLevel(filterClause: options.Filter); } else { verboseLogString = Resources.GBWI_NoFilter; } WriteVerbose(verboseLogString); using (IWorkItemManager wiManager = options.Context.BatchOMClient.OpenWorkItemManager()) { IEnumerableAsyncExtended <ICloudWorkItem> workItems = wiManager.ListWorkItems(odata, options.AdditionalBehaviors); Func <ICloudWorkItem, PSCloudWorkItem> mappingFunction = w => { return(new PSCloudWorkItem(w)); }; return(PSAsyncEnumerable <PSCloudWorkItem, ICloudWorkItem> .CreateWithMaxCount( workItems, mappingFunction, options.MaxCount, () => WriteVerbose(string.Format(Resources.MaxCount, options.MaxCount)))); } } }
/// <summary> /// Lists the workitems matching the specified filter options /// </summary> /// <param name="options">The options to use when querying for workitems</param> /// <returns>The workitems matching the specified filter options</returns> public IEnumerable<PSCloudWorkItem> ListWorkItems(ListWorkItemOptions options) { if (options == null) { throw new ArgumentNullException("options"); } // Get the single WorkItem matching the specified name if (!string.IsNullOrWhiteSpace(options.WorkItemName)) { WriteVerbose(string.Format(Resources.GBWI_GetByName, options.WorkItemName)); using (IWorkItemManager wiManager = options.Context.BatchOMClient.OpenWorkItemManager()) { ICloudWorkItem workItem = wiManager.GetWorkItem(options.WorkItemName, additionalBehaviors: options.AdditionalBehaviors); PSCloudWorkItem psWorkItem = new PSCloudWorkItem(workItem); return new PSCloudWorkItem[] { psWorkItem }; } } // List WorkItems using the specified filter else { ODATADetailLevel odata = null; string verboseLogString = null; if (!string.IsNullOrEmpty(options.Filter)) { verboseLogString = Resources.GBWI_GetByOData; odata = new ODATADetailLevel(filterClause: options.Filter); } else { verboseLogString = Resources.GBWI_NoFilter; } WriteVerbose(verboseLogString); using (IWorkItemManager wiManager = options.Context.BatchOMClient.OpenWorkItemManager()) { IEnumerableAsyncExtended<ICloudWorkItem> workItems = wiManager.ListWorkItems(odata, options.AdditionalBehaviors); Func<ICloudWorkItem, PSCloudWorkItem> mappingFunction = w => { return new PSCloudWorkItem(w); }; return PSAsyncEnumerable<PSCloudWorkItem, ICloudWorkItem>.CreateWithMaxCount( workItems, mappingFunction, options.MaxCount, () => WriteVerbose(string.Format(Resources.MaxCount, options.MaxCount))); } } }
/// <summary> /// Waits for a recent job on a workitem and returns its name. If a previous job is specified, this method waits until a new job is created. /// </summary> public static string WaitForRecentJob(BatchController controller, BatchAccountContext context, string workItemName, string previousJob = null) { DateTime timeout = DateTime.Now.AddMinutes(2); YieldInjectionInterceptor interceptor = CreateHttpRecordingInterceptor(); BatchClientBehavior[] behaviors = new BatchClientBehavior[] { interceptor }; BatchClient client = new BatchClient(controller.BatchManagementClient, controller.ResourceManagementClient); ListWorkItemOptions options = new ListWorkItemOptions(context, behaviors) { WorkItemName = workItemName, Filter = null, MaxCount = Constants.DefaultMaxCount }; PSCloudWorkItem workItem = client.ListWorkItems(options).First(); while (workItem.ExecutionInformation.RecentJob == null || string.Equals(workItem.ExecutionInformation.RecentJob.Name, previousJob, StringComparison.OrdinalIgnoreCase)) { if (DateTime.Now > timeout) { throw new TimeoutException("Timed out waiting for recent job"); } Sleep(5000); workItem = client.ListWorkItems(options).First(); } return workItem.ExecutionInformation.RecentJob.Name; }