Hi,
ich komme gerade nicht weiter. Es gibt ja in Powershell die Möglichkeit mit Parametersets zu arbeiten.
Wie bei Stackoverflow schön gezeigt, kann man im Script schön den aktuellen Namen des Parametersets abrufen:
switch ($PsCmdlet.ParameterSetName) {
"FromFile_ParamSet" {
}
"FromUri_ParamSet" {
}
}
Wenn ich im C# ein Cmdlet erstelle, komm ich an dieses Property aber nicht ran. Das Feld wo es steht ist private. Ich könnte jetzt natürlich mit Reflection mir den Wert auslesen, aber das kann ja nicht der Sinn der Sache sein. Habt ihr eine Idee.
Anbei ein Screenshot vom Debugger.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Management.Automation;
using System.Text;
using System.Threading.Tasks;
namespace PowerShellModule
{
[Cmdlet(VerbsCommon.New, "CmdletTest", DefaultParameterSetName = "ParaSet1")]
public class NewTeamcenterSessionCmdlet : Cmdlet
{
[Parameter(Mandatory = true, ParameterSetName = "ParaSet1")]
public string Parameter1 { get; set; }
[Parameter(Mandatory = true, ParameterSetName = "ParaSet2")]
public string Parameter2 { get; set; }
protected override void BeginProcessing()
{
WriteVerbose("BeginProcessing");
}
protected override void ProcessRecord()
{
WriteVerbose("ProcessRecord");
}
protected override void EndProcessing()
{
WriteVerbose("EndProcessing");
}
protected override void StopProcessing()
{
WriteVerbose("StopProcessing");
}
}
}
So würde es mit Reflection funktionieren:
var setName = this.GetType().GetProperty("_ParameterSetName", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(this).ToString();