// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Management.Automation; using System.Management.Automation.Host; using System.Management.Automation.Internal; using System.Threading; namespace Microsoft.PowerShell.ScheduledJob { /// /// This cmdlet removes ScheduledJobTriggers from ScheduledJobDefinition objects. /// [Cmdlet(VerbsCommon.Remove, "JobTrigger", DefaultParameterSetName = RemoveJobTriggerCommand.JobDefinitionParameterSet, HelpUri = "https://go.microsoft.com/fwlink/?LinkID=223914")] public sealed class RemoveJobTriggerCommand : ScheduleJobCmdletBase { #region Parameters private const string JobDefinitionParameterSet = "JobDefinition"; private const string JobDefinitionIdParameterSet = "JobDefinitionId"; private const string JobDefinitionNameParameterSet = "JobDefinitionName"; /// /// Trigger number to remove. /// [Parameter(ParameterSetName = RemoveJobTriggerCommand.JobDefinitionParameterSet)] [Parameter(ParameterSetName = RemoveJobTriggerCommand.JobDefinitionIdParameterSet)] [Parameter(ParameterSetName = RemoveJobTriggerCommand.JobDefinitionNameParameterSet)] [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] public Int32[] TriggerId { get { return _triggerIds; } set { _triggerIds = value; } } private Int32[] _triggerIds; /// /// ScheduledJobDefinition Id. /// [Parameter(Position = 0, Mandatory = true, ParameterSetName = RemoveJobTriggerCommand.JobDefinitionIdParameterSet)] [ValidateNotNullOrEmpty] [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] public Int32[] Id { get { return _definitionIds; } set { _definitionIds = value; } } private Int32[] _definitionIds; /// /// ScheduledJobDefinition Name. /// [Parameter(Position = 0, Mandatory = true, ParameterSetName = RemoveJobTriggerCommand.JobDefinitionNameParameterSet)] [ValidateNotNullOrEmpty] [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] public string[] Name { get { return _names; } set { _names = value; } } private string[] _names; /// /// ScheduledJobDefinition. /// [Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true, ParameterSetName = RemoveJobTriggerCommand.JobDefinitionParameterSet)] [ValidateNotNullOrEmpty] [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] public ScheduledJobDefinition[] InputObject { get { return _definitions; } set { _definitions = value; } } private ScheduledJobDefinition[] _definitions; #endregion #region Cmdlet Overrides /// /// Process input. /// protected override void ProcessRecord() { switch (ParameterSetName) { case JobDefinitionParameterSet: RemoveFromJobDefinition(_definitions); break; case JobDefinitionIdParameterSet: RemoveFromJobDefinition(GetJobDefinitionsById(_definitionIds)); break; case JobDefinitionNameParameterSet: RemoveFromJobDefinition(GetJobDefinitionsByName(_names)); break; } } #endregion #region Private Methods private void RemoveFromJobDefinition(IEnumerable definitions) { foreach (ScheduledJobDefinition definition in definitions) { List notFoundIds = new List(); try { notFoundIds = definition.RemoveTriggers(_triggerIds, true); } catch (ScheduledJobException e) { string msg = StringUtil.Format(ScheduledJobErrorStrings.CantRemoveTriggersFromDefinition, definition.Name); Exception reason = new RuntimeException(msg, e); ErrorRecord errorRecord = new ErrorRecord(reason, "CantRemoveTriggersFromScheduledJobDefinition", ErrorCategory.InvalidOperation, definition); WriteError(errorRecord); } // Report not found errors. foreach (Int32 idNotFound in notFoundIds) { WriteTriggerNotFoundError(idNotFound, definition.Name, definition); } } } #endregion } }