PowerShell/src/Microsoft.PowerShell.ScheduledJob/commands/RemoveJobTrigger.cs

151 lines
5.2 KiB
C#

// 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
{
/// <summary>
/// This cmdlet removes ScheduledJobTriggers from ScheduledJobDefinition objects.
/// </summary>
[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";
/// <summary>
/// Trigger number to remove.
/// </summary>
[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;
/// <summary>
/// ScheduledJobDefinition Id.
/// </summary>
[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;
/// <summary>
/// ScheduledJobDefinition Name.
/// </summary>
[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;
/// <summary>
/// ScheduledJobDefinition.
/// </summary>
[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
/// <summary>
/// Process input.
/// </summary>
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<ScheduledJobDefinition> definitions)
{
foreach (ScheduledJobDefinition definition in definitions)
{
List<Int32> notFoundIds = new List<int>();
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
}
}