DSInternals/Src/DSInternals.PowerShell/Commands/SetADDBDomainControllerCommand.cs
2015-12-26 23:44:43 +01:00

105 lines
3.5 KiB
C#

namespace DSInternals.PowerShell.Commands
{
using DSInternals.DataStore;
using DSInternals.PowerShell.Properties;
using System;
using System.Management.Automation;
[Cmdlet(VerbsCommon.Set, "ADDBDomainController", ConfirmImpact = ConfirmImpact.High)]
[OutputType("None")]
public class SetADDBDomainControllerCommand : ADDBCommandBase
{
private const string EpochParameterSet = "Epoch";
private const string UsnParameterSet = "USN";
[ValidateRange(DSInternals.DataStore.DomainController.UsnMinValue, DSInternals.DataStore.DomainController.UsnMaxValue)]
[Parameter(HelpMessage = "TODO", Mandatory = true, ParameterSetName = UsnParameterSet)]
[Alias("USN")]
public long HighestCommittedUsn;
[ValidateRange(DSInternals.DataStore.DomainController.EpochMinValue, DSInternals.DataStore.DomainController.EpochMaxValue)]
[Parameter(HelpMessage = "TODO", Mandatory = true, ParameterSetName = EpochParameterSet)]
[Alias("DSAEpoch")]
public int Epoch;
[Parameter(HelpMessage = "TODO")]
public SwitchParameter Force
{
get;
set;
}
protected override bool ReadOnly
{
get
{
return false;
}
}
// TODO: Extract to base
protected DirectoryAgent DirectoryAgent
{
get;
private set;
}
protected override void BeginProcessing()
{
base.BeginProcessing();
if (!Force.IsPresent)
{
// Do not continue with operation until the user enforces it.
var exception = new ArgumentException(Resources.WarningMessage);
var error = new ErrorRecord(exception, "SetADDBDomainController_ForceRequired", ErrorCategory.InvalidArgument, null);
this.ThrowTerminatingError(error);
}
try
{
this.DirectoryAgent = new DirectoryAgent(this.DirectoryContext);
}
catch (Exception ex)
{
ErrorRecord error = new ErrorRecord(ex, "TableOpenError", ErrorCategory.OpenError, null);
// Terminate on this error:
this.ThrowTerminatingError(error);
}
}
protected override void ProcessRecord()
{
try
{
switch (this.ParameterSetName)
{
case EpochParameterSet:
this.DirectoryAgent.SetDomainControllerEpoch(this.Epoch);
break;
case UsnParameterSet:
this.DirectoryAgent.SetDomainControllerUsn(this.HighestCommittedUsn);
break;
default:
// This should never happen:
throw new PSInvalidOperationException(Resources.InvalidParameterSetMessage);
}
}
catch (Exception ex)
{
var error = new ErrorRecord(ex, "SetADDBDomainController_Process", ErrorCategory.WriteError, null);
this.WriteError(error);
}
}
protected override void Dispose(bool disposing)
{
if (disposing && this.DirectoryAgent != null)
{
this.DirectoryAgent.Dispose();
this.DirectoryAgent = null;
}
base.Dispose(disposing);
}
}
}