PowerShell/test/powershell/engine/ExperimentalFeature/assets/ExpTest/ExpTest.cs

219 lines
6.9 KiB
C#

// Copyright (c) Microsoft Corporation.
// 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.IsEnabled("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
}