216 lines
No EOL
6.9 KiB
C#
216 lines
No EOL
6.9 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
|
|
using System;
|
|
using System.Management.Automation;
|
|
|
|
namespace ExperimentalFeatureTest
|
|
{
|
|
#region "Replace existing cmdlet"
|
|
|
|
[Experimental("ExpTest.FeatureOne", ExperimentAction.Hide)]
|
|
[Cmdlet("Invoke", "AzureFunctionCSharp")]
|
|
public class InvokeAzureFunctionCommand : PSCmdlet
|
|
{
|
|
[Parameter]
|
|
public string Token { get; set; }
|
|
|
|
[Parameter]
|
|
public string Command { get; set; }
|
|
|
|
protected override void EndProcessing()
|
|
{
|
|
WriteObject("Invoke-AzureFunction Version ONE");
|
|
}
|
|
}
|
|
|
|
[Experimental("ExpTest.FeatureOne", ExperimentAction.Show)]
|
|
[Cmdlet("Invoke", "AzureFunctionCSharp")]
|
|
public class InvokeAzureFunctionCommandV2 : PSCmdlet
|
|
{
|
|
[Parameter(Mandatory = true)]
|
|
public string Token { get; set; }
|
|
|
|
[Parameter(Mandatory = true)]
|
|
public string Command { get; set; }
|
|
|
|
protected override void EndProcessing()
|
|
{
|
|
WriteObject("Invoke-AzureFunction Version TWO");
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region "Make parameter set experimental"
|
|
|
|
[Cmdlet("Get", "GreetingMessageCSharp", DefaultParameterSetName = "Default")]
|
|
public class GetGreetingMessageCommand : PSCmdlet
|
|
{
|
|
[Parameter(Mandatory = true)]
|
|
public string Name { get; set; }
|
|
|
|
[Parameter("ExpTest.FeatureOne", ExperimentAction.Show, ParameterSetName = "SwitchOneSet")]
|
|
public SwitchParameter SwitchOne { get; set; }
|
|
|
|
[Parameter("ExpTest.FeatureOne", ExperimentAction.Show, ParameterSetName = "SwitchTwoSet")]
|
|
public SwitchParameter SwitchTwo { get; set; }
|
|
|
|
protected override void EndProcessing()
|
|
{
|
|
string message = $"Hello World {Name}.";
|
|
if (ExperimentalFeature.HasEnabled("ExpTest.FeatureOne"))
|
|
{
|
|
if (SwitchOne.IsPresent) { message += "-SwitchOne is on."; }
|
|
if (SwitchTwo.IsPresent) { message += "-SwitchTwo is on."; }
|
|
}
|
|
WriteObject(message);
|
|
}
|
|
}
|
|
|
|
[Cmdlet("Invoke", "MyCommandCSharp")]
|
|
public class InvokeMyCommandCommand : PSCmdlet
|
|
{
|
|
[Parameter(Mandatory = true, ParameterSetName = "ComputerSet")]
|
|
public string UserName { get; set; }
|
|
|
|
[Parameter(Mandatory = true, ParameterSetName = "ComputerSet")]
|
|
public string ComputerName { get; set; }
|
|
|
|
[Parameter(Mandatory = true, ParameterSetName = "VMSet")]
|
|
public string VMName { get; set; }
|
|
|
|
// Enable web socket only if the feature is turned on.
|
|
[Parameter("ExpTest.FeatureOne", ExperimentAction.Show, Mandatory = true, ParameterSetName = "WebSocketSet")]
|
|
public string Token { get; set; }
|
|
|
|
[Parameter("ExpTest.FeatureOne", ExperimentAction.Show, Mandatory = true, ParameterSetName = "WebSocketSet")]
|
|
public string WebSocketUrl { get; set; }
|
|
|
|
// Add -ConfigurationName to parameter set "WebSocketSet" only if the feature is turned on.
|
|
[Parameter(ParameterSetName = "ComputerSet")]
|
|
[Parameter("ExpTest.FeatureOne", ExperimentAction.Show, ParameterSetName = "WebSocketSet")]
|
|
public string ConfigurationName { get; set; }
|
|
|
|
// Add -Port to parameter set "WebSocketSet" only if the feature is turned on.
|
|
[Parameter(ParameterSetName = "VMSet")]
|
|
[Parameter("ExpTest.FeatureOne", ExperimentAction.Show, ParameterSetName = "WebSocketSet")]
|
|
public int Port { get; set; }
|
|
|
|
[Parameter]
|
|
public int ThrottleLimit { get; set; }
|
|
|
|
[Parameter]
|
|
public string Command { get; set; }
|
|
|
|
protected override void EndProcessing()
|
|
{
|
|
switch (this.ParameterSetName)
|
|
{
|
|
case "ComputerSet": WriteObject("Invoke-MyCommand with ComputerSet"); break;
|
|
case "VMSet": WriteObject("Invoke-MyCommand with VMSet"); break;
|
|
case "WebSocketSet": WriteObject("Invoke-MyCommand with WebSocketSet"); break;
|
|
default: break;
|
|
}
|
|
}
|
|
}
|
|
|
|
[Cmdlet("Test", "MyRemotingCSharp")]
|
|
public class TestMyRemotingCommand : PSCmdlet
|
|
{
|
|
// Replace one parameter with another one when the feature is turned on.
|
|
[Parameter("ExpTest.FeatureOne", ExperimentAction.Hide)]
|
|
public string SessionName { get; set; }
|
|
|
|
[Parameter("ExpTest.FeatureOne", ExperimentAction.Show)]
|
|
public string ComputerName { get; set; }
|
|
|
|
protected override void EndProcessing() { }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region "Use 'Experimental' attribute on parameters"
|
|
|
|
[Cmdlet("Save", "MyFileCSharp")]
|
|
public class SaveMyFileCommand : PSCmdlet
|
|
{
|
|
[Parameter(ParameterSetName = "UrlSet")]
|
|
public SwitchParameter ByUrl { get; set; }
|
|
|
|
[Parameter(ParameterSetName = "RadioSet")]
|
|
public SwitchParameter ByRadio { get; set; }
|
|
|
|
[Parameter]
|
|
public string FileName { get; set; }
|
|
|
|
[Experimental("ExpTest.FeatureOne", ExperimentAction.Show)]
|
|
[Parameter]
|
|
public string Destination { get; set; }
|
|
|
|
[Experimental("ExpTest.FeatureOne", ExperimentAction.Hide)]
|
|
[Parameter(ParameterSetName = "UrlSet")]
|
|
[Parameter(ParameterSetName = "RadioSet")]
|
|
public string Configuration { get; set; }
|
|
|
|
protected override void EndProcessing() { }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region "Dynamic parameters"
|
|
|
|
public class DynamicParamOne
|
|
{
|
|
[Parameter("ExpTest.FeatureOne", ExperimentAction.Show)]
|
|
[ValidateNotNullOrEmpty]
|
|
public string ConfigFile { get; set; }
|
|
|
|
[Parameter("ExpTest.FeatureOne", ExperimentAction.Hide)]
|
|
[ValidateNotNullOrEmpty]
|
|
public string ConfigName { get; set; }
|
|
}
|
|
|
|
[Cmdlet("Test", "MyDynamicParamOneCSharp")]
|
|
public class TestMyDynamicParamOneCommand : PSCmdlet, IDynamicParameters
|
|
{
|
|
[Parameter(Position = 0)]
|
|
public string Name { get; set; }
|
|
|
|
public object GetDynamicParameters()
|
|
{
|
|
return Name == "Joe" ? new DynamicParamOne() : null;
|
|
}
|
|
|
|
protected override void EndProcessing() { }
|
|
}
|
|
|
|
public class DynamicParamTwo
|
|
{
|
|
[Experimental("ExpTest.FeatureOne", ExperimentAction.Show)]
|
|
[Parameter()]
|
|
[ValidateNotNullOrEmpty]
|
|
public string ConfigFile { get; set; }
|
|
|
|
[Experimental("ExpTest.FeatureOne", ExperimentAction.Hide)]
|
|
[Parameter()]
|
|
[ValidateNotNullOrEmpty]
|
|
public string ConfigName { get; set; }
|
|
}
|
|
|
|
[Cmdlet("Test", "MyDynamicParamTwoCSharp")]
|
|
public class TestMyDynamicParamTwoCommand : PSCmdlet, IDynamicParameters
|
|
{
|
|
[Parameter(Position = 0)]
|
|
public string Name { get; set; }
|
|
|
|
public object GetDynamicParameters()
|
|
{
|
|
return Name == "Joe" ? new DynamicParamTwo() : null;
|
|
}
|
|
|
|
protected override void EndProcessing() { }
|
|
}
|
|
|
|
#endregion
|
|
} |