Laden...

Profil von toxic

myCSharp.de - Member Mitglied seit
T
toxic
myCSharp.de - Member
14
Themen
64
Beiträge
Dabei seit
21.04.2010
Letzte Aktivität
vor 6 Jahren
Beruf
Konstrukteur
Herkunft
Franken ;-)
Erstellt vor 6 Jahren

So für die Nachwelt hier die Lösung;

Es gibt zwei verschiedene Basisklassen um ein Cmdlet zu erstellen. (Cmdlet und PSCmdlet)

Kleine Beschreibung siehe hier.

Wenn man also von PSCmldet erbt, und nicht so wie ich von Cmdlet, kann man auch auf den ParameterSetName zugreifen.

Erstellt vor 6 Jahren

So würde es mit Reflection funktionieren:

var setName = this.GetType().GetProperty("_ParameterSetName", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(this).ToString();
Erstellt vor 6 Jahren

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");
        }
    }
}
Erstellt vor 6 Jahren

Tolle Arbeit. Muss auch mal gesagt werden.

Und Dankeschön für die Tolle Arbeit! 😁 👍

Erstellt vor 6 Jahren

Ich würde es garnicht programmieren wollen...nimm PowerQuery von Microsoft.
Ist ein kostenloses ExcelPlugin das genau das kann.

Ab Excel 2016 ist es dabei und heißt Get and Transform.

Erstellt vor 7 Jahren

Hi,

schau dir mal das NuGet Package FileHelpers an...

klick mich

Erstellt vor 7 Jahren

Ja, REST ist für sowas aktueller und besser (inhaltlich: Security, Erweiterbarkeit, Hosting...).

Danke Abt, dass wollte ich hören 😁

Erstellt vor 7 Jahren

Hi toxic,

wäre das dann nicht eher ein Anwendungsfall für ein Plugin für die CAD-Anwendung?

Ja es ist ein Plugin für eine CAD Anwendung, dass etwas an eine andere Geschäftsanwendung übergeben soll...

Ist das hier für Dich interessant ?

[FAQ] mehrere Programminstanzen verhindern (inkl. Parameterübergabe)

Grüße Bernd

Bis jetzt hab ich es ja so mit Remoting Mutex etc. realisiert. Ich frage mich ob es per REST und Selfhosted nicht einfacher, "besser", aktueller wäre...

Erstellt vor 7 Jahren

Nein das mein ich nicht.
Ich habe in einem CAD System z.B. ein Bauteil geöffnet und möchte aus diesem einer anderen Anwendung (z.B. einem Befundsystem) sagen, mach bitte den Befund von dem im CAD geöffneten Teil auf.

Ich möchte also nur einen Befehl an die andere Software übergeben...mit einem simplen Parameter wie einer Materialnummer.

Für so Kleinigkeiten.
Bei Word kann ich ja über die Befehlzeile mitgeben, welches Dokument geöffnet werden soll.
So was ähnliches, nur das eben die Anwendung schon offen ist, und es auch nur eine Instanz von ihr gibt.

Die Anwendung laufen auch auf dem selben Client. Ich möchte keine Daten über einen zentralen Server verschieben sondern einfach nur einer anderen Anwendung sagen, mach was...

Erstellt vor 7 Jahren

Hi,

wir haben hier verschiedene Geschäftsanwendungen (GUI-Anwendungen) die Daten miteinander austauschen sollen. Einfaches Beispiel: Öffne Produkt XYZ im Befundsystem etc.

Ich hab sowas eigentlich immer über Remoting gemacht. (RemotingConfiguration.RegisterWellKnownServiceType)


using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Ipc;

In letzter Zeit habe ich auch ein paar Services geschrieben (OWIN REST) und hab mir die Frage gestellt ob das nicht ein einfacherer Weg wäre.

Macht das jemand schon so? Gibt es was, was dagegen spricht. So könnte ich halt Objekte etc sehr einfach von einer in die andere Anwendung schupsen. Beide Anwendungen würden dann über einen Port, ein REST API zu Verfügung stellen (Self hosted) und gut ist...

Oder ist Remoting doch noch die Richtige Wahl dafür...

10 von 64 Beiträgen